デスクトッププロパティ

多重起動防止をどうするか調べていている。
どうやら atom を使う方法があるようだ、ということで

gtk.gdk.atom_intern

とかでググりまくっていたらこんなのを見つけた。

Extended Window Manager Hints

んーということならデスクトップのプロパティは

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python
#-*- coding:utf-8 -*-
 
import gtk
 
# デスクトップ取得
w = gtk.gdk.get_default_root_window()
# 得られるプロパティのリスト取得
p = gtk.gdk.atom_intern("_NET_SUPPORTED")
a = w.property_get(p)[2]
# ループで丸ごと表示
for r in a:
    p = gtk.gdk.atom_intern(r)
    print r
    print w.property_get(p)

とすればどのキーワードでどのプロパティが取れるか全部表示できて解りやすい。
とりあえず出力されるタプルの3番目がリストか文字列になっている。
None でないのを展開、又は文字列ならそのまま表示させれば情報が手に入る。
freedesktop.org だから KDE でも問題無いと思う、試していないけど。

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
#!/usr/bin/env python
#-*- coding:utf-8 -*-
 
import gtk
 
# デスクトップ取得
w = gtk.gdk.get_default_root_window()
 
# ディスプレイサイズ
p = gtk.gdk.atom_intern("_NET_DESKTOP_GEOMETRY")
print "ディスプレイ幅",w.property_get(p)[2][0]
print "ディスプレイ高さ",w.property_get(p)[2][1]
 
# ワークエリア
p = gtk.gdk.atom_intern("_NET_WORKAREA")
area = w.property_get(p)
print "ワークエリア:Left",w.property_get(p)[2][0]
print "ワークエリア:Top",w.property_get(p)[2][1]
print "ワークエリア:Width",w.property_get(p)[2][2]
print "ワークエリア:Height",w.property_get(p)[2][3]
 
# 仮想デスクトップの数
p = gtk.gdk.atom_intern("_NET_NUMBER_OF_DESKTOPS")
print "仮想デスクトップの数",w.property_get(p)[2][0]
 
# 現在の仮想デスクトップ位置
p = gtk.gdk.atom_intern("_NET_CURRENT_DESKTOP")
print "現在の仮想デスクトップ位置",w.property_get(p)[2][0]
 
# 現在の仮想デスクトップ名
p = gtk.gdk.atom_intern("_NET_DESKTOP_NAMES")
print "現在の仮想デスクトップ名",w.property_get(p)[2],"\n"

_NET_CLIENT_LIST で表示されているウインドウ ID
_NET_ACTIVE_WINDOW でアクティブウインドウ ID

が得られるんだがコレを上手く使えないかな?いまココ