Picom

出自 Arch Linux 中文维基

本文內容或本節內容已經過期。

原因: 請提供模板的第一個位置參數以概括原因。 (在Talk:Picom討論)

本文內容或本節內容已經過期。

原因: Compton was replaced by Picom. (在Talk:Picom討論)

Compton 是一個獨立的合成管理器,可以給不帶合成功能的窗口管理器(例如 i3)帶來淡入淡出、半透明、陰影等視覺效果。Compton 是 xcompmgr-dana 的分支,而後者又是 xcompmgr 的分支。欲了解更多,可查看 GitHub 上的 compton 項目

安裝[編輯 | 編輯原始碼]

安裝包 compton[損壞的連結:replaced by picom] 。 如果要使用 git 版本,可安裝 compton-gitAUR[損壞的連結:package not found]

若想用 GUI 修改 compton 的配置,可安裝 compton-confAURcompton-conf-gitAUR

使用[編輯 | 編輯原始碼]

登錄 X 會話後,用戶可以隨時手動啟動 / 終止 compton。也可以將其設置為自動啟動(例如從 自動啟動)。下面的選項可以幫你細化配置:

  • -b: 以後台進程(Daemon)的形式運行
  • -c: 啟用陰影效果
  • -C: 禁用面板和 Docks 的陰影效果
  • -G: 禁用應用程式窗口和拖放對象的陰影效果
  • --config: 使用指定的配置文件

除此之外 compton 還支持很多選項。包括動畫時間,指定待管理的 X 顯示,指定窗口的菜單、邊框、失焦窗口菜單的不透明度等。詳細信息請參閱 Compton Man Page

注意: 在啟動 compton 之前,如果正在運行別的 合成管理器,需要先停用它。

開機時自動啟動 Compton[編輯 | 編輯原始碼]

不同的桌面環境 / 窗口管理器有着不同的方式來自動啟動 compton。例如,Openbox 的自動啟動項目在配置文件 ~/.config/openbox/autostart 裡管理。而 i3-wm 的用戶需要去修改 ~/.config/i3/config 文件。必要時,compton 也可以從 xprofileXinitrc 自動啟動。有關更多信息,請參閱 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 窗口,也可以用「沒有名字的窗口」來判斷。

注意: 某些軟件每次啟動後窗口 id 都會不一樣,但 slock 的窗口 id 似乎是固定不變的。這裏我們需要有懂得相關知識的人來提供確認,否則只能是各位用戶後果自負。

下面的命令可以讓 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";

dwm 與 dmenu[編輯 | 編輯原始碼]

雖然有時我們希望 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 的渲染就會產生問題intelmodesetting 兩種驅動都受到這一問題的影響。禁用 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 字體會導致 xtermurxvt 之類的軟件嚴重卡頓,嘗試給 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 可以了解到更多細節。

延伸閱讀[編輯 | 編輯原始碼]