Двойственный Launcher placement монитор

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):

Image 1

Workspace 2 (NOT Good):

Image 2

Workspace 2 (Good):

Image 3

5
задан 6 January 2016 в 00:18

1 ответ

Как размещение средства запуска определяется?

Размещение Средства запуска определяется несколькими вещами:

  1. Значение, набор /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
    
  2. Если значение 1 (видимый только на одном экране), мы можем установить, на котором экране средство запуска появляется, путем установки целенаправленного экрана как основного экрана, с xrandr команда:

    xrandr --output <screen_name> --primary
    

Это - точно команды сценарий (сценарии) ниже использования (использования).

Script1; вручную установите средство запуска на только левый или на обоих экранах (с ключевым ярлыком)

В зависимости от аргумента Вы запускаете скрипт с, это любой наборы средство запуска для показа на всех экранах с командой:

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
    
  • если все хорошо работает, добавьте команды к двум комбинациям сочетания клавиш: выберите: Параметры настройки системы> "Клавиатура"> "Ярлыки"> "Пользовательские Ярлыки". Нажмите "+" и добавьте обе команды к доступным ярлыкам.

Сценарий 2; автоматическая версия

Сценарий ниже автоматически отслеживает, которых текущая рабочая область (неважно, сколько рабочих областей Вы имеете и в какой конфигурация).

Этот скрипт запущен с рабочими областями, где Вы хотите средство запуска только слева как аргумент. Пример:

Если Вы запускаете скрипт с командой:

python3 /path/to/launcher_pos.py 2 3

Результат:

enter image description here

Сценарий

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

Как использовать

  1. Потребности сценария wmctrl

    sudo apt-get install wmctrl
    
  2. Скопируйте сценарий в пустой файл, сохраните его как launcher_pos.py

  3. Тестовый прогон это командой:

    python3 /path/to/launcher_pos.py 1 3
    

    На рабочей области 1 и 3, средство запуска теперь должно появиться только слева

  4. Если все хорошо работает, добавьте его к своим Приложениям Запуска: Тире> Приложения Запуска> Добавляет. Добавьте команду:

    /bin/bash -c "sleep 15 && python3 /path/to/launcher_pos.py 1 3"
    

    (Если рабочая область 1 и 3 является теми, Вы только хотите средство запуска слева),

5
ответ дан 23 November 2019 в 09:22

Другие вопросы по тегам:

Похожие вопросы: