![使用 sudo 运行应用程序时无法连接到 X 服务器](https://linux22.com/image/822618/%E4%BD%BF%E7%94%A8%20sudo%20%E8%BF%90%E8%A1%8C%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%97%B6%E6%97%A0%E6%B3%95%E8%BF%9E%E6%8E%A5%E5%88%B0%20X%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
当我使用命令运行某些软件时,sudo
它会显示类似以下错误
cannot connect to X server
例如如果我运行以下命令:
$ sudo gedit /etc/profile
我收到以下命令
(gedit:6758): WARNING **: Command line `dbus-launch --autolaunch=84b871d735f31ffe014dc9ba00000009 --binary-syntax --close-stderr'
exited with non-zero exit status 1:
Autolaunch error: X11 initialization failed.
Cannot open display:
Run 'gedit --help' to see a full list of available command line options.
或者如果我正在运行super-boot-manager
我收到以下错误
buc: cannot connect to X server
请帮忙。
答案1
您需要允许 root 用户访问 X 服务器:
xhost local:root
并将命令指向右侧DISPLAY
:
sudo DISPLAY=$DISPLAY gedit /etc/profile
答案2
问题终于解决了。我刚刚添加了这一行:
Defaults env_keep="DISPLAY XAUTHORITY"
在......的最后visudo
。
为此,您必须运行:
sudo visudo
它将打开该文件,然后在末尾添加上述行。
感谢所有人,特别是@Thor 的热情帮助
答案3
补充@Thor 的回答, 跑步:
xhost local:root
之前sudo gedit
。要使此设置永久生效,请添加以下行
xhost local:root
到~/.xinitrc
1 个文件。如果文件不存在,则创建该文件。
答案4
在运行脚本之前设置DISPLAY
并XAUTHORITY
改变环境。例如在systemctl
服务文件中:
[Unit]
Description=Start Clock
[Service]
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/pi/.Xauthority
ExecStart=/usr/bin/python3 /home/pi/clock.py
Restart=always
RestartSec=10s
KillMode=process
TimeoutSec=infinity
[Install]
WantedBy=graphical.target