Drawing on the X root window

后端 未结 2 1776
粉色の甜心
粉色の甜心 2021-01-17 18:02

I\'d like to be able to draw on the root window in Linux. I.e. make an OSD.

I\'m using Gnome.

Code samples or links to them would be appreciated.

相关标签:
2条回答
  • 2021-01-17 18:41

    It is possible, but you will not see anything in GNOME. Nautilus, GNOME's file manager, opens its own window on top of root X window to display icons. Because of that the root X window is fully covered... so there is no point in drawing on it.

    If you want to make OSD, either you should use a library like XOSD, or open your own X window and make it translucent. In fact, XOSD's source code should be a good example of how to do this.

    Whole library seems to be implemented in one file: xosd.c.

    0 讨论(0)
  • 2021-01-17 18:50
    use X11::Protocol;
    
    my $x = X11::Protocol->new();
    my $desktop;
    
    my ($root,undef,@kids)=$x->QueryTree($x->{'root'});
    printf "%10x:\tRoot\n", $root;
    foreach (@kids){
    my $gdkw = Gtk2::Gdk::Window->foreign_new($_);
    printf ("%10x:\tDesktop\n",$gdkw->get_xid),$desktop=$gdkw,last if $gdkw->get_type_hint eq 'desktop';
    }
    $desktop=Gtk2::Gdk::Window->foreign_new($root) if ! $desktop;
    #------------------------------------------
    

    I can find desktop, verified by xwininfo. But, I lost the code which can draw desktop, seems used "set_back_pixmap".

    Now cairo can draw on any windows very simply, just use

    $cr = Gtk2::Gdk::Cairo::Context->create ($drawable);
    

    But, this does not work on desktop. Perhaps due to kernel update? Or I messed up now on Ubuntu 10.04-3.

    0 讨论(0)
提交回复
热议问题