Bashスクリプトが現在のワークスペース(仮想デスクトップ)の名前を検索する方法はありますか?
これは、シェルが作成されたデスクトップに基づいて.bashrcファイルの動作をカスタマイズするような場合に非常に役立ちます。
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
お役に立てれば!
Unityを使用している場合、現在のビューポートを直接取得することはできません
wmctrl -d
unityにはwmctrl -d
によって直接検出されないビューポートがあるためです。出力には1つのワークスペースのみが表示されます。
0 * DG: 5040x2100 VP: 1680,1050 WA: 59,24 1621x1026 N/A
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())
インストールwmctrl
Sudo apt install wmctrl
コマンドで実行する
python3 /path/to/get_viewport.py
1、2、3、または現在のビューポートが何であれ出力します。ビューポート設定に含まれる可能性のある行/列を自動的にカウントします。
スクリプト
xrandr
から1つのビューポートのサイズ(解像度)を取得します。可能な追加のモニターも含まれます。少なくともGnome Shellでは、おそらく他の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
そして、あなたは必要なものを得るために少し情報をマッサージすることができます。