Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk menambah imej latar belakang pada berbilang skrin dalam X11/Wayland menggunakan Go?

Bagaimana untuk menambah imej latar belakang pada berbilang skrin dalam X11/Wayland menggunakan Go?

王林
王林ke hadapan
2024-02-13 08:54:09841semak imbas

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

editor php Banana akan memperkenalkan anda cara menggunakan bahasa Go untuk menambah imej latar belakang pada berbilang skrin X11/Wayland. Dalam persekitaran berbilang skrin, menetapkan imej latar belakang yang berbeza untuk setiap skrin boleh meningkatkan pengalaman pengguna. Artikel ini akan menerangkan secara terperinci cara menggunakan perpustakaan berkaitan X11 dan Wayland untuk melaksanakan fungsi ini dalam bahasa Go. Sama ada anda menggunakan X11 atau Wayland, artikel ini akan memberikan anda penyelesaian yang berkenaan. Dengan mengikuti langkah-langkah dalam artikel ini, anda akan belajar dengan mudah cara menambah imej latar belakang dalam persekitaran berbilang skrin. Mari kita meneroka bersama-sama!

Kandungan soalan

Saya membuat penetap kertas dinding tersuai dalam Go for a window manager. Pada masa ini saya menggunakan github.com/xyproto/wallutils项目,该项目又依赖于feh.

Untuk satu skrin saya boleh menggunakan dimensinya untuk mencipta imej bersaiz tepat dan semuanya berfungsi dengan baik, tetapi jika terdapat berbilang skrin dengan saiz berbeza yang disambungkan ke komputer kaedah ini tidak berfungsi.

Untuk imej yang tepat, saya menggunakan pilihan "isi" feh, yang hanya berfungsi pada salah satu monitor.

Apa yang saya mahu lakukan ialah mencipta imej bersaiz betul untuk setiap skrin dan menghantarnya sebagai imej latar belakang ke skrin yang sepadan dalam X11 atau Wayland. Bagaimanakah saya boleh mencapai ini dalam Go?

Penyelesaian

Keperluan:

  • Hantar kertas dinding berbeza ke monitor berbeza
  • Panggil dari pergi
  • Gunakan feh
  • di bawah

muro dan wallutils

wallutils 指定 wm 接口,该接口提供 setwallpaper Kaedah, dsb. Terdapat pelaksanaan antara muka ini untuk banyak pengurus tetingkap yang berbeza.

go pakej muro menggunakan wallutils secara bergilir. Berdasarkan bendera withanywindowmanager, ia akan menggunakan kaedah setwallpapercustom wallutils, yang memilih pelaksanaan setwallpaper tertentu berdasarkan pengurus tetingkap yang dikesan, atau terus Panggil muro 依次使用 wallutils。基于 withanywindowmanager 标志,它将使用 wallutils 的 setwallpapercustom 方法,该方法根据检测到的窗口管理器选择具体的 setwallpaper 实现,或者直接调用 feh 变体的 setwallpaper varian setwallpaper.

wallutils dan feh

Mod paparan yang tepat bergantung pada cara ia dipanggil, tetapi setwallpaper dalam wallutils feh.go pada asasnya akan memanggil setwallpaper 基本上会在您的情况下调用 feh dalam kes anda, seperti ini:

feh --bg-fill <image file name>

Dua perkara yang perlu diberi perhatian:

  • Di sini feh Tetapkan kertas dinding pada semua skrin kepada imej yang sama
  • Oleh itu tiada sokongan langsung untuk mempunyai imej yang berbeza

Selain itu, readme wallutils dengan jelas menyatakan:

Tetapkan kertas dinding untuk setiap monitor

Menetapkan kertas dinding untuk setiap monitor belum disokong lagi. Pada masa ini, semua monitor mempunyai kertas dinding yang ditetapkan.

Lihat https://github.com/xyproto/wallutils#Tetapkan kertas dinding untuk setiap monitor

Penyelesaian yang mungkin

Memandangkan anda boleh menentukan paparan dan peleraian, kami menumpukan pada menggunakan feh untuk menghantar imej yang dipratentukan sebagai imej latar belakang ke skrin yang sepadan dalam susunan yang betul.

feh本身支持为每个显示器设置不同的壁纸。您只需使用具有不同分辨率的不同图像调用 feh 即可。该顺序保证与调用 xrandr --listmonitorsSecara asli menyokong tetapan kertas dinding berbeza untuk setiap paparan. Anda hanya memanggil

dengan imej berbeza dengan resolusi berbeza. Pesanan dijamin sama seperti yang ditentukan dengan memanggil xrandr --listmonitors.

Dengan susunan yang ditentukan dan diambil sebagai yang diberikan, program go paling mudah akan kelihatan seperti ini (lihat juga fungsi utiliti wallutil Run

):

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 (diuji menggunakan

pengurus tingkap)

feh 与适当的窗口管理器配合使用,并且 go 目录中有两个准备好的图像,这是最简单的情况。当然,也可以通过编程方式确定屏幕并动态调整fehIni adalah kes paling mudah jika

digunakan dengan pengurus tetingkap yang sesuai dan terdapat dua imej yang disediakan dalam direktori go. Sudah tentu, anda juga boleh menentukan skrin secara pemrograman dan melaraskan panggilan secara dinamik ke

. feh 并不适用于所有环境,wallutils 为许多窗口管理器环境(cinnamon、deepin、gnome、mate、pekwm、plasma、sway、weston、xfce4)提供了 wm

Memandangkan 🎜 tidak boleh digunakan untuk semua persekitaran, wallutils menyediakan pelaksanaan konkrit antara muka wm untuk banyak persekitaran pengurus tetingkap (kayu manis, deepin, gnome, mate, pekwm, plasma, sway, weston, xfce4) . Ini sudah tentu sangat keren. Walau bagaimanapun, jika anda ingin mencipta mr untuk wallutils, anda mungkin perlu melakukannya dalam semua varian, sekurang-kurangnya yang menyokongnya. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menambah imej latar belakang pada berbilang skrin dalam X11/Wayland menggunakan Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam