崔劍鈞
Linux會自動為連接的USB打印機(jī)分配類似于lp0這樣的設(shè)備名稱,假如連接了多臺USB打印機(jī),系統(tǒng)則會按照開機(jī)順序依次將其命名為lp0、lp1……,設(shè)備名稱與打印機(jī)不存在固定的對應(yīng)關(guān)系。如果在安裝、配置過程中通過設(shè)備名稱綁定某臺打印機(jī),一旦名稱發(fā)生變化就會失去響應(yīng),雖然打印狀態(tài)顯示為“打印中”,但實際上卻無法打?。▓D1)。對此,我們可以通過設(shè)置udev規(guī)則來為打印機(jī)創(chuàng)建一個固定的符號鏈接名,用以代替可變的設(shè)備名稱。操作如下:
1打開終端窗口,輸入“l(fā)susb”命令并回車(每輸入一條命令均需回車確認(rèn),下同),查看本機(jī)的USB設(shè)備列表。比如筆者連接的打印機(jī)是CanonLBP2900+,顯示為“Bus001Device016:ID04a9:266aCanon,Inc.LBP3000”,表示該打印機(jī)是當(dāng)前系統(tǒng)中的/dev/bus/usb/001/016設(shè)備(圖2)
2接著在終端窗口中執(zhí)行“udevadminfo-a/dev/bus/usb/001/016”命令(設(shè)備路徑請根據(jù)上一步的查詢結(jié)果自行修改),查詢其在udev數(shù)據(jù)庫中的信息。查詢會從設(shè)備路徑內(nèi)指定的設(shè)備開始,然后沿著父設(shè)備鏈向上移動,并顯示找到的每個設(shè)備的所有可能屬性。為了保證被管理設(shè)備的唯一性,要重點查看Serial(設(shè)備序列號)信息,這里是ATTR{serial}=="0000C3J75Jxw"(圖3)。
3繼續(xù)執(zhí)行“sudovim/etc/udev/rules.d/10-printer.rules”命令創(chuàng)建規(guī)則文件(規(guī)則文件的名字必須以數(shù)字開頭且擴(kuò)展名為.rules,這里是10-printer.rules,也可以將其修改為其他名字),在打開的窗口中輸入以下語句:
SUBSYSTEMS=="usb",ATTRS{serial}=="0000C3J75Jxw",SYMLINK+="usb/capt"
在該規(guī)則語句中,“==”操作符將做相等比較;SUBSYSTEMS=="usb"、ATTRS{serial}=="0000C3J75Jxw",分別表示匹配USB子系統(tǒng)和序列號為“0000C3J75Jxw”的設(shè)備;“+=”操作符將追加特定的值給已經(jīng)存在的鍵;SYMLINK+="usb/capt"表示在/dev/usb/目錄中增加一個符號鏈接capt(也可以將capt修改為其他名字)。
保存后重啟系統(tǒng),在/dev/usb/目錄中將會增加一個綁定了CanonLBP2900+打印機(jī)的符號鏈接capt(圖4)。以后在配置打印機(jī)時,直接用符號鏈接名capt代替原來的設(shè)備名稱lp0就可以了。由于符號鏈接名不變,無論打印機(jī)接入系統(tǒng)的順序如何,都不會影響正常打印。
udev可以使用KERNEL(設(shè)備的內(nèi)核名稱)、ATTR(設(shè)備的屬性)等條件來識別設(shè)備、隱藏分區(qū)。這里以隱藏本機(jī)中的DATA1分區(qū)為例來說明(圖5)。在終端窗口中執(zhí)行“l(fā)sblk”命令,可以查到該分區(qū)是當(dāng)前系統(tǒng)中的/dev/sdb2設(shè)備(圖6)。接著執(zhí)行“udevadminfo-a/dev/sdb2”命令,可以查到該設(shè)備在udev數(shù)據(jù)庫中的SUBSYSTEM=="block"、ATTR{size}=="942085519"等信息。繼續(xù)執(zhí)行“sudovim/etc/udev/rules.d/20-hidepart.rules”命令創(chuàng)建規(guī)則文件(文件名字規(guī)則同前),在打開的窗口中輸入以下規(guī)則語句:
SUBSYSTEM=="block",ATTR{size}=="942085519",ENV{UDISKS_IGNORE}="1"
保存后重啟系統(tǒng),這時在文件管理器中就看不到DATA1分區(qū)了(圖7)。
在電腦中插入指定的閃存盤(以USB-Disk為例),如果想禁用所有的閃存盤,可隨意插入一個。接著在終端窗口中執(zhí)行“l(fā)sblk”命令,查詢閃存盤的內(nèi)核名稱,這里是/dev/sdc。然后執(zhí)行“udevadminfo-a/dev/sdc”命令,查詢該設(shè)備在udev數(shù)據(jù)庫中的信息,比如SUBSYSTEMS=="usb"、DRIVERS=="usbstorage"、ATTRS{serial}=="4C530000261106102394"等。繼續(xù)執(zhí)行“sudovim/etc/udev/rules.d/30-hide_USBstorage.rules”命令創(chuàng)建規(guī)則文件(文件名字規(guī)則同前),在打開的窗口中輸入以下規(guī)則語句并保存。
SUBSYSTEMS=="usb",DRIVERS=="usb-storage",ENV{UDISKS_IGNORE}="1"
SUBSYSTEMS=="usb",ATTRS{serial}=="4C530000261106102394",ENV{UDISKS_IGNORE}="0"
這兩條語句表示除了設(shè)備序列號為“4C530000261106102394”的閃存盤外(設(shè)備序列號請根據(jù)實際情況自行修改),其他閃存盤將全部被禁用。如果不允許有特例,只輸入第一行語句即可。
重啟系統(tǒng)后,就只有USB-Disk閃存盤可以使用了。