コマンドラインから現在どのワークスペースにいるかを検出する方法はありますか?


12

gnomeの端末スクリプトからワークスペース番号を取得する方法を見つけようとしています。何か案は?

回答:


13

Compizを使用していない場合は、xdotool を使用できますxdotoolをインストールする

例:

xdotool get_desktop

これは0、最初のワークスペース1から実行する場合、2番目のワークスペースから実行する場合などに戻ります。


7

古くて答えられたスレッドですが、私は同じ情報を追っていました。これは、標準のxorgツールで次のように実行できます。

xprop -root -notype _NET_CURRENT_DESKTOP

6

compizを使用している場合、これはもう少し難しくなります。

編集:これはcompizの有無にかかわらず機能するようになりました。

それを行うための「小さな」Pythonスクリプトを作成しました。

#!/usr/bin/python
from subprocess import Popen, PIPE
getoutput = lambda x: Popen(x, stdout=PIPE).communicate()[0]
compiz_running = list(i for i in getoutput(("ps", "-aef", )).split("\n")
    if "compiz --replace" in i and not "grep" in i) != []

if compiz_running:
    # get the position of the current workspace
    ws = list(int(i.strip(",")) for i in  getoutput(("xprop", "-root",
        "-notype", "_NET_DESKTOP_VIEWPORT", )).split()[-2:])
    # get the number of horizontal and vertical workspaces
    hsize = int(getoutput(("gconftool",
        "--get", "/apps/compiz/general/screen0/options/hsize", )))
    vsize = int(getoutput(("gconftool",
        "--get", "/apps/compiz/general/screen0/options/vsize", )))
    # get the dimentions of a single workspace
    x, y = list(int(i) for i in getoutput(("xwininfo", "-root",
        "-stats", )).split("geometry ")[1].split("+")[0].split("x"))
    # enumerate workspaces
    workspaces, n = [], 0
    for j in range(vsize):
        for i in range(hsize):
            workspaces.append([n, [x*i, y*j, ], ])
            n += 1
    print list(i for i in workspaces if i[1] == ws)[0][0]
# if compiz is not running
else: # this code via @DoR
    print getoutput(("xdotool", "get_desktop", )).strip() 

これをどこかに保存し、実行可能としてマークします。これは0、ワークスペース間の数とワークスペースの数だけを出力します。

列挙は次のようになります。

+---+---+
| 0 | 1 |
+---+---+
| 2 | 3 |
+---+---+

compizが無効になっている場合にこれを機能させるには、xdotool をインストールするxdotoolをインストールする必要があります。


ありがとう。compiz_runningテストから "--replace"を削除する必要があり、ccsmの一般オプションではデスクトップサイズ/垂直仮想サイズが2.
nealmcb

3

何もインストールせずに、metacityを使用している場合、これを使用できます。

python -c "import wnck; s=wnck.screen_get_default(); s.force_update(); w=s.get_active_workspace();  w_num=w.get_number(); print(w_num);" 2>/dev/null

0

Unityでは、受け入れられた答えのようです

 xdotool get_desktop_viewport

動作しません。常に0を返します。画面は、一部のみが表示される非常に大きなビューポートとして構成されていると思います。ワークスペースのサイズを知る必要があるので、代替手段は少し注意が必要です。すなわち:

 xdotool get_desktop_viewport

右上のワークスペースにいる場合、「1600 0」のようなものを返します。最初の数字は、おそらくあなたが持っている最大のディスプレイの幅です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.