5

XlibモジュールでPythonを使用してウィンドウマネージャーのワークスペースを切り替えるにはどうすればよいですか?

これは私の最も有望な試みです:

#!/usr/bin/python

from Xlib import X, display, error, Xatom, Xutil
import Xlib.protocol.event

screen = Xlib.display.Display().screen()
root   = screen.root


def sendEvent(win, ctype, data, mask=None):
        """ Send a ClientMessage event to the root """
        data = (data+[0]*(5-len(data)))[:5]
        ev = Xlib.protocol.event.ClientMessage(window=win, client_type=ctype, data=(32,(data)))

        if not mask:
            mask = (X.SubstructureRedirectMask|X.SubstructureNotifyMask)
        root.send_event(ev, event_mask=mask)


# switch to desktop 2
sendEvent(root, Xlib.display.Display().intern_atom("_NET_CURRENT_DESKTOP"), [2])

上記のコードは、PyPanelソースのさまざまな場所から恥知らずに盗まれています。残念ながら、それは何もしません、警告/例外さえ生成しません。ここで何かが足りませんか?

PythonとPyGTKを使用しています。Xlibは、デスクトップを切り替えるための正しい選択のようです。wnck(バギーPythonモジュール)などを使用するつもりはありませんが、とにかくポインタをいただければ幸いです。

Xlib(またはPyGTK)を使用してPythonアプリケーションを作成するのはこれが初めての試みであると付け加えるかもしれません。

4

1 に答える 1

5

どうやら、同じDisplayオブジェクトで作業し、最後にそれを操作する必要があるようですflush。何かのようなもの:

display = Xlib.display.Display()
screen = display.screen()
root = screen.root

# ...

sendEvent(root, display.intern_atom("_NET_CURRENT_DESKTOP"), [1, X.CurrentTime])
display.flush()

クレジット:非常によく似たスレッドからのアイデア(ほとんど機能します)。

PSちなみに、デスクトップ番号は0から始まります。

于 2010-03-09T17:17:26.573 に答える