新聞中心
隨著科技的不斷發(fā)展,USB設(shè)備已經(jīng)成為了我們家庭或辦公室中不可或缺的設(shè)備之一。USB設(shè)備給我們的生活帶來(lái)了很多便利,如鼠標(biāo)、鍵盤(pán)、攝像頭、打印機(jī)、外置硬盤(pán)等等。在Linux中,當(dāng)我們連接USB設(shè)備到計(jì)算機(jī)上時(shí),計(jì)算機(jī)將自動(dòng)檢測(cè)并安裝驅(qū)動(dòng)程序,然后開(kāi)始與設(shè)備進(jìn)行通訊。然而,有些時(shí)候我們需要在計(jì)算機(jī)休眠或關(guān)機(jī)時(shí),通過(guò)USB設(shè)備來(lái)激活計(jì)算機(jī)。這時(shí),就需要我們學(xué)習(xí)如何使用。

一、了解USB設(shè)備的休眠模式
USB設(shè)備在連到計(jì)算機(jī)的情況下有3種狀態(tài): 運(yùn)行、掛起、休眠。在Linux中,一般情況下,USB設(shè)備默認(rèn)為掛起狀態(tài),這是為了降低設(shè)備的功耗。當(dāng)設(shè)備長(zhǎng)時(shí)間不使用時(shí),由于計(jì)算機(jī)會(huì)自動(dòng)將設(shè)備掛起,而設(shè)備進(jìn)入休眠狀態(tài)。在USB設(shè)備進(jìn)入休眠狀態(tài)后,它的電源將被斷開(kāi),因此將無(wú)法通過(guò)USB設(shè)備喚醒計(jì)算機(jī)。
二、使用USB_WAKEUP
USB_WAKEUP是Linux內(nèi)核中用來(lái)解決USB設(shè)備斷電喚醒機(jī)制的一個(gè)程序,主要用于在休眠狀態(tài)下通過(guò)USB設(shè)備喚醒計(jì)算機(jī)。在開(kāi)啟USB_WAKEUP功能之前需要進(jìn)行如下操作:
1. 使用工具lsu查看USB設(shè)備的相關(guān)信息;
2. 根據(jù)設(shè)備廠商與型號(hào)獲取設(shè)備的venderid與productid;
3. 使用命令sudo modprobe uas_uhci rescan=1讓USB設(shè)備重載。
在確定相關(guān)信息后,可以使用如下命令開(kāi)啟USB_WAKEUP功能:
sudo sh -c ‘for i in /sys/bus/u/devices/*/power/wakeup; do echo enabled > $i; done’
當(dāng)需要關(guān)閉USB_WAKEUP功能時(shí),只需執(zhí)行以下命令即可:
sudo sh -c ‘for i in /sys/bus/u/devices/*/power/wakeup; do echo disabled > $i; done’
三、編寫(xiě)udev規(guī)則
udev是Linux下的一種驅(qū)動(dòng)管理機(jī)制,它允許用戶通過(guò)udev規(guī)則控制設(shè)備的屬性和行為,包括USB設(shè)備聯(lián)機(jī)與斷電。為了讓USB設(shè)備在斷電時(shí)能夠喚醒計(jì)算機(jī),需要在Linux下創(chuàng)建一個(gè)udev規(guī)則。
1. 打開(kāi)/etc/udev/rules.d目錄;
2. 使用文本編輯器創(chuàng)建一個(gè)以50-u-wakeup.rules命名的文件,輸入以下內(nèi)容:
ACTION==”add”, SUBSYSTEM==”u”, ATTRS{idVendor}==”1234″ , ATTRS{idProduct}==”abcd”, RUN+=”/bin/sh -c ‘echo enabled > %S%p/power/wakeup'”
此值中的idVendor與idProduct是USB設(shè)備的veniderid與productid,需要將它們改為實(shí)際設(shè)備的具體信息。
3. 使用命令sudo udevadm control –reload-rules重載udev規(guī)則。
通過(guò)以上步驟,USB設(shè)備就可以通過(guò)斷電喚醒計(jì)算機(jī)了。
四、測(cè)試效果
使用udev規(guī)則來(lái)控制USB設(shè)備的斷電喚醒機(jī)制,理論上可以在任何時(shí)候使用USB設(shè)備來(lái)喚醒計(jì)算機(jī)。這是因?yàn)樵贚inux中,當(dāng)USB設(shè)備連接上計(jì)算機(jī)時(shí),udev規(guī)則會(huì)自動(dòng)與內(nèi)核進(jìn)行交互,以實(shí)現(xiàn)USB設(shè)備的連接和斷開(kāi)。為了確保這種方法的可行性,可以在計(jì)算機(jī)還沒(méi)有進(jìn)入休眠狀態(tài)時(shí)進(jìn)行測(cè)試,測(cè)試效果如下:
1. 連接USB設(shè)備到計(jì)算機(jī)上;
2. 輸入命令sudo systemctl suspend讓計(jì)算機(jī)進(jìn)入休眠狀態(tài);
3. 使用USB設(shè)備進(jìn)行測(cè)試,觀察計(jì)算機(jī)是否能在之一時(shí)間喚醒。
在測(cè)試中,如果計(jì)算機(jī)能夠在之一時(shí)間喚醒,說(shuō)明USB設(shè)備的斷電喚醒機(jī)制已經(jīng)成功地解決了這個(gè)問(wèn)題。
在Linux中使用USB設(shè)備進(jìn)行斷電喚醒計(jì)算機(jī),可以帶來(lái)很大的便利,尤其是在需要靈活控制自己計(jì)算機(jī)的時(shí)候。不過(guò),在使用USB設(shè)備斷電喚醒機(jī)制之前,需要注意設(shè)備是否支持該功能,可以通過(guò)查詢?cè)O(shè)備的官方說(shuō)明或使用其他工具進(jìn)行測(cè)試。此外,還需要在操作系統(tǒng)中啟用USB_WAKEUP功能并編寫(xiě)udev規(guī)則,以實(shí)現(xiàn)自動(dòng)控制USB設(shè)備的聯(lián)機(jī)和斷電。在以上過(guò)程中需要保證操作的正確性與穩(wěn)定性,以避免對(duì)計(jì)算機(jī)造成不必要的影響。
相關(guān)問(wèn)題拓展閱讀:
- linux 下 USB的熱插拔問(wèn)題?
linux 下 USB的熱插拔問(wèn)題?
目前一些主流桌面系統(tǒng)(如Gnome,KDE,Xfce)的較新版本都支持自動(dòng)掛載(mount)U盤(pán)了. 一個(gè)流傳很廣的說(shuō)法是 HAL(硬件抽象層) 起了自動(dòng)掛載的作用, 其實(shí)這是誤解. 對(duì)于2.6內(nèi)核而言, udev 才是直接從內(nèi)核接收設(shè)備連接或斷開(kāi)信息的主體.
udev 從內(nèi)核得到信息后,根據(jù)一些簡(jiǎn)單規(guī)則(注意,是簡(jiǎn)單規(guī)則), 在 /dev 目錄下創(chuàng)建相應(yīng)的設(shè)備節(jié)點(diǎn), 并進(jìn)行某些相關(guān)操作. HAL 所做的事情是在 udev 的規(guī)則中加上一條(或幾條), 讓 udev 把收到的信息也傳遞給 HAL. 接派顫裂下來(lái), HAL 用更為復(fù)雜的規(guī)則來(lái)匹配和描述當(dāng)前連接著的硬件. 舉一個(gè)簡(jiǎn)單的例子, udev 知道的是U盤(pán)已經(jīng)連接了并且有一個(gè)分區(qū); 而 HAL 能更進(jìn)一步知道這個(gè)分區(qū)的卷標(biāo)名及其它一些信息.
上面這些都還不能自動(dòng)掛載U盤(pán). Gnome 等桌面系統(tǒng)會(huì)啟動(dòng)一個(gè)守護(hù)進(jìn)程(daemon), 通過(guò) D-Bus 從 HAL 那里得到硬件信息, 如果發(fā)現(xiàn)有U盤(pán)連接了就由它們來(lái)掛載它(實(shí)際是調(diào)用 pmount).
問(wèn)題是, 如果你不想用Gnome,KDE,Xfce這些桌面系統(tǒng), 那么由它們提供的U盤(pán)自動(dòng)掛載功能也洞鄭就失效了,有解決辦法么?
解決的辦法之一, 便是讓 udev 來(lái)干這件事情!
udev 的主要功能是實(shí)時(shí)地在 /dev 目錄下創(chuàng)建和刪除設(shè)備節(jié)點(diǎn), 但它也能在創(chuàng)建節(jié)點(diǎn)的同時(shí), 執(zhí)行一個(gè)額外地程序. 具體的原理這里就不詳說(shuō)了, 有時(shí)間請(qǐng)仔細(xì)閱讀 Writing udev rules 這篇文章. 寫(xiě)規(guī)則時(shí)特別注意 KERNEL, SUBSYSTEM 等這些關(guān)鍵字單數(shù)和復(fù)數(shù)(最后有沒(méi)有’S’)的區(qū)別. 復(fù)數(shù)(比如 KERNELS)表示你想用父設(shè)備的屬性來(lái)匹配, 單數(shù)(比如 KERNEL)是要匹配設(shè)備本身的屬性.
在 /etc/udev/rules.d 目錄下創(chuàng)建文件 10_ukey.rules, 其內(nèi)容如下
KERNEL==”sda1″, SUBSYSTEM==”block”, RUN+=”/root/umount.sh”
然后, 在 /root 目錄中創(chuàng)建文件 umount.sh, 其內(nèi)容為
#!/bin/bash
LOG=/var/log/u-hotplug.log
lap=$(date –rfc-3339=ns)
echo “$lap: $DEVPATH requesting $ACTION” >> $LOG
if
then
mount -t vfat -o umask=000,noatime,async,codepage=936,iocharset=gb2312 \
/dev/sda1 /media/ukey
elif
then
umount -l /media/ukey
fi
并把該文件屬性設(shè)置為可執(zhí)行, chmod a+x umount.sh
注意, 如果你的 linux 上 locale 是 zh_CN.utf-8, 需要把上面的 iocharset=gb2312 改成 iocharset=utf8
最后創(chuàng)建目塵閉錄, mkdir /media/ukey
這是一個(gè)非常簡(jiǎn)單但可用的例子. U盤(pán)插上后自動(dòng) mount 到 /media/ukey , 拔出后自動(dòng) umount. 你可以查看 /var/log/u-hotplug.log , 里面會(huì)有些簡(jiǎn)單的調(diào)用記錄.
關(guān)于linux u 斷電 wakeup的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)頁(yè)題目:LinuxUSB斷電喚醒技巧(linuxu斷電wakeup)
文章轉(zhuǎn)載:http://www.5511xx.com/article/cdhsips.html


咨詢
建站咨詢
