使用root/sudo运行Python脚本时遭遇pynput X连接获取失败错误
解决sudo/root运行pynput脚本时的X连接错误
错误信息
Traceback (most recent call last): File "/boot/system/key.py", line 1, in <module> from pynput.keyboard import Key, Listener, Controller File "/home/user/.local/lib/python3.8/site-packages/pynput/__init__.py", line 40, in <module> from . import keyboard File "/home/user/.local/lib/python3.8/site-packages/pynput/keyboard/__init__.py", line 31, in <module> backend = backend(__name__) File "/home/user/.local/lib/python3.8/site-packages/pynput/_util/__init__.py", line 76, in backend raise ImportError('this platform is not supported: {}'.format( ImportError: this platform is not supported: ('failed to acquire X connection: Bad display name ""', DisplayNameError('')) Try one of the following resolutions: * Please make sure that you have an X server running, and that the DISPLAY environment variable is set correctly
问题原因
使用sudo或root用户执行脚本时,默认不会继承普通用户的DISPLAY环境变量,而pynput依赖X服务器实现键盘监听/控制功能,无法获取正确的DISPLAY值就会触发该错误。
解决方法
临时解决:执行脚本时手动传递DISPLAY变量
直接在命令中指定环境变量,无需修改配置:sudo DISPLAY=$DISPLAY python3 /boot/system/key.py永久解决:让sudo保留DISPLAY环境变量
编辑sudoers配置文件(必须用visudo保证语法正确):sudo visudo在文件末尾添加以下内容:
Defaults env_keep += "DISPLAY"保存退出后,后续使用
sudo执行脚本会自动继承当前用户的DISPLAY变量。切换root后手动设置
先切换到root用户:sudo su手动设置
DISPLAY变量(通常图形界面的DISPLAY值为:0):export DISPLAY=:0再运行你的Python脚本即可。
注意:确保当前处于图形界面环境,X服务器正在运行。
内容的提问来源于stack exchange,提问作者Half Blood
相关产品推荐
相关产品推荐

