長終端輸出“截屏”
今天偶然想把兩段終端輸出轉化成圖片發給別人(爲了保留顏色)。然而輸出特別長,一屏不足以顯示下來。於是想有沒有什麼方法可以讓我將終端的完整輸出截出來,畢竟手動一幅幅地裁剪太蠢了。
題目是聯想到一些Android設備上的所謂“長截屏”而取的,意義很是相似。
概要
由於沒有找到專門的工具,所以打算自己hack一個出來,故而事情分兩步:
- 將命令輸出存下來
- 將輸出轉化成圖片
然而在進行第二步的時候發現沒有工具可以一步到位,所以就通過HTML進行中轉。於是最終變成了三步:
- 將命令輸出存下來
- 將之前保存的輸出轉換成HTML
- 將HTML轉換成圖片
第一步:保存輸出
第一步可以直接重定向(加上強制彩色輸出),但我這種懶人使用了script
命令。
script
可以自動把我所有命令的輸出(帶提示行/prompt)都存下來,而且不用我再去一個個強制彩色輸出。而且啓動它以後會進入專門的環境,於是我可以首先在一個臨時目錄執行script
,之後cd
到我要執行命令的目錄,最後直接Ctrl+D以免弄亂我的正常目錄。
由於這許多優勢,我傾向於使用script
,而不是採取輸出重定向的方案。
第二步:輸出轉HTML
第二步用ansi2html
(AUR中有)將輸出轉換成HTML。由於是終端輸出,後面加上--bg=dark
參數將背景設爲黑色會更合習慣;由於我的終端模擬器用的配色方案是Tango(我覺得比xterm-256color好看),所以還要加上--palette=tango
。最終的命令就是這樣:
ansi2html --bg=dark --palette=tango < typescript > typescript.html
(理論上管道直接到ansi2html的輸入是可行的,但需要手動強制彩色輸出,畢竟多數軟件還是會探測輸出是否是終端的。)
然後可以先找你的瀏覽器看一下輸出是否符合你的預期(主要是配色方案這部分),確定後就可以進行下一步了。
第三步:HTML轉圖片
把HTML轉爲圖片的工具很多,我選了CutyCapt(依然是AUR上有)這麼一個傢伙,畢竟它滿足我目前的所有功能需求,而且用QtWebKit所以體積很小(我本來就有幾乎全套的Qt)。
對於我們的需求,其基本用法是:
CutyCapt --url=http://www.example.org/ --out=localfile.png
然而其默認的字號太小,怎麼看怎麼不舒服,所以我加了200%的縮放--zoom-factor=2
。由於全都是文字,所以又加上僅縮放文字的開關--zoom-text-only=on
(並沒有什麼卯月系列)。所以最終命令就成了:
CutyCapt --url=file://`pwd`/typescript.html --out=output.png --zoom-factor=2 --zoom-text-only=on
大功告成。(並沒有)
之後還需要手動使用圖片處理軟件(剪裁就可以了,所以gwenview足矣)將多餘部分去除。這樣就大功告成,可以拿去浪了。(其實還是有點小問題)
懸而未解
- 經對比發現,輸出中的高亮並不正確,而且似乎沒有加粗。
- powerline的輸出無法正確呈現。
遷移到awesome 4
前兩天隨手全局刷了一下更新,結果一不留神awesome提示我的配置文件有問題。檢查之下,發現awesome已經到了4了,所以立即意識到配置文件又改了。然而由於當時較爲忙碌,就又downgrade回了3.5,直到週末纔重新更上4並折騰配置,到今天算是初有所成。
由於我的配置沒有魔改,所以遷移起來還是比較簡單的。遷移前毫無疑問地,首要事情就是備份自己原來的配置文件;同時可以去看看官方說明文檔。
官方文檔分爲兩個,一個是“簡明遷移文檔”(然而官方自己都說這個只能保證你的配置能用,新功能就別想了),另一個是新的特性文檔。遷移文檔我看了一下就扔下了,然後對着新特性研究了一大半(然而還是沒看完)。
簡而言之呢,在我修改的時候,涉及到的新特性有這麼幾個:
-
增加了快捷鍵功能顯示界面(modekey+s)
- 這個功能實際上是爲每個快捷鍵定義增加了一個可選參數,在其中寫上說明以及分組
- 正確使用需要手動在快捷鍵設置的函數定義後增加這個參數,比葫蘆畫瓢即可
- 又重新增加了declarative layout(聲明式佈局?),同時默認配置中的頂部面板(panel)佈局改爲使用declarative layout
- 對象的屬性可以直接賦值(想來是有了鉤子/監聽器),而不必再使用set_xxx()
- screen現在是動態的(以前不是?)而且是個對象,並且遍歷所有屏幕建議使用awful.screen.connect_for_each_screen(function(s)
- 許多舊的api列爲deprecated,並將在日後逐步刪除
- 默認爲每個normal(通常?)和dialog(對話框)窗口加上標題欄
由於我之前也沒用什麼奇怪的庫(僅用了awesome-freedesktop和vicious),所以整個過程其實不難:將原來的配置文件($HOME/.config/awesome/rc.lua)備份一下,將新的配置文件/etc/xdg/awesome/rc.lua複製過去,然後開始vimdiff。
- 一部分設置的位置變了,但內容沒變,所以保留原始狀態不變
- menu的項目改成原來的
- tasklist右鍵的默認動作單獨提了出來,不知道具體爲了什麼,但我將它留在原地
-
widget配置方式改成declarative的
- 糅合panel配置,都放到專門的panels.lua中(因爲我搞了倆panel,上面一個、左邊一個)
- 爲自己的快捷鍵增加說明
- 調整窗口默認規則
- 把normal窗口的默認標題欄去掉
嗯,基本就是這些了吧。剩下的那些邊邊角角的情況都是比葫蘆畫瓢即可。
讓我感到比較奇妙的是awesome 4增加的這倆東西:
-
新的widget
- 尤其是其中的piechart和arcchart,感覺可以用來更好地顯示資源佔用了(我原來是用的vicious的文本)
-
shape api
- 其中有圓角的支持
然而由於我功力不夠,沒能摸索出來如何更好地使用這些東西……而直接搜索也沒搜到有用的信息(因爲太新了?)。所以接下來一段時間就要摸索這個咯(當然,有時間的話)……
Arch下XPS 13 9343的触摸板多指动作
昨天偶然意識到需要經常“後退”和“前進”,而又懶得用兩隻手去按鍵盤快捷鍵,於是想到觸摸板多指動作。
我的鼠標是羅技的M345,滾輪可以向左右傾斜而觸發後退和前進動作,而且不需要額外設置就可以用,於是感覺應該是有專門的通用事件來處理它,故而試圖尋找觸摸板觸發該事件的方法。
由於觸摸板雙指滾動已被佔用,而且知道自己觸摸板可以識別三指(點按),於是鎖定目標在三指滑動。然而synaptics驅動中似乎並沒有該功能,故而前去尋找,終於找到mtrack。
該倉庫原本由BlueDragonX維護,後來擱置,於是p2rkw接手並且在持續維護。
AUR中有該包(xf86-input-mtrack-git指向的是p2rkw維護的),直接裝之(和xf86-input-synaptics衝突,pacman會提示卸載)。安裝後會自己放置配置文件到/usr/share/X11/xorg.conf.d/10-mtrack.conf,理論上應該可以自動切換觸摸板所用“驅動”(InputClass配置的Driver項)到其上。
然而我之前手動設置了觸摸板的一些配置(在/etc/X11/xorg.conf.d/下),所以還需要改該文件。不過在修改配置之前,首先要確認mtrack到底啓用了沒有,所以我就把我的配置文件中Driver項從synaptics改成了mtrack。
xf86-input-mtrack-git的安裝腳本會提示“可能需要把自己加到input組中”——貌似由於X不再以root運行,所以需要讓自己在input組中以便mtrack可以正確配置觸摸板。
由於X只有在啓動時會讀取配置文件,所以只好忍痛將所有程序都關掉然後重啓X。然而啓動後發現無論用xev怎麼測,三指的動作死活無法觸發(默認配置中,三指上下左右分別對應按鍵8、9、10、11)。於是懷疑是不是mtrack根本沒有啓用。而由於xf86-input-libinput現在被xorg-server依賴,所以沒辦法從源頭上排除(刪掉所有其他和觸摸板相關的東西,如果觸摸板還能工作,說明mtrack在處理它)。故而前去查詢X的日誌(用DM來管理的話在/var/log/Xorg.0.log,startx的話在$HOME/.local/share/xorg/Xorg.0.log),發現mtrack被載入了,然而有這麼幾句:
[ 4.741] (EE) mtrack: cannot configure device[ 4.741] (EE) Couldn't init device "我的觸摸板名稱"[ 4.741] (II) UnloadModule: "mtrack"
[ 4.741] (WW) Touchpad has minimal capabilities. Some features will be unavailable.
Option "SwipeDistance" "220"Option "SwipeClickTime" "120"Option "SwipeSensitivity" "0"Option "SwipeUpButton" "10"Option "SwipeDownButton" "11"Option "SwipeLeftButton" "8"Option "SwipeRightButton" "9"
然而在改完了之後,忽然發現xf86-input-mtrack倉庫中的example有(且僅有)XPS 9333的配置文件……雖然是前代,但很多地方還是很有參考借鑑意義的……於是最終將它的配置文件抄過來稍加修改……
不過話說回來,example中有許多我是看不懂的(畢竟對X的配置理解不深刻),尤其是那堆重複寫Swipe和Swipe4動作的部分。哪位理解的話希望可以指點一下。
另外還見到了兩個其他相關軟件,然而我都沒有試:一個叫touchegg的似乎是截獲觸摸板動作然後改轉發其他動作的軟件;另一個叫easystroke的似乎是手勢識別軟件。