繁体   English   中英

在 python 中使用 pynput 函数通过 SSH 向树莓派 pi3 进行键盘输入

[英]Keyboard input over SSH to the raspberry pi3 with pynput function in python

我正在尝试使用 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 ""

碰巧 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)

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

要通过 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM