由于systemd-udevd带起来的进程是root权限的,环境里各类变量也不是当前桌面用户的,因此在Arch的Wiki里找到了调用外部脚原本通知用户桌面。php
最后的解决方案是在udev规则里导入xpub获取桌面环境变量,再执行命令锁屏。linux
执行udevadm monitor --environment --udev
监听USB事件,拔掉U盘,找到MODALIAS,原文里是找ID_MODEL,我为何要找呢?由于ID_MODEL是不惟一的,别人的U盘可能也是同样的,你也不想其余U盘能够触发事件吧。因此找了一个看起来很复杂的字符串,在网上也搜索不到,应该就是惟一的了。git
UDEV [4042.754116] remove /devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0 (usb) ACTION=remove DEVPATH=/devices/pci0000:00/0000:00:14.0/usb2/2-3/2-3:1.0 SUBSYSTEM=usb DEVTYPE=usb_interface PRODUCT=13fe/5100/110 TYPE=0/0/0 INTERFACE=8/6/80 MODALIAS=usb:v13FEp5100d0110dc00dsc00dp00ic08isc06ip50in00 SEQNUM=3709 USEC_INITIALIZED=2346820353 adb_user=yes ID_PATH=pci-0000:00:14.0-usb-0:3:1.0 ID_PATH_TAG=pci-0000_00_14_0-usb-0_3_1_0 ID_FOR_SEAT=usb-pci-0000_00_14_0-usb-0_3_1_0
ACTION=="remove", SUBSYSTEM=="usb", ENV{MODALIAS}=="usb:v13FEp5100d0110dc00dsc00dp00ic08isc06ip50in00",IMPORT{program}="/usr/bin/xpub", RUN+="/usr/bin/sudo -u kali-team /usr/bin/xdotool key Super_L+l"
触发_udev_规则事件的桌面提示github
Introducing BusKill: A Kill Cord for your Laptopide
xdotool测试
xpub.net