工作的時候,我們總希望能夠提高效率,這樣壓力就會減少一些,工作起來也更輕松。而現(xiàn)在應(yīng)用商店中的效率軟件琳瑯滿目,很多人在選擇的不知道該如何下手。要小編來說的話,想要明顯提高效率,自動提醒軟件很實(shí)用。
它像第二大腦一樣幫助我們記錄很多的雜事或者重要的事情,讓我們不為這些事情所累,從而剩下更多的精力去處理更有價值的事情。
以Windows電腦端為例,我們平時工作的日程、計劃、待辦事項等都可以記在敬業(yè)簽待辦上面,生活上的事情也可以,因?yàn)樗梢赃M(jìn)行分類管理,所以事情再多也不會亂。這是“記事”方面,而在提醒方面,我們只要在記錄的時候,點(diǎn)擊提醒按鈕就可以添加單次提醒、重復(fù)提醒或重要事項間隔提醒、公歷農(nóng)歷提醒等,頁面簡單易懂,操作也不復(fù)雜,記得確認(rèn)和保存即可。
這樣一來,我們只需要等待彈窗和鈴聲通知就行,如果無法時刻守在電腦前,也可以綁定微信、釘釘、電子郵箱、手機(jī)短信、語音電話等,接收通知。或者,在蘋果或安卓手機(jī)端,下載并登錄同一賬號,就可以同步接收提醒通知了。
里有個配置可觀的臺式機(jī),但苦于噪聲和耗電,基本處于關(guān)機(jī)狀態(tài)。這個對于偶爾需要遠(yuǎn)程登陸該機(jī)器的需求就不太可能滿足,更不談遠(yuǎn)程控制了。 為此探究了一下電腦的遠(yuǎn)程喚醒功能,并且給家里的臺式機(jī)配置了該功能,從此無論何時何地,只要有個輕終端和網(wǎng)絡(luò)就能如同在家一樣折騰這個工作站了。
家里有個自己 DIY 組裝的臺式機(jī),最初對它的設(shè)想是既能充當(dāng)讓我折騰的工作站也滿足我娛樂的平臺。為此給它安裝了雙系統(tǒng),Ubuntu 是它的默認(rèn)系統(tǒng),也是我常用的工作環(huán)境; Win10 是另一個系統(tǒng),偶爾用它來打打游戲。一開始想將它當(dāng)做服務(wù)器一直開機(jī),但后來直接放棄了。原因一方面是運(yùn)行時水冷風(fēng)扇還有有聲的,特別是夜深人靜的時候;另一方面是一天大部分時間都在公司上班,不可能比較高頻的操作家庭電腦,比較浪費(fèi)電。所以家里的電腦基本就是下班回來會搗鼓搗鼓,而且還是通過公司提供的 Mac 電腦局域網(wǎng)遠(yuǎn)程登陸,畢竟臺式機(jī)開機(jī)登陸也挺耗時的。最近突發(fā)奇想的搜索了遠(yuǎn)程開機(jī)的信息,想以此來達(dá)到想用就開機(jī),不用就自動休眠或手動關(guān)機(jī)的目的。沒想到還真有這騷操作,學(xué)名叫遠(yuǎn)程喚醒或網(wǎng)絡(luò)喚醒,英文叫 Wake-on-LAN。
在實(shí)踐網(wǎng)絡(luò)喚醒之前,我們需要了解一下網(wǎng)絡(luò)喚醒的原理以及喚醒方法。
電腦處在關(guān)機(jī)(或休眠)狀態(tài)時,機(jī)內(nèi)的網(wǎng)卡及主板部分仍保有微弱的供電,此微弱供電能讓網(wǎng)卡保有最低的運(yùn)作能力,使網(wǎng)卡能聆聽來自電腦外部的網(wǎng)絡(luò)廣播信息,并對信息內(nèi)容進(jìn)行偵測與解讀,一旦發(fā)現(xiàn)網(wǎng)絡(luò)廣播的內(nèi)容中有特定的魔法數(shù)據(jù)包Magic Packet,就會對該數(shù)據(jù)包的內(nèi)容進(jìn)行研判。
魔法數(shù)據(jù)包是以廣播方式發(fā)送的,廣播的方式與范疇可以是整個局域網(wǎng)(LAN),也可以是特定的子網(wǎng)(Subnet),同時魔法數(shù)據(jù)包內(nèi)會有某部(或一群)電腦的網(wǎng)絡(luò)地址資料,網(wǎng)卡一旦解讀研判出所指的地址是自身所處的電腦時,網(wǎng)卡就會通知機(jī)內(nèi)的主板、電源供應(yīng)器,開始進(jìn)行引導(dǎo)(或喚醒)的程序。
魔法數(shù)據(jù)包Magic Packet 是一個廣播性的幀frame,透過端口 7 或端口 9 進(jìn)行發(fā)送,且可以用無連接 Connectionless protocol 的通信協(xié)議(如UDP、IPX)來傳遞,不過一般而言多是用 UDP,原因是 Novell 公司的 Netware 網(wǎng)絡(luò)操作系統(tǒng)的IPX協(xié)議已經(jīng)愈來愈少被使用。
在魔法數(shù)據(jù)包內(nèi),每次都會先有連續(xù) 6 個 FF(十六進(jìn)制,換算成二進(jìn)制即:11111111)的資料,即:FF FF FF FF FF FF,在連續(xù) 6 個 FF 后則開始帶出 MAC 地址信息,有時還會帶出 4 字節(jié)或 6 字節(jié)的密碼,一旦經(jīng)由網(wǎng)卡偵測、解讀、研判(廣播)魔法數(shù)據(jù)包的內(nèi)容,內(nèi)容中的 MAC 地址、密碼若與電腦自身的地址、密碼吻合,就會啟動喚醒、引導(dǎo)的程序。
要想實(shí)現(xiàn)電腦的網(wǎng)絡(luò)喚醒 WOL,首先必須要有具備 WOL功能的主板和網(wǎng)卡(二者一般是一體的)。這是硬件基礎(chǔ),現(xiàn)在的主板一般都會支持網(wǎng)絡(luò)喚醒的功能,但是默認(rèn)情況不一定啟用該功能,需要在 BIOS 中開啟 PCI/PCIe 喚醒功能或網(wǎng)卡喚醒功能。
我的主板是微星 Z270 GAMING M7,網(wǎng)卡是 Killer E2500 Gigabit。該主板開啟網(wǎng)絡(luò)喚醒功能需要通過開機(jī)過程中,長按 DELETE 鍵進(jìn)入 BIOS 進(jìn)行如下設(shè)置:
?高級-整合周邊設(shè)備-網(wǎng)卡 ROM 啟動,設(shè)置為允許
rom
?高級-電源管理設(shè)置-Erp,設(shè)置為禁止
erp
?高級-喚醒事件設(shè)置-PCIE 設(shè)備喚醒,設(shè)置為允許
pcie
除了硬件支持外,還需要在操作系統(tǒng)中設(shè)置網(wǎng)卡的喚醒功能。而網(wǎng)卡的喚醒功能是需要網(wǎng)卡驅(qū)動支持的,這是 Ubuntu 升級過程中通過踩坑明白的道理。 下面列舉了 Win10 操作系統(tǒng)和 Ubuntu 系統(tǒng)下的設(shè)置。
Window 系統(tǒng)中驅(qū)動是很健全的,所以只要對應(yīng)的主板和網(wǎng)卡硬件支持網(wǎng)絡(luò)喚醒功能,那么對應(yīng)的驅(qū)動基本沒有問題。那就只剩下最后一步: 設(shè)備管理器-網(wǎng)絡(luò)適配器-電源管理-允許這個裝置喚醒電腦
setting_win10
Ubuntu 的版本是 20.04 LTS,其默認(rèn)內(nèi)核版本為 5.4.x。因?yàn)樵摪姹揪嘟駜赡甓啵云鋵?yīng)的網(wǎng)卡驅(qū)動 alx-driver 已經(jīng)支持遠(yuǎn)程喚醒 wol 功能。 為了驗(yàn)證當(dāng)前網(wǎng)卡是否開啟對遠(yuǎn)程喚醒功能的支持,需要安裝軟件 ethtool。
# 安裝軟件 ethtool
sudo apt-get install ethtool -y
# 驗(yàn)證當(dāng)前網(wǎng)卡 enp5s0 是否開啟 wol 支持
sudo ethtool enp5s0
Ubuntu 系統(tǒng)安裝的 20.04 LTS,后來升級為 22.04 LTS(升級過程中踩了默認(rèn)驅(qū)動不支持 wol 的坑,查了好多資料才填了這個坑).
ubuntu_wakeon
默認(rèn)情況如上圖,Supports Wake-on表示當(dāng)前驅(qū)動支持的遠(yuǎn)程喚醒方式,候選項有以下幾種。wake-on表示當(dāng)前遠(yuǎn)程喚醒的方式。
選項 | 描述 | 含義 |
d | disabled | 不支持遠(yuǎn)程喚醒 |
p | PHY activity | 物理喚醒 |
u | unicast activity | 單播喚醒 |
m | multicast activity | 多播喚醒 |
b | broadcast activity | 廣播喚醒 |
g | magic packet activity | 魔法包喚醒 |
其中選項 g 是開啟遠(yuǎn)程喚醒功能的標(biāo)識。
# 設(shè)置 enp5s0 網(wǎng)卡驅(qū)動支持魔法包喚醒
sudo ethtool -s enp5s0 wol g
# 設(shè)置 enp5s0 網(wǎng)卡驅(qū)動永久支持魔法包喚醒,需要重啟兩次
nmcli c modify enp5s0 802-3-ethernet.wake-on-lan magic
ubuntu_setting
軟硬件基礎(chǔ)都搞定后,下面一步就是在內(nèi)網(wǎng)(局域網(wǎng))中通過魔法包喚醒目標(biāo)機(jī)器。喚醒的方法這里提供兩種:
?命令喚醒
操作機(jī)器和目標(biāo)機(jī)器需要在同一個局域網(wǎng)中,操作機(jī)器需要安裝 wakeonlan 命令。
# 安裝 wakeonlan 命令
sudo apt install wakeonlan
# 命令喚醒
## host_address為遠(yuǎn)程計算機(jī)的域名或ip地址
## mac_address為遠(yuǎn)程計算機(jī)的mac地址,mac地址是':'間隔的形式
wakeonlan -i host_address mac_address
?app喚醒 在軟件市場中搜索 Wake-On-Lan 或 WOL 可以找到相關(guān)軟件
網(wǎng)上有相關(guān)教程[1],大致流程分為三步:
? DDNS綁定域名和動態(tài)公網(wǎng)IP 鑒于 家庭寬帶在橋接模式 下路由器會獲取公網(wǎng) IP,但是這個公網(wǎng) IP 是會變化的。所以最好通過 DDNS 將不變的域名和變化的公網(wǎng) IP 綁定在一起。我這里使用的是 ddns-go。
? 設(shè)置 IP 和 MAC 綁定 網(wǎng)絡(luò)喚醒的核心是將魔法數(shù)據(jù)包發(fā)送給目標(biāo)機(jī)器,如果數(shù)據(jù)包中的 MAC 和目標(biāo)機(jī)器一致則會觸發(fā)喚醒引導(dǎo)程序。而路由器下面有多個終端機(jī)器,所以需要將路由器下終端機(jī)器和其 MAC 地址一一綁定,這樣如果有魔法數(shù)據(jù)包經(jīng)過路由器時,路由器知道將該包路由到哪臺機(jī)器。
? 設(shè)置端口映射 注意 IP 地址與目標(biāo)機(jī)器的 IP 一致,也就是剛才 MAC 綁定時的 IP 地址,端口隨便開一個就行(但是不要用運(yùn)營商封禁的端口,推薦使用 9 端口)。另外協(xié)議類型選擇 UDP 或者ALL!!因?yàn)閱拘褦?shù)據(jù)包是通過 UDP 協(xié)議發(fā)送的,所以協(xié)議類型只選擇 TCP 協(xié)議的話數(shù)據(jù)包是進(jìn)入不了內(nèi)網(wǎng)的!!
上面的三步我依次操作了,但是沒有成功。目前還沒有定位的具體原因。不過我通過另一種方式解決了外網(wǎng)遠(yuǎn)程喚醒的問題:遠(yuǎn)程登陸到家庭 Nas(該機(jī)器是 24 小時不關(guān)機(jī)的),然后通過 wakeonlan 命令在局域網(wǎng)中喚醒目標(biāo)機(jī)器。
當(dāng)時是奔著高性能買的這款微星主板 Z270 GAMING M7,網(wǎng)卡是 Killer E2500 Gigabit,號稱可以干掉游戲延遲。不過 Ubuntu 中對這塊網(wǎng)卡的驅(qū)動支持并沒有那么通用,在系統(tǒng)升級(20.04 LTS 升級到 22.04 LTS)中還是碰到比較麻煩的驅(qū)動支持問題。這里特地記錄了一下解決過程。
從這個帖子[2] 我們知道,網(wǎng)卡 Killer E2500 Gigabit 的驅(qū)動是 alx,但是該驅(qū)動默認(rèn)是關(guān)閉遠(yuǎn)程喚醒功能的。如果想要開啟該功能需要內(nèi)核支持。看遍了該帖子發(fā)現(xiàn)對于最新的 Ubuntu 22.04 LTS(內(nèi)核 5.15) 并沒有直接的解決方案。但是發(fā)現(xiàn)對于內(nèi)核 5.16.3 有了 alx 補(bǔ)丁,所以有了如下的升級內(nèi)核的解決方案。
? 升級內(nèi)核到 5.16.3
? mainline 方式[3] 該方式未生效,主要是 Ubuntu Mainline Kernel Installer 中只有 2 個內(nèi)核版本
? deb包方式[4] 簡單直接
? 安裝 alx 補(bǔ)丁 下載倉庫[5],并執(zhí)行 ./setup
? 重啟后驗(yàn)證
alx_fix
目前已經(jīng)驗(yàn)證成功,為此還提了 request[6] 給倉庫。
[1] 相關(guān)教程: https://blog.csdn.net/qq_19764639/article/details/82817719
[2] 帖子: https://bugzilla.kernel.org/show_bug.cgi?id=61651#c166
[3] mainline 方式: https://www.sysgeek.cn/ubuntu-install-linux-mainline-kernel
[4] deb包方式: https://kernel.ubuntu.com/~kernel-ppa/mainline
[5] 倉庫: https://github.com/haojunyu/alx_dkms_installer