2009-08-03 13 views

cevap

9

, ayrıca yüksek katman araci üzerinde depepndant değildir duvar kağıdı ile başa çıkmak için bir yol var. Sen xsetroot.c, en ilginç kısmının kaynağını inceleyerek (aslında, duvar kağıdı) kök penceresine başa gerekir hangi burada CopyPaste:

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; 
} 
+0

Teşekkürler. Bu mükemmel çalışıyor. – computergeek6

2

başka bir şey, muhtemelen burada önerilen komuta satırlardan birini çağırmak için system() kullanabilirsiniz ise: Bunu yapmak için gconf kütüphaneyi kullanabilirsiniz

http://www.linuxquestions.org/questions/linux-general-1/change-background-via-command-line-350936/

+2

OP, GNOME hakkında KDE'yi sormadı. –

+0

Kimin umurunda? Bağlantılı iş parçacığı her iki soruyu da yanıtlamıyor. – innaM

+1

İş parçacığında # 5'e giderseniz, GNOME'da arka plan resmini ayarlayan bir gconftool-2 komutu belirtilir. – Amber

18

. gthumb proje üzerinde

// bkgmanage.c 
#include <glib.h> 
#include <gconf/gconf-client.h> 
#include <stdio.h> 

typedef enum { 
    WALLPAPER_ALIGN_TILED  = 0, 
    WALLPAPER_ALIGN_CENTERED = 1, 
    WALLPAPER_ALIGN_STRETCHED = 2, 
    WALLPAPER_ALIGN_SCALED = 3, 
    WALLPAPER_NONE   = 4 
} WallpaperAlign; 

gboolean set_as_wallpaper(const gchar *image_path, WallpaperAlign align) 
{ 
    GConfClient *client; 
    char  *options = "none"; 

    client = gconf_client_get_default(); 

    // TODO: check that image_path is a file 
    if (image_path == NULL) options = "none"; 
    else { 
     gconf_client_set_string(client, 
      "/desktop/gnome/background/picture_filename", 
      image_path, 
      NULL); 
     switch (align) { 
      case WALLPAPER_ALIGN_TILED: options = "wallpaper"; break; 
      case WALLPAPER_ALIGN_CENTERED: options = "centered"; break; 
      case WALLPAPER_ALIGN_STRETCHED: options = "stretched"; break; 
      case WALLPAPER_ALIGN_SCALED: options = "scaled"; break; 
      case WALLPAPER_NONE: options = "none"; break; 
     } 
    } 
    gboolean result = gconf_client_set_string(client, 
     "/desktop/gnome/background/picture_options", 
     options, 
     NULL); 
    g_object_unref(G_OBJECT(client)); 

    return result; 
} 

int main(int argc, const char* argv[]) 
{ 
    if (argc > 1) { 
    printf("Setting %s as wallpaper... ", argv[1]); 
    if (set_as_wallpaper(argv[1], WALLPAPER_ALIGN_STRETCHED)) printf("Ok\n"); 
    else printf("Failed\n"); 
    } else printf("Usage: ./bkgmanage <filename>\n"); 

    return 0; 
} 

kaynak yukarıda dayanır: Aşağıdaki örnek arkaplan değiştirmek için komple bir programdır. Şu dizeyle derlenmiş olabilir: Soru gnome özgü olsa

gcc -Wall -g `pkg-config --libs --cflags glib-2.0 gconf-2.0` bkgmanage.c -o bkgmanage 
İlgili konular