羣暉默認的登錄頁實在是太單調了,以前看過不少抓取必應圖片自動更換的例子,今天也想親自實戰一把應用在羣暉登錄頁上。因而 Google 到了這樣一篇文章巧用計劃任務修改羣暉登陸壁紙,這是一篇發佈時間較久的文章,其中的一些信息可能已經失效,但其餘地方的不少文章都是拷貝這裏的,因此仍是決定按圖索驥試一試。php
這個文章是用 shell 寫的,但我以爲裏邊的功能用 PHP 也能實現(這怎麼會可貴住世界上最好的語言呢😜),經過必應首頁控制檯分析可知,從一個地址https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&nc=1572500909531&pid=hp&FORM=BEHPTB&video=1
獲取圖片 URI,返回完整結果以下。取的圖片 URI 後再以 GET 方式獲取圖片內容。進一步分析可得,URL中的 idx
爲 0 時表示返回當天圖片,1 爲前一天,以此類推,最大有效值爲 8。html
{
"images": [
{
"startdate": "20191031",
"fullstartdate": "201910311600",
"enddate": "20191101",
"url": "/th?id=OHR.AlbertaOwl_ZH-CN1184867720_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp",
"urlbase": "/th?id=OHR.AlbertaOwl_ZH-CN1184867720",
"copyright": "一隻坐在白楊樹上的大雕鴞,阿爾伯塔 (© Ambre Haller/Getty Images)",
"copyrightlink": "/search?q=%e5%a4%a7%e9%9b%95%e9%b8%ae&form=HPCAPT&mkt=zh-cn",
"title": "",
"quiz": "/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20191031_AlbertaOwl%22&FORM=HPQUIZ",
"wp": true,
"hsh": "a76d074e286a1dd8aa778815fe611e2e",
"drk": 1,
"top": 1,
"bot": 1,
"hs": []
}
],
"tooltips": {
"loading": "正在加載...",
"previous": "上一個圖像",
"next": "下一個圖像",
"walle": "此圖片不能下載用做壁紙。",
"walls": "下載今日美圖。僅限用做桌面壁紙。",
"play": "播放視頻",
"pause": "暫停視頻"
}
}
複製代碼
接下來,咱們要分析羣暉是從何處讀取的圖片,從查到的文章可知,圖片位於/usr/syno/etc/login_background.jpg
和/usr/syno/etc/login_background_hd.jpg
。因此咱們要到終端一探究竟。首先,咱們須要在控制面板的終端裏開啓 ssh 服務 git
而後咱們以命令ssh username@hostname [-p port]
登錄 NAS,因爲圖片存儲位置須要 root 權限,咱們還須要用命令sudo -i
切換到 root 用戶。(若是須要在公網ssh登錄,只須要在路由器上將 NAS 的 ssh 端口轉發便可)github
小插曲:當我配置了.ssh/config 想要 ssh 免密登錄時,發現 NAS 仍然每次要求密碼,使得我一度覺得是配置有誤,直到我從新給桌角吃灰的樹莓派通電,才發現確實是 NAS 系統的問題,最後找到了這樣一篇文章設置羣暉 6.1 以及 6.2 使用證書免密登陸,在按照文章重啓 sshd 服務嘗試修復時,發現 sshd 服務起不來了😅,最後終於在控制面板 ==> 信息中心 ==> 服務 中從新啓動服務。嗯,我以爲我還能忍,也就每次登錄的時候多花兩秒鐘嘛,強迫症要適時低頭shell
當我進入系統後,發現/usr/syno/etc/
下並無login_background*.jpg
的文件,而後在控制面板的主題中修改登陸頁圖片,並用ll -t
命令觀察該目錄下的變化,發現出現了這兩個文件,時間也是剛剛操做的時間,所以能夠斷定確實讀取該位置的文件。 json
接下來,咱們經過代碼直接獲取圖片內容及介紹信息,填充登錄頁。less
<?php
// 獲取圖片信息
$img_info = file_get_contents('https://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&pid=hp&FORM=BEHPTB&video=1');
$img_obj = json_decode($img_info)->images[0];
// 獲取圖片地址
$img_url = 'https://cn.bing.com' . $img_obj->url;
// 獲取圖片名
$url_params = parse_url($img_url)['query'];
parse_str($url_params, $result);
$filename = $result['id'];
// 下載圖片並保存
// 注意文件路徑寫爲絕對路徑,避免出錯
$img_rsc = file_get_contents($img_url);
file_put_contents('/var/services/homes/palemoky/work/bing_wallpaper/' . $filename, $img_rsc);
// 將圖片複製到目標位置
copy('/var/services/homes/palemoky/work/bing_wallpaper/' . $filename, '/usr/syno/etc/login_background.jpg');
copy('/var/services/homes/palemoky/work/bing_wallpaper/' . $filename, '/usr/syno/etc/login_background_hd.jpg');
// 獲取圖片描述信息
list($msg, $title) = explode('(', rtrim($img_obj->copyright, ')'));
// 修改歡迎信息
shell_exec('sed -i "/login_welcome_title/c login_welcome_title=\"' . $title . '\"" /etc/synoinfo.conf');
shell_exec('sed -i "/login_welcome_msg/c login_welcome_msg=\"' . $msg . '\"" /etc/synoinfo.conf');
複製代碼
小插曲:這裏咱們須要修改系統配置文件
/etc/synoinfo.conf
,我查詢到的 php 修改文件方式都是把整個文件讀取出來,而後再把修改後的文件賦值給變量,最後再覆寫原來的文件,這種方式不太優雅,我修改一個字符都要讀取所有的文件並回寫,所以選擇使用了 sed 來操做。sed 相同的命令在 Mac 下執行就會報sed: 1: "synoinfo.conf": unterminated substitute pattern
的錯誤,但 Linux 下就徹底正常,Unix 和 Linux 系統間仍是要注意這些微小的差異,害得我調了半天。ssh
把以上代碼保存爲文件,因爲背景圖文件是 root 用戶,所以須要使用 root 用戶執行php .../bing_wallpaper.php
,若是發如今目標位置產生了最新的背景圖文件,並在主題設置頁生效,則說明代碼工做正常。 ide
接下來就是建立計劃任務了,離成功只有一步了 ui
至此,大功告成,來看下效果圖。emmmm, not bad.
最後,若是你以爲左上角的信息有些無趣,也能夠用chinese-poetry天天自動更換古詩詞,或者抓取 One·一個的每日一句替換,還能夠抓包分析豆瓣的 iOS 每日電影 widget,獲取電影臺詞……更多玩法等待解鎖。