現在のワークスペースの名前を調べるにはどうすればよいですか?


11

bashスクリプトが現在のワークスペース(仮想デスクトップ)の名前を検索する方法はありますか?

これは、シェルが作成されたデスクトップに基づいて.bashrcファイルの動作をカスタマイズする場合などに非常に便利です。


あなたのウィンドウマネージャーは何ですか?
Jacob Vlijm

UbuntuにインストールされているCinnamonデスクトップを使用しています。私は言ったと思いましたが、質問を編集したとき、私はあまりにも引き出されたに違いありません。
DonGar 2017

1
Cinnamonでは、これはデスクトップ名の最後の単語を示します。私のユースケースではこれで十分です。デスクトップ=wmctrl -d | grep '*' | sed 's/.* //g'
DonGar 2017

回答:


13

これを使用して、wmctrl -dすべてのワークスペースを一覧表示できます。*現在のワークスペースを表します。

~$ wmctrl -d
0  * DG: 3840x1080  VP: 0,0  WA: 0,25 3840x1055  1
1  - DG: 3840x1080  VP: N/A  WA: 0,25 3840x1055  2
2  - DG: 3840x1080  VP: N/A  WA: 0,25 3840x1055  3
3  - DG: 3840x1080  VP: N/A  WA: 0,25 3840x1055  4

したがって、現在のgrepのみを取得するには*

~$ wmctrl -d | grep -w '*'
0  * DG: 3840x1080  VP: 0,0  WA: 0,25 3840x1055  1

お役に立てれば!


OPがUnityを使用している場合、ワークスペースは1つだけです:)。また、出力にはwmctrl -d
Jacob Vlijm

@JacobVlijm次に、ワークスペースが1つしかない場合、OPはおそらくこれを心配しません。:)
テランス

もちろん彼はそうしますが、それらはビューポートと呼ばれ、から直接取得することはできませんwmctrl -d
Jacob Vlijm 2017

@JacobVlijmさて、1つの輝く光は、Unityがデフォルトではなくなり、18.04のリリース後になくなるということです。:D
テランス2017

私は実際にそれが好きで、おそらくフォークされるでしょう。
Jacob Vlijm 2017

11

Unityのビューポート

Unityを使用している場合、現在のビューポートはから直接取得できません

wmctrl -d

Unityにはビューポートがあるため、によって直接検出されませんwmctrl -d。出力にはワークスペースが1つだけ表示されます。

0  * DG: 5040x2100  VP: 1680,1050  WA: 59,24 1621x1026  N/A
  • 私の解像度は1680 x 1050です(からxrandr
  • スパニングワークスペース(すべてのビューポート)は5040x2100です。つまり、3x2ビューポート:5040/1680 = 3および2100/1050 = 2です。
  • 私は現在(ビューポート-)位置 1680,1050(x、y)にいます

以下のスクリプトは、この情報から現在のビューポートを計算します:

#!/usr/bin/env python3
import subprocess

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def current():
    # get the resolution (viewport size)
    res = get_res()
    # read wmctrl -d
    vp_data = subprocess.check_output(
        ["wmctrl", "-d"]
        ).decode("utf-8").split()
    # get the size of the spanning workspace (all viewports)
    dt = [int(n) for n in vp_data[3].split("x")]
    # calculate the number of columns
    cols = int(dt[0]/res[0])
    # calculate the number of rows
    rows = int(dt[1]/res[1])
    # get the current position in the spanning workspace
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    # current column (readable format)
    curr_col = int(curr_vpdata[0]/res[0])
    # current row (readable format)
    curr_row = int(curr_vpdata[1]/res[1])
    # calculate the current viewport
    return curr_col+curr_row*cols+1

print(current())

使用するには:

  1. インストール wmctrl

    sudo apt install wmctrl
    
  2. コマンドで実行する

    python3 /path/to/get_viewport.py
    

    1、2、3、または現在のビューポートが何であれ出力します。ビューポート設定に含めることができる行/列を自動的にカウントします。

説明

ここに画像の説明を入力してください

スクリプト

  • から、1つのビューポート(解像度)のサイズを取得しxrandrます。
  • スパニングワークスペースの現在の位置を取得します
  • ビューポート設定の列/行の数を計算します
  • それから、現在のビューポートを計算します

1
Unityの感想に関係なく、このスクリプトは非常にうまく機能します。よくできました!+1
テランス2017

3

少なくともGnomeシェルでは、おそらく他のWMでも、Xserverに直接問い合わせることができます(Waylandの場合はわかりません)。

[romano:~/tmp] % desktop=$(xprop -root -notype  _NET_CURRENT_DESKTOP | perl -pe 's/.*?= (\d+)/$1/') 
[romano:~/tmp] % echo $desktop
1

基本的に、コマンドxpropは戻ります

 [romano:~/tmp] % xprop -root -notype  _NET_CURRENT_DESKTOP
 _NET_CURRENT_DESKTOP = 1

少し情報をマッサージして、必要なものを取得できます。


これは名前ではなくワークスペース番号です。名前を取得するには、プロパティで番号を検索する必要があります_NET_DESKTOP_NAMES
Gilles「SO-邪悪なことをやめよ」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.