我的笔记本电脑仅通过 wifi 连接到互联网,但偶尔会断开连接。发生这种情况时,我无法ssh
进入,必须亲自登录才能重新连接 wifi nmcli
(我没有设置任何图形)。
不幸的是,一些键盘键没有反应,这些键是用户登录和输入 wifi 密码所必需的。
因此,我设置了一个用户帐户,其名称仅使用有效的键,其登录“shell”是一个用于重新连接 wifi 的脚本:
#!/usr/bin/bash
if /usr/bin/nmcli device wifi connect 'SSID' password 'PASSWORD'; then
echo "Connected as $(ip -json -4 address show wlp2s0 | jq -r '.[0].addr_info[0].local')"
else
echo 'Failed to connect to wifi'
fi
read -sN 1 -p 'Press any key to exit...'
wirec:x:970:969::/:/opt/wirec/wirec
这绝对不是一个很好的设置,但它在我等待新键盘到达时可以工作。我还发现它NetworkManager
有一个自动重新连接功能,这确实是我想要的。但它确实让我思考:
在一般情况下,当程序需要敏感的交互式输入,并且没有网络连接,也没有键盘时,是否有可能将输入提供给程序?或者,当有网络运行时将其写下来是否是最好的选择?
我使用
script
(https://linux.die.net/man/1/script)但是对于您的特殊情况,我会使用
rina
并让其在tmux
或中运行screen
:如果 10 秒内无法 ping 8.8.8.8,请运行该命令。
将 8.8.8.8 替换为您的 ISP 的路由器。
丽娜:https://git.data.coop/tange/tangetools/src/branch/master/rina
嗯,这取决于程序愿意接受什么类型的输入设备。
请注意,命令行程序等
nmcli
使用TTY 设备进行输入,而不是专门使用键盘。因此,任何可以表示为 TTY 设备的东西都可以工作:如果您的笔记本电脑有 RS-232 串行端口或 USB 转串行适配器,您可以轻松地将其用于命令行会话,但您需要一些硬件作为串行电缆另一端的终端。对于大多数 Linux 发行版,还需要进行一些最低限度的设置。例如,在使用 的现代发行版中
systemd
,通常只需要一个命令即可使系统持续接受/dev/ttyS0
串行端口上的登录:。systemctl enable --now [email protected]
如果您愿意编写自定义 TTY 设备驱动程序,那么基本上任何事情都可以:如果您能输入的只有一条数据线和一条地线,那么您可以制作一个接受摩尔斯电码输入的 TTY 设备。除非您已经精通摩尔斯电码,否则您可能仍然更喜欢可以在输出端直观显示字符的东西 :-)
如果现有驱动程序已涵盖可用硬件,而您不想进行内核级编程,也可以在用户空间中进行编程。最简单的方法是使用桌面环境的功能将自定义按键操作分配给鼠标按钮事件等;然后您可以使用多按钮游戏鼠标代替数字键盘。
screen
或者,您可以获取或之类的实用程序的源代码tmux
并重写它们的输入处理以读取可用的任何输入设备(甚至是一组原始的 GPIO 引脚);然后,该实用程序将处理设置伪 TTY(PTY)设备,该设备可用于使用您的自定义输入硬件运行任何基于 TTY 的交互式程序。