首頁  >  文章  >  後端開發  >  如何使用 Go 將背景圖像添加到 X11/Wayland 的多個螢幕?

如何使用 Go 將背景圖像添加到 X11/Wayland 的多個螢幕?

王林
王林轉載
2024-02-13 08:54:09798瀏覽

如何使用 Go 将背景图像添加到 X11/Wayland 的多个屏幕?

php小編香蕉將為您介紹如何使用Go語言將背景圖片新增至X11/Wayland的多個畫面。在多螢幕環境下,為每個螢幕設定不同的背景影像可以提升使用者體驗。本文將詳細講解Go語言中如何使用X11和Wayland的相關函式庫來實現這項功能。無論您是使用X11還是Wayland,本文都將為您提供適用的解決方案。跟隨本文的步驟,您將輕鬆掌握如何在多螢幕環境中添加背景圖像的技巧。讓我們一起來探索吧!

問題內容

我在 Go 中為視窗管理器製作了一個自訂桌布設定器。目前我使用github.com/xyproto/wallutils項目,該項目又依賴feh

對於一個螢幕,我可以使用其尺寸來創建精確尺寸的圖像,並且一切正常,但如果有多個不同尺寸的螢幕連接到計算機,則這種方法不起作用。

對於確切的圖像,我使用 feh 的「填充」選項,該選項僅適用於其中一台顯示器。

我想要做的是為每個螢幕創建正確尺寸的圖像,並將它們作為背景圖像發送到 X11 或 Wayland 中的相應螢幕。我怎樣才能在 Go 中實現這一目標?

解決方法

要求:

  • 將不同的壁紙送到不同的顯示器
  • 來自 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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除