我运行带有 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
。从技术上讲,这些文件可以合并,您可以传递操作,但我选择将它们分开。
对于这些文件,我想要:
- 锁定屏幕
- 禁用键盘
- 禁用鼠标
- 阻止蓝牙
/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