I have two monitors. I have многообразный workspaces. I want my launcher ("launcer placement" in settings> displays) to be present on both my monitors in the one workspace, but have only one launcher (on the main монитор) in the other workspace. This is because I want to stretch Tweetdeck across both monitors and the launcher gets in the way. Is this possible?
Workspace 1 (Good):
Workspace 2 (NOT Good):
Workspace 2 (Good):
Размещение Средства запуска определяется несколькими вещами:
Значение, набор /org/compiz/profiles/unity/plugins/unityshell/num-launchers
. Можно считать его командой:
dconf read /org/compiz/profiles/unity/plugins/unityshell/num-launchers
который произведет также 1
(средство запуска на одном экране) или 0
(средство запуска на всех экранах).
Установить средство запуска на видимый на всех экранах может быть сделано командой:
dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 0
Если значение 1
(видимый только на одном экране), мы можем установить, на котором экране средство запуска появляется, путем установки целенаправленного экрана как основного экрана, с xrandr
команда:
xrandr --output <screen_name> --primary
Это - точно команды сценарий (сценарии) ниже использования (использования).
В зависимости от аргумента Вы запускаете скрипт с, это любой наборы средство запуска для показа на всех экранах с командой:
dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 0
или только на одном:
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
если все хорошо работает, добавьте команды к двум комбинациям сочетания клавиш: выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте обе команды к доступным ярлыкам.
Сценарий ниже автоматически отслеживает, которых текущая рабочая область (неважно, сколько рабочих областей Вы имеете и в какой конфигурация).
Этот скрипт запущен с рабочими областями, где Вы хотите средство запуска только слева как аргумент. Пример:
Если Вы запускаете скрипт с командой:
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 является теми, Вы только хотите средство запуска слева),