1

我正在尝试使用 raspberry pi 3 和笔记本电脑上的 SSH 来控制小型汽车玩具。

我面临的挑战是,当我直接连接到 RPI(鼠标、键盘和显示器插入 RPI)时一切正常,但是当我通过 SSH 连接连接到 RPi 时,这就是我看到的输出:Xlib.error.DisplayNameError:错误的显示名称“”

我用来连接我的 RPi 的方法是“ssh pi@”

请你能告诉我下一步该怎么做吗?

我正在使用的示例代码如下所示:

谢谢你,约翰尼 1984

    from pynput import keyboard
    from pynput.keyboard import Key, Listener

    def on_press(key):
        # DO SOMETHING

    def on_release(key):
        # DO SOMETHING

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

我通过 SSH 连接到 RPI 的方式

ssh pi@(RPI_IP_ADDRESS)

上面一堆文本的错误:

Xlib.error.DisplayNameError: Bad display name ""
4

2 回答 2

0

它发生 pynput 需要 X 和他们的文档中列出的其他一些设置。所以我最终使用了键盘包https://pypi.org/project/keyboard/而不是 pynput.keyboard。

https://unix.stackexchange.com/questions/427345/keyboard-monitoring-without-display

我稍微修改了他的解决方案,以便在按下退出键时可以退出监听。大致是这样的:

import keyboard
import time
#declaring it global so that it can be modified from function
global releaseListening
keepListening = True


def key_press(key):
  print(key.name)
  #if escape is pressed make listening false and exit 
  if key.name == "esc"
    keepListening = False

keyboard.on_press(key_press)

while keepListening :
  time.sleep(1)
于 2019-07-18T16:16:05.953 回答
0

我最近遇到了类似的问题,我可以找到解决方案。

要通过 ssh 进行上述工作,需要打开 /etc/ssh/sshd_config 并取消注释以下行(如果它们被注释):

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

然后在远程 RPI 类型上echo $DISPLAY。结果应该是这样的:

localhost:10.0

运行/调试脚本时,应设置环境变量 DISPLAY=result_of_echo_$DISPLAY

Ps 不要忘记使用 X 服务器通过 ssh 连接 ->ssh user@address -X

于 2022-01-17T09:40:35.517 回答