对你来说,这个问题有点奇怪。我有一台旧的二合一笔记本平板电脑,运行良好,只是触摸屏驱动程序偶尔会崩溃,导致无法使用。我有一个简单的脚本可以重启它,但当它没有连接到键盘时,重启起来会很麻烦。我建议的解决方案是,当我同时按下两个物理音量键时运行脚本(这两个按钮是我唯一可靠连接的其他输入设备)。我使用的是 Fedora Wayland。这看起来可行吗?如果可行,该如何操作?
对你来说,这个问题有点奇怪。我有一台旧的二合一笔记本平板电脑,运行良好,只是触摸屏驱动程序偶尔会崩溃,导致无法使用。我有一个简单的脚本可以重启它,但当它没有连接到键盘时,重启起来会很麻烦。我建议的解决方案是,当我同时按下两个物理音量键时运行脚本(这两个按钮是我唯一可靠连接的其他输入设备)。我使用的是 Fedora Wayland。这看起来可行吗?如果可行,该如何操作?
是的,您可以从“evdev”接口读取原始输入
/dev/input/event*
,可以使用libevdev或直接从设备节点读取,或者使用更高级别的libinput库(它主要用于鼠标/触摸板预处理,但对按钮不是很有用)。该程序可以使用python-evdev(或 python-libevdev,略有不同)编写:
用于确定您需要哪个事件的 CLI 工具是
evtest
或evemu-record
(或libinput debug-events
如另一个答案中提到的)。您还可以尝试现有的基于 evdev 的“键重新映射”程序之一,以防其中一些程序可以将按键映射到运行命令:
音量键也可能作为 ACPI 事件出现,可以使用以下方式处理
acpid
(类似的逻辑可以写入 /etc/acpi/handler.sh 中)。检查是否acpi_listen
报告了这些事件。看看 libinput(你必须安装 libinput-tools
您
libinput
可以检测事件并在检测到事件时采取行动例如,这是我触摸触摸板时的输出:
如果您在检测到某些特定事件时 grep 命令的输出
stdbuf
并启动脚本,那么您应该能够做您想做的事情注意:您可以将输出重定向到文件描述符中,以便稍后从 bash 中读取(使用
read -u
)例如:
针对我的具体问题,最终的解决方案是几个相互关联的脚本。主要脚本处理
libinput
事件日志(通过管道传输到日志中)并运行最终命令:第二个脚本监督第一个脚本:
systemd
第二个脚本是作为 运行的服务的主题root
。请记住确保非 root 用户无法修改它。