You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:55:53