用好udev Linux设备管理更灵活
2022-05-30崔剑钧
崔剑钧
固定打印设备的名称
Linux会自动为连接的USB打印机分配类似于lp0这样的设备名称,假如连接了多台USB打印机,系统则会按照开机顺序依次将其命名为lp0、lp1……,设备名称与打印机不存在固定的对应关系。如果在安装、配置过程中通过设备名称绑定某台打印机,一旦名称发生变化就会失去响应,虽然打印状态显示为“打印中”,但实际上却无法打印(图1)。对此,我们可以通过设置udev规则来为打印机创建一个固定的符号链接名,用以代替可变的设备名称。操作如下:
1打开终端窗口,输入“lsusb”命令并回车(每输入一条命令均需回车确认,下同),查看本机的USB设备列表。比如笔者连接的打印机是CanonLBP2900+,显示为“Bus001Device016:ID04a9:266aCanon,Inc.LBP3000”,表示该打印机是当前系统中的/dev/bus/usb/001/016设备(图2)
2接着在终端窗口中执行“udevadminfo-a/dev/bus/usb/001/016”命令(设备路径请根据上一步的查询结果自行修改),查询其在udev数据库中的信息。查询会从设备路径内指定的设备开始,然后沿着父设备链向上移动,并显示找到的每个设备的所有可能属性。为了保证被管理设备的唯一性,要重点查看Serial(设备序列号)信息,这里是ATTR{serial}=="0000C3J75Jxw"(图3)。
3继续执行“sudovim/etc/udev/rules.d/10-printer.rules”命令创建规则文件(规则文件的名字必须以数字开头且扩展名为.rules,这里是10-printer.rules,也可以将其修改为其他名字),在打开的窗口中输入以下语句:
SUBSYSTEMS=="usb",ATTRS{serial}=="0000C3J75Jxw",SYMLINK+="usb/capt"
在该规则语句中,“==”操作符将做相等比较;SUBSYSTEMS=="usb"、ATTRS{serial}=="0000C3J75Jxw",分别表示匹配USB子系统和序列号为“0000C3J75Jxw”的设备;“+=”操作符将追加特定的值给已经存在的键;SYMLINK+="usb/capt"表示在/dev/usb/目录中增加一个符号链接capt(也可以将capt修改为其他名字)。
保存后重启系统,在/dev/usb/目录中将会增加一个绑定了CanonLBP2900+打印机的符号链接capt(图4)。以后在配置打印机时,直接用符号链接名capt代替原来的设备名称lp0就可以了。由于符號链接名不变,无论打印机接入系统的顺序如何,都不会影响正常打印。
禁用磁盘分区
udev可以使用KERNEL(设备的内核名称)、ATTR(设备的属性)等条件来识别设备、隐藏分区。这里以隐藏本机中的DATA1分区为例来说明(图5)。在终端窗口中执行“lsblk”命令,可以查到该分区是当前系统中的/dev/sdb2设备(图6)。接着执行“udevadminfo-a/dev/sdb2”命令,可以查到该设备在udev数据库中的SUBSYSTEM=="block"、ATTR{size}=="942085519"等信息。继续执行“sudovim/etc/udev/rules.d/20-hidepart.rules”命令创建规则文件(文件名字规则同前),在打开的窗口中输入以下规则语句:
SUBSYSTEM=="block",ATTR{size}=="942085519",ENV{UDISKS_IGNORE}="1"
保存后重启系统,这时在文件管理器中就看不到DATA1分区了(图7)。
只允许使用指定的闪存盘
在电脑中插入指定的闪存盘(以USB-Disk为例),如果想禁用所有的闪存盘,可随意插入一个。接着在终端窗口中执行“lsblk”命令,查询闪存盘的内核名称,这里是/dev/sdc。然后执行“udevadminfo-a/dev/sdc”命令,查询该设备在udev数据库中的信息,比如SUBSYSTEMS=="usb"、DRIVERS=="usbstorage"、ATTRS{serial}=="4C530000261106102394"等。继续执行“sudovim/etc/udev/rules.d/30-hide_USBstorage.rules”命令创建规则文件(文件名字规则同前),在打开的窗口中输入以下规则语句并保存。
SUBSYSTEMS=="usb",DRIVERS=="usb-storage",ENV{UDISKS_IGNORE}="1"
SUBSYSTEMS=="usb",ATTRS{serial}=="4C530000261106102394",ENV{UDISKS_IGNORE}="0"
这两条语句表示除了设备序列号为“4C530000261106102394”的闪存盘外(设备序列号请根据实际情况自行修改),其他闪存盘将全部被禁用。如果不允许有特例,只输入第一行语句即可。
重启系统后,就只有USB-Disk闪存盘可以使用了。