我有一台运行 Debian Linux 的树莓派,并且我有一个 RFID 阅读器连接到它。RFID 阅读器就像一个键盘。每次我扫描标签时,它都会输入标签编号,然后回车。
我的问题是我想将 RFID 阅读器的输出重定向到我的 SSH 会话。这意味着在 pi 的物理键盘上输入的任何内容都应显示在我的 SSH 窗口中。
我已经尝试过:cat /dev/tty0
但是它不起作用,因为用户尚未登录。
有没有办法在 pi 启动后禁用登录屏幕,然后通过 SSH 重定向所有输入?
答案1
一个解决方案是更改 init 系统,这样 getty 进程就可以获取 tty 并调用您的脚本。然后您的脚本可能会初始化命名管道(又名 fifo)并将 stdin 重定向到它。
然后您可以通过 ssh 登录并从该管道读取。
答案2
我有这个确切的用例(带有 RFID 阅读器的 raspi 模拟 USB 键盘)。
我通过创建一个新的 systemd 单元来在屏幕上启动我的脚本来解决了这个问题(这样我就可以通过 ssh 镜像会话来查看发生了什么)。
1.创建/etc/systemd/system/my-tty1.service
:
[Unit]
Description=my tty1-service
After=getty.target
[email protected]
[Service]
Type=simple
ExecStart=/usr/bin/screen -S myTTY1 /path/to/my/script
StandardInput=tty-force
StandardOutput=inherit
StandardError=inherit
[Install]
WantedBy=multi-user.target
这将启动您的脚本(或程序)来处理名为 myTTY1 的屏幕会话中的输入。
2. 启用该服务,使其在启动后启动:
systemctl enable my-tty1.service
3. 停止 getty,启动你的服务:
systemctl stop [email protected]
systemctl start my-tty1.service
4. 现在,您可以通过 ssh 连接到您的屏幕会话screen -x myTTY1
。使用 断开屏幕连接CTRL+A
,然后使用D
。