当设备不存在时,如何在 Linux 上锁定所有键盘和设备输入

当设备不存在时,如何在 Linux 上锁定所有键盘和设备输入

我运行带有 LUKS 加密分区的 Arch Linux。/efi并且/boot未加密,但我并不太担心其中的数据。

我使用的是保存在 USB 闪存驱动器上的“分离”标头(不用担心,我在防火保险箱中有一个备份,在其他地方有一个加密备份)。这个的好处是,它既需要插入 USB 驱动器,又需要输入我的密码来解密驱动器。

这只是我想要实现的目标的背景故事。如果我坐在办公桌前,想去洗手间或喝咖啡,我只想拔出 USB 驱动器。当这个驱动器被移除时,我希望 gdm 锁定,并且阻止所有输入到机器的输入 - 没有鼠标、没有键盘、没有蓝牙。可能还有一些我还没有想到的其他场景。我想让系统保持运行(编译代码等),但阻止任何人登录。当插入 USB 驱动器(恰好包含标题)时,它将解锁鼠标/键盘并允许我登录。

寻找实现这一目标的新方法。

答案1

我开始研究后,很容易就做到了这一点,但需要反复试验才能做到正确。我会在这里记录下来,以防其他人想做类似的事情。

首先,我要创建一些 udev 规则来在操作上运行脚本。您需要通过执行 udevadm 找到正确的属性,udevadm info -a -n /dev/sdb同时在 DRIVERS 部分下查找模块。

/etc/udev/rules.d/99-usb-addremove-triggers.rules

ACTION=="remove", SUBSYSTEM=="usb", ENV{PRODUCT}=="930/6530/10", ENV{DEVTYPE}=="usb_device", RUN+="/usr/bin/sh /root/source/usb/remove.sh"
ACTION=="add", SUBSYSTEM=="usb", ENV{PRODUCT}=="930/6530/10", ENV{DEVTYPE}=="usb_device", RUN+="/usr/bin/sh /root/source/usb/add.sh"

/root/source/usb然后我在:remove.sh和中添加了 2 个文件add.sh。从技术上讲,这些文件可以合并,您可以传递操作,但我选择将它们分开。

对于这些文件,我想要:

  1. 锁定屏幕
  2. 禁用键盘
  3. 禁用鼠标
  4. 阻止蓝牙

/root/source/usb/remove.sh

rfkill block bluetooth
loginctl lock-sessions
modprobe -r usbhid
modprobe -r i2c_hid_acpi

/root/source/usb/add.sh

rfkill unblock bluetooth
modprobe usbhid
modprobe i2c_hid_acpi

相关内容