Dual-monitor de posicionamento do iniciador

5

Eu tenho dois monitores. Eu tenho vários espaços de trabalho. Eu quero o meu lançador ("colocação de launder" em configurações > displays) estar presente em ambos os meus monitores no espaço de trabalho um, mas tem apenas um lançador (no monitor principal) no outro espaço de trabalho. Isso porque eu quero esticar o Tweetdeck em ambos os monitores e o lançador fica no caminho. Isso é possível?

Área de trabalho 1 (boa):

Áreadetrabalho2(NOTGood):

Área de trabalho 2 (boa):

    
por Colin 05.01.2016 / 22:17

1 resposta

4

Como o posicionamento do lançador é definido?

A veiculação do lançador é definida por algumas coisas:

  1. O valor, definido em /org/compiz/profiles/unity/plugins/unityshell/num-launchers . Você pode lê-lo pelo comando:

    dconf read /org/compiz/profiles/unity/plugins/unityshell/num-launchers
    

    que produzirá 1 (lançador em uma tela) ou 0 (lançador em todas as telas).

    Para definir o lançador para visível em todas as telas pode ser feito pelo comando:

    dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 0
    
  2. Se o valor for 1 (visível em apenas uma tela), podemos definir em qual tela o inicializador aparece, configurando a tela segmentada como tela primária , com um comando xrandr :

    xrandr --output <screen_name> --primary
    

Esses são exatamente os comandos que o script (s) abaixo usa (s).

Script1; defina manualmente o iniciador apenas para a esquerda ou em ambos os ecrãs (com um atalho de teclas)

Dependendo do argumento em que você executa o script, ele define o ativador para exibição em todas as telas com o comando:

dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 0

ou em apenas um:

dconf write /org/compiz/profiles/unity/plugins/unityshell/num-launchers 1

No último caso, também define a tela da esquerda como a principal.

O script

#!/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"])

Como usar

  • Copie o script em um arquivo vazio, salve-o como launcher_pos.py
  • Teste o script com os dois comandos (a partir de uma janela de terminal):

    python3 /path/to/launcher_pos.py left
    

    e

    python3 /path/to/launcher_pos.py all
    
  • se tudo funcionar bem, adicione os comandos a duas combinações de teclas de atalho: escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione os dois comandos aos atalhos disponíveis.

Script 2; versão automática

O script abaixo registra automaticamente qual é o espaço de trabalho atual (não importa quantas áreas de trabalho você tenha e em qual configuração).

Este script é executado com os espaços de trabalho, onde você quer o lançador somente à esquerda , como um argumento. Um exemplo:

Se você executar o script com o comando:

python3 /path/to/launcher_pos.py 2 3

O resultado é:

Oscript

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

Como usar

  1. O script precisa de wmctrl

    sudo apt-get install wmctrl
    
  2. Copie o script em um arquivo vazio, salve-o como launcher_pos.py

  3. Teste o comando pelo comando:

    python3 /path/to/launcher_pos.py 1 3
    

    No espaço de trabalho 1 e 3, o iniciador deve aparecer apenas à esquerda

  4. Se tudo funcionar bem, adicione-o aos seus aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar. Adicione o comando:

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

    (Se o espaço de trabalho 1 e 3 são aqueles que você quer apenas o inicializador à esquerda)

por Jacob Vlijm 05.01.2016 / 23:10