在日常使用中,我們的截圖操作都是在登陸系統之後進行的,比如捕獲一個窗口,捕獲指定區域,或者捕獲整個網頁。要給登陸界面截圖,那是在登陸之前就要做的操作,這可難倒我了。
之前沒有這樣的截圖需求,這次不妨各種手段都拿來嘗試一下。
首先想到的是延時截圖,比如在 kscreenshot 設置 10s 之後截圖,然後在截圖之前完成切換用戶並進入登陸界面的操作。結果是殘酷的,截出來的圖是黑屏。
GUI 的截圖解決方案不可用,我只好求助於 CLI。scrot 是一個大名鼎鼎的命令行截圖工具,支持延時截圖。我將延時截圖故伎重演,結果依然黑屏。
常規武器已然用盡,敵人卻依舊活蹦亂跳,這讓我情何以堪。
一番 Google 之後,發現一些線索,這個問題老早就有人提問了[1]。
我參考的是 Parto 的回答,然後他的回答又是參考的別人家的博客[2]。
本來應該輕而易舉就搞定的,結果卻因為手殘,腳本中少寫了一些東西而折騰了半天。最終在 root 權限下面用這些命令捕獲了登錄界面的截圖。
chvt 8 sleep 5 DISPLAY=:0.0 XAUTHORITY=/var/lib/mdm/:0.Xauth xwd -root > /tmp/shot.xwd convert /tmp/shot.xwd /tmp/ss.png
這些命令最關鍵的地方,是第三行的 XAUTHORITY=/var/lib/mdm/。不同的發行版,默認會使用不同的登錄管理器,比如 Ubuntu 用的是 lightdm,Kubuntu 用的是 kdm,Linux Mint 用的是 mdm,以 Gnome 為桌面環境的發行版用的是 gdm。
不同的登錄管理器,對應的 XAUTHORITY 也就不一樣。所以網上找到的資料中,有的是 XAUTHORITY=/var/run/lightdm/root/,有的是 XAUTHORITY=/var/lib/gdm/。那麼問題來了,我們該如何確定當前的系統用的到底是哪個登錄管理器?
當然不能拍腦袋,要有理有據。一開始的時候我習慣性的以為我在用的 dm 是 kdm,結果就掉到坑裡了。
其實很簡單,只需要把名字中包含 dm 的進程撈出來看一眼,就能確定命令該怎麼寫了。
最後,美圖共賞~
原文:http://blog.jamespan.me/2015/10/03/capture-linux-login-screen/