2台のモニターがあります。複数のワークスペースがあります。ランチャー(設定>ディスプレイの「ランチャー配置」)を一方のワークスペースの両方のモニターに表示し、他方のワークスペースには(メインモニターに)ランチャーを1つだけ配置します。これは、Tweetdeckを両方のモニターに拡張したいので、ランチャーが邪魔になるからです。これは可能ですか?
ワークスペース1(良好):
ワークスペース2(良くない):
ワークスペース2(良好):
ランチャーの配置は、いくつかのことによって定義されます。
/org/compiz/profiles/unity/plugins/unityshell/num-launchers
で設定される値。次のコマンドで読むことができます:
dconf read /org/compiz/profiles/unity/plugins/unityshell/num-launchers
1
(1つの画面上のランチャー)または0
(すべての画面上のランチャー)を出力します。
setにするには、次のコマンドでランチャーをすべての画面に表示できます。
dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 0
値が1
(1つの画面にのみ表示)の場合、ターゲット画面を設定することで、ランチャーが表示される画面を設定できますasprimary画面、xrandr
コマンド付き:
xrandr --output <screen_name> --primary
これらは、以下のスクリプトが使用するコマンドです。
スクリプトを実行する引数に応じて、コマンドですべての画面に表示するようにランチャーを設定します。
dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 0
または1つのみ:
dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 1
後者の場合、左の画面もプライマリ画面として設定されます。
#!/usr/bin/env python3
import subprocess
import sys
key = "dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers "
arg = sys.argv[1]
if arg == "left":
# the launcher is set to show on all screens
subprocess.Popen(["/bin/bash", "-c", key+"1"])
Elif arg == "all":
# the launcher is set to show only on the left screen
subprocess.Popen(["/bin/bash", "-c", key+"0"])
# make sure the left screen is the primary one
scr_data = subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()
left = [l.split()[0] for l in scr_data if "+0+0" in l][0]
subprocess.Popen(["xrandr", "--output", left, "--primary"])
launcher_pos.py
として保存します両方のコマンドを使用してスクリプトをテストします(ターミナルウィンドウから)。
python3 /path/to/launcher_pos.py left
そして
python3 /path/to/launcher_pos.py all
すべてが正常に機能する場合、コマンドを2つのショートカットキーの組み合わせに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。 「+」をクリックして、両方のコマンドを使用可能なショートカットに追加します。
次のスクリプトは、現在のワークスペースがどれであるか(使用しているワークスペースの数や構成に関係なく)を自動的に追跡します。
このスクリプトは、ワークスペースで、ランチャーを左側のみにしたい場所で引数として実行されます。例:
コマンドを使用してスクリプトを実行する場合:
python3 /path/to/launcher_pos.py 2 3
結果は次のとおりです。
import subprocess
import sys
import time
wspace = sys.argv[1:]
key = "dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers "
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(",", "") )]
res = get_res()
def get_dt():
# get the current viewport
vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
dt = [int(n) for n in vp_data[3].split("x")]
cols = int(dt[0]/res[0])
curr_vpdata = [int(n) for n in vp_data[5].split(",")]
curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
return str(curr_col+curr_row*cols)
def set_launcher(arg):
if arg == "left":
# the launcher is set to show on all screens
subprocess.Popen(["/bin/bash", "-c", key+"1"])
Elif arg == "all":
# the launcher is set to show only on the left screen
subprocess.Popen(["/bin/bash", "-c", key+"0"])
# make sure the left screen is the primary one
scr_data = subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()
left = [l.split()[0] for l in scr_data if "+0+0" in l][0]
subprocess.Popen(["xrandr", "--output", left, "--primary"])
curr_ws1 = get_dt()
while True:
time.sleep(1)
curr_ws2 = get_dt()
if curr_ws2 != curr_ws1:
if curr_ws2 in wspace:
arg = "left"
else:
arg = "all"
set_launcher(arg)
curr_ws1 = curr_ws2
スクリプトにはwmctrl
が必要です
Sudo apt-get install wmctrl
スクリプトを空のファイルにコピーし、launcher_pos.py
として保存します
次のコマンドでテスト実行します:
python3 /path/to/launcher_pos.py 1 3
ワークスペース1および3で、ランチャーが左側にのみ表示されるようになりました
すべてが正常に機能する場合は、スタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加コマンドを追加します。
/bin/bash -c "sleep 15 && python3 /path/to/launcher_pos.py 1 3"
(ワークスペース1と3が左側にあるランチャーのみが必要な場合)