崔劍鈞
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閃存盤可以使用了。