Picom
Compton 是一個獨立的合成管理器,可以給不帶合成功能的窗口管理器(例如 i3)帶來淡入淡出、半透明、陰影等視覺效果。Compton 是 xcompmgr-dana 的分支,而後者又是 xcompmgr 的分支。欲了解更多,可查看 GitHub 上的 compton 項目。
安裝[編輯 | 編輯原始碼]
安裝包 compton包[損壞的連結:replaced by picom包] 。 如果要使用 git 版本,可安裝 compton-gitAUR[損壞的連結:package not found]。
若想用 GUI 修改 compton 的配置,可安裝 compton-confAUR 或 compton-conf-gitAUR。
使用[編輯 | 編輯原始碼]
登錄 X 會話後,用戶可以隨時手動啟動 / 終止 compton。也可以將其設置為自動啟動(例如從 自動啟動)。下面的選項可以幫你細化配置:
-b
: 以後台進程(Daemon)的形式運行-c
: 啟用陰影效果-C
: 禁用面板和 Docks 的陰影效果-G
: 禁用應用程式窗口和拖放對象的陰影效果--config
: 使用指定的配置文件
除此之外 compton 還支持很多選項。包括動畫時間,指定待管理的 X 顯示,指定窗口的菜單、邊框、失焦窗口菜單的不透明度等。詳細信息請參閱 Compton Man Page。
開機時自動啟動 Compton[編輯 | 編輯原始碼]
不同的桌面環境 / 窗口管理器有着不同的方式來自動啟動 compton。例如,Openbox 的自動啟動項目在配置文件 ~/.config/openbox/autostart
裡管理。而 i3-wm 的用戶需要去修改 ~/.config/i3/config
文件。必要時,compton 也可以從 xprofile 或 Xinitrc 自動啟動。有關更多信息,請參閱 startup files 一文。
手動運行[編輯 | 編輯原始碼]
於終端運行:
compton
可以手動啟動 compton 進程。
若要禁用所有的陰影特效,需要加上 -C
和 -G
這兩個參數:
compton -CG
若要在登錄 X 會話的過程中,以後台進程(Daemon)的形式自動運行 compton,必須加上 -b
參數:
compton -b
將前面的參數一起用,效果也就一起有了:
compton -CGb
最後這個例子演示了如何使用需要指定數值的參數:
compton -cCGfF -o 0.38 -O 200 -I 200 -t 0 -l 0 -r 3 -D2 -m 0.88
配置文件[編輯 | 編輯原始碼]
默認的配置文件放在 /etc/xdg/compton.conf
。若要修改配置,需要先把默認配置拷貝一份到 ~/.config/compton.conf
。再運行 compton 時就會從這裏讀取配置。
若要在運行時手動指定配置文件,可以用 --config
參數:
compton --config path/to/compton.conf
專為某些窗口禁用陰影效果[編輯 | 編輯原始碼]
Compton 繪製陰影的方法可能會使某些軟件的窗口的外觀出現異常。用 shadow-exclude
配置選項即可為這些軟件禁用陰影。
例如:若要讓 compton 不給 GTK +3 窗口繪製陰影,可以在 compton.conf
文件的 shadow-exclude
部分裡加入:
"_GTK_FRAME_EXTENTS@:c"
若要讓 conky 窗口不繪製 compton 陰影,首先修改 conky 的配置文件 ~/.conkyrc
:
own_window_class conky
然後如下修改 compton.conf:
shadow-exclude = "class_g = 'conky'";
在這裏可以看到完整的默認禁用陰影的窗口名單。
多顯示器[編輯 | 編輯原始碼]
如果你在用 多個顯示器 但沒有使用 xinerama,那麼 X server 會自動以多個 screen 的模式運行,然而 compton 默認只會接管一個 screen 的合成。解決辦法是啟動多個 compton 進程,並以 -d
參數來逐個指定要負責的 screen。下面這個範例命令是給四個 screen 用的:
seq 0 3 | xargs -l1 -I@ compton -b -d :0.@
故障排除[編輯 | 編輯原始碼]
如若配置不當,合成特效可能會使某些軟件產生外觀異常。
標籤頁式窗口[編輯 | 編輯原始碼]
某些自帶標籤頁功能的軟件,當它們的窗口被設置成半透明時,可能會因為頂層標籤窗口是半透明的而露出底層標籤窗口的內容。而且由於每個標籤窗口都要繪製陰影,整體看上去就會出現濃重的多重陰影。
這類多重陰影的問題可以通過向配置文件中的 shadow-exclude
添加規則來解決:
"_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'"
加入下面的配置可以避免看到底層的標籤窗口內容:
opacity-rule = [ "95:class_g = 'URxvt' && !_NET_WM_STATE@:32a", "0:_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'" ];
這裏 URxvt 指代的是你在用的終端模擬器的 X 窗口 class 屬性。如果你要為別的終端指定渲染規則,可以自行相應改動。
slock[編輯 | 編輯原始碼]
如果通過 compton 的 -i
選項啟用了失焦窗口的透明度,再配合使用 slock,就可能出現你不想看到的結果。把透明度改成 0.2
可以解決這一問題。如果用命令行參數來指定的話:
$ compton <any other arguments> -i 0.2
也可以在配置文件裡寫這一行:
inactive-dim = 0.2;
還有一個辦法是,讓 compton 認為 slock 的窗口一直是獲得了焦點的。可以通過其窗口 id 來識別 slock 窗口,也可以用「沒有名字的窗口」來判斷。
下面的命令可以讓 compton 忽略所有 name 屬性為空的窗口的焦點獲取狀態:
$ compton <原有的参数> --focus-exclude "! name~=''"
用這個命令找到 slock 的窗口 id:
$ xwininfo & slock
在 slock 退出之前,儘快在屏幕上任意位置單擊鼠標,然後輸入你的用戶密碼來解鎖。這樣你就能看到輸出的窗口 ID:
xwininfo: Window id: 0x1800001 (has no name)
把這個窗口 ID 拿給 compton,讓它忽略這個窗口的焦點獲取狀態:
$ compton <原有的参数> --focus-exclude 'id = 0x1800001'
或者把這一行寫進配置文件:
focus-exclude = "id = 0x1800001";
[編輯 | 編輯原始碼]
雖然有時我們希望 compton 不要為 dwm 狀態欄渲染窗口失焦特效,但 dwm 狀態欄沒法輕易地被 compton 的規則匹配到。而且 dwm 狀態欄和 dmenu 都沒有靜態的 window id。要實現這一效果,你只能嘗試給這兩個項目打補丁,給這些窗口加上 class 屬性用於規則匹配。或者採用寬泛的規則去匹配。
下面這個方法適用於 dmenu 和 dwm 狀態欄總是出現在屏幕頂端(從左上角頂點起繪製)的情況:
$ compton <别的参数> --focus-exclude "x = 0 && y = 0 && override_redirect = true"
如果要寫進配置文件的話,要這麼寫:
focus-exclude = "x = 0 && y = 0 && override_redirect = true";
override_redirect
這個屬性在絕大多數窗口上的值似乎都是 false
。在匹配規則裡寫 override_redirect = true
可以避免這條規則誤傷到位置一樣的應用程式窗口。
用 xsetroot 無法設置桌面背景顏色[編輯 | 編輯原始碼]
目前 compton 與 xsetroot
的 -solid
功能還無法兼容。不過你可以試試用 hsetroot包 這個替代方案:
$ hsetroot -solid '#000000'
在 https://github.com/chjj/compton/issues/162 可以了解到這一問題背後的具體細節。
Intel 顯卡渲染出錯[編輯 | 編輯原始碼]
已知某些 Intel 晶片在啟用 DRI3 後,如果調節解像度或者接入新顯示器,compton 的渲染就會產生問題。intel
與 modesetting
兩種驅動都受到這一問題的影響。禁用 DRI3 可以繞過這一問題。
使用 AMD Catalyst 驅動時出現的花屏 / 截屏問題[編輯 | 編輯原始碼]
嘗試在 compton 啟動時加上參數
--backend xrender
或者把下面這一行寫入 compton.conf 配置文件
backend = "xrender";
在 https://github.com/chjj/compton/issues/208 可以了解到更多細節。
使用 NVidia 驅動時出現高 CPU 佔用[編輯 | 編輯原始碼]
如果在使用參數 --backend glx
時發現 CPU 佔用很高,或者使用 --vsync
時出現畫面撕裂,應按照 NVIDIA 的指示安裝上 nvidia-utils包。
使用 NVidia 驅動時,進程後台化會報錯[編輯 | 編輯原始碼]
如果以後台進程啟動 compton 時出現錯誤信息:main(): Failed to create new session.
,可以裝這個版本試試:compton-garnetius-gitAUR[損壞的連結:package not found]。這個版本還包含了若干個上游未能合入的補丁。
使用 Xft 字體會導致卡頓[編輯 | 編輯原始碼]
如果使用了 Xft 字體會導致 xterm 和 urxvt 之類的軟件嚴重卡頓,嘗試給 compton 加上如下參數:
--xrender-sync --xrender-sync-fence
或者改用 xrender 渲染方式。
在 https://github.com/chjj/compton/issues/152 可以了解到更多細節。
屏幕閃爍[編輯 | 編輯原始碼]
在無任何 panel 的桌面環境中將窗口最大化,可能會出現這一問題。解決辦法是在配置文件中加入:
unredir-if-possible = false;
在 https://github.com/chjj/compton/issues/402 可以了解到更多細節。