php小編香蕉將為您介紹如何使用Go語言將背景圖片新增至X11/Wayland的多個畫面。在多螢幕環境下,為每個螢幕設定不同的背景影像可以提升使用者體驗。本文將詳細講解Go語言中如何使用X11和Wayland的相關函式庫來實現這項功能。無論您是使用X11還是Wayland,本文都將為您提供適用的解決方案。跟隨本文的步驟,您將輕鬆掌握如何在多螢幕環境中添加背景圖像的技巧。讓我們一起來探索吧!
我在 Go 中為視窗管理器製作了一個自訂桌布設定器。目前我使用github.com/xyproto/wallutils
項目,該項目又依賴feh
。
對於一個螢幕,我可以使用其尺寸來創建精確尺寸的圖像,並且一切正常,但如果有多個不同尺寸的螢幕連接到計算機,則這種方法不起作用。
對於確切的圖像,我使用 feh 的「填充」選項,該選項僅適用於其中一台顯示器。
我想要做的是為每個螢幕創建正確尺寸的圖像,並將它們作為背景圖像發送到 X11 或 Wayland 中的相應螢幕。我怎樣才能在 Go 中實現這一目標?
要求:
feh
#muro 和 wallutils
wallutils
指定 wm
接口,該接口提供 setwallpaper
方法等。對於許多不同的視窗管理器,該介面都有相應的實作。
go 套件 muro
依序使用 wallutils
。基於withanywindowmanager
標誌,它將使用wallutils 的setwallpapercustom
方法,該方法根據檢測到的視窗管理器選擇具體的setwallpaper
實現,或直接呼叫feh
變體的setwallpaper
。
wallutils 和 feh
具體的顯示模式取決於它的呼叫方式,但是wallutils feh.go 中的setwallpaper
基本上會在您的情況下呼叫feh
,如下所示:
feh --bg-fill <image file name>
兩個注意事項:
feh
將所有螢幕上的桌布設定為完全相同的圖片此外,wallutils 的自述文件明確指出:
為每個顯示器設定壁紙
尚不支援為每個顯示器設定壁紙。目前,所有顯示器都設定了壁紙。
請參閱https://github.com/xyproto/wallutils#設定每個顯示器的桌布
可能的解決方案
#由於您可以確定顯示器和分辨率,因此我們專注於使用 feh
以正確的順序將預定義圖像作為背景圖像發送到相應的螢幕。
feh
本身支援為每個顯示器設定不同的壁紙。您只需使用具有不同解析度的不同影像呼叫 feh
即可。此順序保證與呼叫 xrandr --listmonitors
確定的順序相同。
確定順序並將其作為給定後,最簡單的 go 程式將如下所示(另請參閱 wallutil 的實用函數 運行#):
package main import ( "os/exec" ) func main() { args := []string{"--bg-fill", "1.png", "2.png"} cmd := exec.Command("feh", args...) if _, err := cmd.CombinedOutput(); err != nil { panic(err) } }
(使用 fluxbox
視窗管理器進行測試)
如果 feh
與適當的視窗管理器配合使用,並且 go 目錄中有兩個準備好的映像,這是最簡單的情況。當然,也可以透過程式設計方式確定螢幕並動態調整feh
的呼叫。
由於feh
並不適用於所有環境,wallutils 為許多視窗管理器環境(cinnamon、deepin、gnome、mate、pekwm、plasma、sway、weston、xfce4)提供了wm
介面的具體實作。這當然非常酷。但是,如果您想為 wallutils 建立 mr,您可能必須在所有變體中執行此操作,至少是那些支援它的變體。
以上是如何使用 Go 將背景圖像添加到 X11/Wayland 的多個螢幕?的詳細內容。更多資訊請關注PHP中文網其他相關文章!