php小編香蕉將為您介紹如何使用Go語(yǔ)言將背景圖像添加到X11/Wayland的多個(gè)屏幕。在多屏幕環(huán)境下,為每個(gè)屏幕設(shè)置不同的背景圖像可以提升用戶(hù)體驗(yàn)。本文將詳細(xì)講解Go語(yǔ)言中如何使用X11和Wayland的相關(guān)庫(kù)來(lái)實(shí)現(xiàn)這一功能。無(wú)論您是使用X11還是Wayland,本文都將為您提供適用的解決方案。跟隨本文的步驟,您將輕松掌握如何在多屏幕環(huán)境下添加背景圖像的技巧。讓我們一起來(lái)探索吧!
問(wèn)題內(nèi)容
我在 Go 中為窗口管理器制作了一個(gè)自定義壁紙?jiān)O(shè)置器。目前我使用github.com/xyproto/wallutils
項(xiàng)目,該項(xiàng)目又依賴(lài)于feh
。
對(duì)于一個(gè)屏幕,我可以使用其尺寸來(lái)創(chuàng)建精確尺寸的圖像,并且一切正常,但如果有多個(gè)不同尺寸的屏幕連接到計(jì)算機(jī),則這種方法不起作用。
對(duì)于確切的圖像,我使用 feh 的“填充”選項(xiàng),該選項(xiàng)僅適用于其中一臺(tái)顯示器。
我想要做的是為每個(gè)屏幕創(chuàng)建正確尺寸的圖像,并將它們作為背景圖像發(fā)送到 X11 或 Wayland 中的相應(yīng)屏幕。我怎樣才能在 Go 中實(shí)現(xiàn)這一目標(biāo)?
解決方法
要求:
將不同的壁紙發(fā)送到不同的顯示器
來(lái)自 go 的調(diào)用
在下面使用 feh
muro 和 wallutils
wallutils
指定 wm
接口,該接口提供 setwallpaper
方法等。對(duì)于許多不同的窗口管理器,該接口都有相應(yīng)的實(shí)現(xiàn)。
go 包 muro
依次使用 wallutils
。基于 withanywindowmanager
標(biāo)志,它將使用 wallutils 的 setwallpapercustom
方法,該方法根據(jù)檢測(cè)到的窗口管理器選擇具體的 setwallpaper
實(shí)現(xiàn),或者直接調(diào)用 feh
變體的 setwallpaper
。
wallutils 和 feh
具體的顯示模式取決于它的調(diào)用方式,但是 wallutils feh.go 中的 setwallpaper
基本上會(huì)在您的情況下調(diào)用 feh
,如下所示:
feh --bg-fill
登錄后復(fù)制
兩個(gè)注意事項(xiàng):
此處 feh
將所有屏幕上的壁紙?jiān)O(shè)置為完全相同的圖像
因此不直接支持擁有不同的圖像
此外,wallutils 的自述文件明確指出:
為每個(gè)顯示器設(shè)置壁紙
尚不支持為每個(gè)顯示器設(shè)置壁紙。目前,所有顯示器都設(shè)置了壁紙。
參見(jiàn)https://github.com/xyproto/wallutils#設(shè)置每個(gè)顯示器的壁紙
可能的解決方案
由于您可以確定顯示器和分辨率,因此我們重點(diǎn)關(guān)注使用 feh
以正確的順序?qū)㈩A(yù)定義圖像作為背景圖像發(fā)送到相應(yīng)的屏幕。
feh
本身支持為每個(gè)顯示器設(shè)置不同的壁紙。您只需使用具有不同分辨率的不同圖像調(diào)用 feh
即可。該順序保證與調(diào)用 xrandr --listmonitors
確定的順序相同。
確定順序并將其作為給定后,最簡(jiǎn)單的 go 程序?qū)⑷缦滤荆碚?qǐng)參閱 wallutil 的實(shí)用函數(shù) 運(yùn)行):
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) } }
登錄后復(fù)制
(使用 fluxbox
窗口管理器進(jìn)行測(cè)試)
如果 feh
與適當(dāng)?shù)拇翱诠芾砥髋浜鲜褂茫⑶?go 目錄中有兩個(gè)準(zhǔn)備好的圖像,這是最簡(jiǎn)單的情況。當(dāng)然,也可以通過(guò)編程方式確定屏幕并動(dòng)態(tài)調(diào)整feh
的調(diào)用。
由于 feh
并不適用于所有環(huán)境,wallutils 為許多窗口管理器環(huán)境(cinnamon、deepin、gnome、mate、pekwm、plasma、sway、weston、xfce4)提供了 wm
接口的具體實(shí)現(xiàn)。這當(dāng)然非常酷。但是,如果您想為 wallutils 創(chuàng)建 mr,您可能必須在所有變體中執(zhí)行此操作,至少是那些支持它的變體。