Thread Aktiven Desktop umschalten (6 answers)
Opened by topeg at 2007-12-05 21:48

topeg
 2007-12-05 21:48
#103483 #103483
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Hier ein kleines Script, das den aktiven Desktop wechselt.
Da ich im Netz nichts dergleichen in Perl gefunden habe, veröffentliche ich hier mal den Code:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/perl

use strict;
use warnings;
use X11::Protocol;

# Nummer des Desktops auf den man wechseln will
my $desktop_nr=shift(@ARGV) || 0;
# ein Paar Konstante
my @const = ('AnyPropertyType', 0, -1, 0);

my $x = X11::Protocol->new();
my $root=$x->root;

# Anzahl der verfügbaren Desktops
my $desktops=unpack('L',($x->GetProperty($root, $x->atom('_NET_NUMBER_OF_DESKTOPS'), @const))[0]);
# Namen der Desktops
my @desktop_names=split("\000",($x->GetProperty($root, $x->atom('_NET_DESKTOP_NAMES'), @const))[0]);
# Nummer des gerade Aktiven Desktops
my $desktop_now=unpack('L',($x->GetProperty($root, $x->atom('_NET_CURRENT_DESKTOP'), @const))[0]);

print "Desktops: ".$desktops."\n";
print "Names: ".join(' | ',@desktop_names)."\n";
print "Active: ".$desktop_now."\n";

$desktop_nr-=$desktops while($desktop_nr>=$desktops);
$desktop_nr+=$desktops while($desktop_nr<0);

# Desktop wechseln
# Ziehmlich schlecht Dokumentiert das ganze.
# habe einen Tag gebraucht um die nötigen Informationen zusammen zu suchen...
$x->SendEvent(
  $root, 0,
  $x->pack_event_mask('SubstructureNotify', 'SubstructureRedirect'),
  $x->pack_event(
    name=>'ClientMessage',
    format=>32,
    window=>$root,
    type=>$x->atom('_NET_CURRENT_DESKTOP'),
    data=>pack('LLxxxxxxxxxxxx',$desktop_nr,time())
  )
);

Ich habe das nur unter Gnome und KDE getestet, aber alle DEs, die EWMH unterstützen sollten damit klar kommen.

View full thread Aktiven Desktop umschalten