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

Fedora 38(Wayland)环境下Pynput无法运行的问题求助

Pynput在Wayland环境下的授权错误解决方法

问题场景

在Fedora Linux 38(GNOME 44.3,Wayland)环境下运行以下Pynput测试脚本时,出现X连接授权失败错误:

from pynput import keyboard


def on_key_press(key):
    try:
        print(f'Key pressed: {key.char}')
    except AttributeError:
        print(f'Special key pressed: {key}')


def on_key_release(key):
    pass


with keyboard.Listener(on_press=on_key_press, on_release=on_key_release) as listener:
    listener.join()

错误信息

Traceback (most recent call last):
  File "/home/voldemort/projects/pynput_tutorial/main.py", line 1, in <module>
    from pynput import keyboard
  File "/home/voldemort/projects/pynput_tutorial/venv/lib/python3.11/site-packages/pynput/__init__.py", line 40, in <module>
    from . import keyboard
  File "/home/voldemort/projects/pynput_tutorial/venv/lib/python3.11/site-packages/pynput/keyboard/__init__.py", line 31, in <module>
    backend = backend(__name__)
              ^^^^^^^^^^^^^^^^^
  File "/home/voldemort/projects/pynput_tutorial/venv/lib/python3.11/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: Can\'t connect to display ":0": b\'Authorization required, but no authorization protocol specified\\n\'', DisplayConnectionError(':0', b'Authorization required, but no authorization protocol specified\n'))

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

解决方法

错误根源是Pynput默认依赖X11后端,而当前使用Wayland会话,可通过以下三种方式解决:

方法1:临时切换到Xorg会话

  • 登录GNOME时,点击用户名旁的齿轮图标,选择「GNOME on Xorg」登录,之后直接运行脚本即可正常工作。

方法2:为Wayland配置X授权(无需切换会话)

  1. 获取当前用户的X授权信息:
    xauth list $DISPLAY
    
    输出示例:localhost:10 MIT-MAGIC-COOKIE-1 abcdef1234567890
  2. 将授权信息添加到当前终端环境:
    xauth add <上述输出的完整内容>
    
    示例:xauth add localhost:10 MIT-MAGIC-COOKIE-1 abcdef1234567890
  3. 确认DISPLAY变量设置:
    echo $DISPLAY
    
    若输出为空,手动设置:
    export DISPLAY=:0
    
  4. 再次运行Python脚本即可。

方法3:使用Wayland后端(需Pynput版本支持)

部分新版本Pynput已添加Wayland支持,先升级Pynput:

pip install --upgrade pynput

升级后若仍报错,手动指定Wayland后端:

import os
os.environ['PYNPUT_BACKEND'] = 'wayland'
from pynput import keyboard

# 后续脚本代码保持不变
def on_key_press(key):
    try:
        print(f'Key pressed: {key.char}')
    except AttributeError:
        print(f'Special key pressed: {key}')

def on_key_release(key):
    pass

with keyboard.Listener(on_press=on_key_press, on_release=on_key_release) as listener:
    listener.join()

注意:Wayland后端功能可能不如X11完善,部分按键监听场景可能受限。

内容的提问来源于stack exchange,提问作者BasicLucifer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:59:52