Maison >développement back-end >Golang >Comment ajouter une image d'arrière-plan à plusieurs écrans dans X11/Wayland à l'aide de Go ?
L'éditeur php Banana vous présentera comment utiliser le langage Go pour ajouter des images d'arrière-plan à plusieurs écrans de X11/Wayland. Dans un environnement multi-écran, la définition d'une image d'arrière-plan différente pour chaque écran peut améliorer l'expérience utilisateur. Cet article expliquera en détail comment utiliser les bibliothèques liées à X11 et Wayland pour implémenter cette fonction dans le langage Go. Que vous utilisiez X11 ou Wayland, cet article vous fournira des solutions applicables. En suivant les étapes de cet article, vous apprendrez facilement comment ajouter une image d'arrière-plan dans un environnement multi-écran. Explorons ensemble !
J'ai créé un poseur de fond d'écran personnalisé dans Go pour un gestionnaire de fenêtres. Actuellement, j'utilise github.com/xyproto/wallutils
项目,该项目又依赖于feh
.
Pour un écran, je peux utiliser ses dimensions pour créer une image de taille exacte et tout fonctionne bien, mais s'il y a plusieurs écrans de tailles différentes connectés à l'ordinateur, cette méthode ne fonctionne pas.
Pour l'image exacte, j'ai utilisé l'option "fill" de feh, qui ne fonctionne que sur l'un des moniteurs.
Ce que je veux faire, c'est créer des images de taille correcte pour chaque écran et les envoyer comme images d'arrière-plan aux écrans correspondants dans X11 ou Wayland. Comment puis-je y parvenir dans Go ?
Exigences :
feh
muro et wallutils
wallutils
指定 wm
接口,该接口提供 setwallpaper
Méthodes, etc. Il existe des implémentations de cette interface pour de nombreux gestionnaires de fenêtres différents.
Le package go muro
utilise à son tour wallutils
. Basé sur l'indicateur withanywindowmanager
, il utilisera la méthode setwallpapercustom
de wallutils, qui sélectionne une implémentation setwallpaper
spécifique en fonction du gestionnaire de fenêtres détecté, ou appellera directement la muro
依次使用 wallutils
。基于 withanywindowmanager
标志,它将使用 wallutils 的 setwallpapercustom
方法,该方法根据检测到的窗口管理器选择具体的 setwallpaper
实现,或者直接调用 feh
变体的 setwallpaper
variante de setwallpaper
.
wallutils et feh
Le mode d'affichage exact dépend de la façon dont il est appelé, mais setwallpaper
dans wallutils feh.go appellera essentiellement setwallpaper
基本上会在您的情况下调用 feh
dans votre cas, comme ceci :
feh --bg-fill <image file name>
Deux choses à noter :
feh
Définissez le fond d'écran sur tous les écrans sur exactement la même imageDe plus, le fichier readme de wallutils indique clairement :
Définir un fond d'écran pour chaque moniteur
La définition de fonds d'écran pour chaque moniteur n'est pas encore prise en charge. Actuellement, tous les moniteurs ont des fonds d’écran définis.
Voir https://github.com/xyproto/wallutils#Définir un fond d'écran pour chaque moniteur
Solutions possibles
Puisque vous pouvez déterminer l'affichage et la résolution, nous nous sommes concentrés sur l'utilisation de feh
pour envoyer des images prédéfinies comme images d'arrière-plan aux écrans correspondants dans le bon ordre.
feh
本身支持为每个显示器设置不同的壁纸。您只需使用具有不同分辨率的不同图像调用 feh
即可。该顺序保证与调用 xrandr --listmonitors
Prend en charge nativement la définition de différents fonds d'écran pour chaque affichage. Vous appelez simplement
xrandr --listmonitors
. ) :
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
(testé avec gestionnaire de fenêtres)
feh
与适当的窗口管理器配合使用,并且 go 目录中有两个准备好的图像,这是最简单的情况。当然,也可以通过编程方式确定屏幕并动态调整feh
C'est le cas le plus simple si
. feh
并不适用于所有环境,wallutils 为许多窗口管理器环境(cinnamon、deepin、gnome、mate、pekwm、plasma、sway、weston、xfce4)提供了 wm
wm
pour de nombreux environnements de gestion de fenêtres (cannelle, deepin, gnome, mate, pekwm, plasma, sway, weston, xfce4). C'est bien sûr très cool. Cependant, si vous souhaitez créer un mr pour wallutils, vous devrez probablement le faire dans toutes les variantes, du moins celles qui le prennent en charge. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!