如何让udev不给蓝牙键盘分配席位

如何让udev不给蓝牙键盘分配席位

我想使用蓝牙键盘作为遥控器(用于打开电锁的 PIN 输入板),而不是作为控制台输入的实际键盘。我可以使用以下 udev 规则很好地访问蓝牙键盘:

ENV{ID_BUS}=="bluetooth", ATTRS{phys}=="00:1a:7d:e3:76:60", ENV{ID_INPUT_KEYBOARD}=="?*", GROUP="uucp", SYMLINK+="btremote"

这会将设备节点放入uucp组中(这是需要访问关键事件的组),并且还会创建一个符号链接,从/dev/btremote/dev/input12或以适当的设备为准(因为数量似乎有所不同)。到目前为止,一切都很好。

不幸的是,键盘和内置指点设备附加到我的 X 会话,并在我运行时出现loginctl seat-status seat0。这很烦人和危险,因为我计划将遥控器放在比我的控制台更不安全的位置,并且绝对不希望人们在我的控制台上打字(或使用也内置于该键盘中的指点设备)。

我尝试了多种变体:

ATTRS{phys}=="00:1a:7d:e3:76:60", TAG-="seat", ENV{ID_AUTOSEAT}=""

尝试排除该设备连接到我的 X 会话,但 udev 不起作用。作为一种解决方法,我知道我可以创建一个伪造的席位和loginctl attach键盘seat1,但由于这是一个安全问题,我宁愿有一个简单的 udev 规则,完全排除与该 MAC 地址匹配的任何蓝牙设备,因为它是不可信的,没有自动的可能会发生。

我的问题是这个座位分配机制如何工作,以及如何安全地排除一组设备(因为键盘实际上显示为 4 个输入设备)。如果相关的话,我正在使用带有 systemd-242.32 的 arch linux。

更新我将规则添加到名为 的文件中/etc/udev/rules.d/72-btremote.rules,以便它在/usr/lib/udev/rules.d/71-seat.rules和之间运行/usr/lib/udev/rules.d/73-seat-late.rules。前者似乎是seat添加标签的地方,而后者似乎是分配座位号的地方,但我承认我不明白这是如何工作的。

更新2经过一番尝试后,我得到了我想要的东西

ATTRS{phys}=="00:1a:7d:e3:76:60", ENV{ID_SEAT}="none"

这仍然感觉很丑陋,因为我认为它正在创建一个名为“none”的席位,而不是禁用席位标签(或者至少如果任何其他设备具有该master-of-seat标签)。我仍然不明白发生了什么或为什么TAG-="seat"不起作用,所以我仍然没有回答这个问题,希望其他人能够解释。

相关内容