В Linux есть множество настольных сред (GNOME, KDE, Xfce, Cinnamon …) и оконных систем (X11, Wayland, Mir …), и кажется, что у каждого есть свой способ сменить обои. Существуют ли высокоуровневые библиотеки, особенно в C ++ (и Qt 5), которые позволяют разработчику программно менять обои в Linux, независимо от управления окнами или рабочего стола? Я ищу что-то подобное:
#include <the_lib>
#include <cstdlib>
int main(int argc, char ** argv) {
std::string theNewWallpaper = "path/to/my/wallpaper.jpg";
// Or a file, an image, or something else representing the wallpaper.
TheLib::changeWallpaper(theNewWallpaper);
// or a more complicated piece of code which does the same.
return EXIT_SUCCESS;
}
Попробуйте решение «Andrew Y» в посте: Смена обоев в Linux программно
Он утверждает, что его решение не зависит от наборов инструментов более высокого уровня, поэтому оно должно работать для любых сред Linux.
static void
SetBackgroundToBitmap(Pixmap bitmap, unsigned int width, unsigned int height)
{
Pixmap pix;
GC gc;
XGCValues gc_init;
gc_init.foreground = NameToPixel(fore_color, BlackPixel(dpy, screen));
gc_init.background = NameToPixel(back_color, WhitePixel(dpy, screen));
if (reverse) {
unsigned long temp=gc_init.foreground;
gc_init.foreground=gc_init.background;
gc_init.background=temp;
}
gc = XCreateGC(dpy, root, GCForeground|GCBackground, &gc_init);
pix = XCreatePixmap(dpy, root, width, height,
(unsigned int)DefaultDepth(dpy, screen));
XCopyPlane(dpy, bitmap, pix, gc, 0, 0, width, height, 0, 0, (unsigned long)1);
XSetWindowBackgroundPixmap(dpy, root, pix);
XFreeGC(dpy, gc);
XFreePixmap(dpy, bitmap);
if (save_colors)
save_pixmap = pix;
else
XFreePixmap(dpy, pix);
XClearWindow(dpy, root);
unsave_past = 1;
}