Como mostrar o iniciador Unity em apenas um espaço de trabalho?

6

Eu quero manter o ativador ativo apenas no espaço de trabalho principal. Por exemplo. Eu gosto de manter a janela do Citrix em modo de exibição completa sem lançador (no espaço de trabalho II).

    
por Bugger_man 28.09.2014 / 10:06

2 respostas

7

Como muitas coisas, não existe tanto quanto eu sei, MAS , isso pode ser feito com um pouco de criatividade e com as ferramentas certas.

Comoissopodeserfeito

Supondoquevocêestejano14.04(compython3),vocêpodeusarumscriptpararodaremsegundoplano,quemonitorasuaviewportatualedefineoativadorparaocultarautomaticamenteounão,dependendodaviewportatual.

  • Oquevocêprecisafazerprimeiroéinstalarwmctrl:

    sudoapt-getinstallwmctrl

    Precisamosdewmctrlparaobterinformaçõessobreotamanhototaldetodasasviewportseparapoderlerinformaçõessobreaseçãoatualemqueestamos.

  • Umavezfeitoisso,copieoscriptabaixoemumarquivovazioeproteja-ocomoautohide_launcher.py(mantenhaonomeassim)etorne-oexecutável(!).

    Nalinhahide_launcher,decidaporviewportsquevocêdesejaocultarautomaticamenteoativador(defina"True") e use o número correto de entradas, correspondente ao seu número de viewports. A lista lê por linha de viewport, da esquerda para a direita.

#!/usr/bin/env python3

import subprocess
import time

# set the hide-launcher values for your viewports; in rows/columns
hide_launcher = (False, True, True, True)

# don't change anything below (or it must be the time.sleep(2) interval)
key = " org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ "
pr_get = "gsettings get "; pr_set = "gsettings set "
check = pr_get+key+"launcher-hide-mode"
hide = pr_set+key+"launcher-hide-mode 1"
show = pr_set+key+"launcher-hide-mode 0"

def get_value(command):
    return subprocess.check_output(
        ["/bin/bash", "-c", command]).decode('utf-8').strip()

# get screen resolution
output = get_value("xrandr").split(); idf = output.index("current")
screen_res = (int(output[idf+1]), int(output[idf+3].replace(",", "")))

while True:
    # get total span size all viewports, position data
    wsp_info = get_value("wmctrl -d").strip()
    scr_data = [item.split("x") for item in wsp_info.split(" ") if "x" in item][0]
    # get current position (viewport coordinates)
    VP = eval(wsp_info[wsp_info.find("VP: "):].split(" ")[1])
    # calculated viewports rows / columns
    VP_hor = int(scr_data[0])/int(screen_res[0])
    VP_vert = int(scr_data[1])/int(screen_res[1])
    # calculated viewport positions
    range_hor = [i*screen_res[0] for i in range(int(VP_hor))]
    range_vert = [i*screen_res[1] for i in range(int(VP_vert))]
    viewports = [(h, range_vert[i])for i in range(len(range_vert)) for h in range_hor]
    current_viewport = viewports.index(VP); a_hide = get_value(check)
    if (hide_launcher[current_viewport], a_hide == "0") == (True, True):
        subprocess.Popen(["/bin/bash", "-c", hide])
    elif (hide_launcher[current_viewport], a_hide == "0") == (False, False):
        subprocess.Popen(["/bin/bash", "-c", show])
    else:
        pass
    time.sleep(1)
  • Você pode iniciar o script pelo comando:

    /path/to/autohide_launcher.py
    

Alternar autohide por visualização em / de

No entanto, é mais conveniente usar o script abaixo para ter um comando para ativar / desativar o script.

Copie o script abaixo em um arquivo vazio e salve-o como start_stop.py , em uma única e mesma pasta como o script autohide_launcher.py . Torne-o executável também (!). Agora você pode alternar a função autohide com o comando

/path/to/start_stop.py

O script de início / parada:

#!/usr/bin/env python3

import os
import subprocess

script_dir = os.path.dirname(os.path.abspath(__file__))
cmd = "ps -ef | grep autohide_launcher.py"
run = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").split("\n")
match = [line for line in run if script_dir+"/"+"autohide_launcher.py" in line]

if len(match) != 0:
    subprocess.Popen(["kill", match[0].split()[1]])
    subprocess.Popen(["notify-send", "autohide per viewport stopped..."])
else:
    subprocess.Popen(["/bin/bash", "-c", script_dir+"/"+"autohide_launcher.py"])
    subprocess.Popen(["notify-send", "autohide per viewport started..."])

Formasalternativasparainiciaroupararoscript

Existemváriasoutrasmaneirasdealternaroscriptdeumamaneiraconveniente:

Adicioneoscriptàssuasapoplicaçõesdeinicialização

Sevocêquiserpermanentementeexecutaroscriptemsegundoplano:

  • Abraosaplicativosdeinicializaçãoeescolha"Adicionar".
  • Adicione o comando:

    /path/to/autohide_launcher.py
    
  • Dê um nome ao seu gosto

Defina um atalho de teclado para alternar o script

  • Abra as configurações do sistema e escolha: "Teclado" > "Atalhos" > "Atalhos personalizados".
  • Crie um novo atalho à sua escolha, com o comando:

    /path/to/start_stop.py
    

    Agora você pode alternar o autohide por visualização com a combinação de teclas.

publicado em gist.gisthub

    
por Jacob Vlijm 28.09.2014 / 14:25
4

Introdução

O Iniciador Unity e o Compiz não têm uma configuração para mostrar apenas o lançador em viewport específico, no entanto, é possível usar a configuração hide launcher para pesquisar alterações na janela de visualização e alterar essa configuração de acordo. O viewport superior esquerdo seria coordenadas 0,0 , portanto, deve haver pesquisa para saber se estamos ou não nesse viewport - caso contrário, o launcher não foi ativado.

O script abaixo faz exatamente isso.

Obtendo o script

O código-fonte pode ser copiado daqui diretamente ou baixado do meu repositório git executando os seguintes comandos (obviamente no terminal):

  1. sudo apt-get install git
  2. cd /opt ; sudo git clone https://github.com/SergKolo/sergrep.git
  3. sudo chmod -R +x sergrep

O arquivo é chamado toggle_unity_launcher.sh

Como o script funciona

O script pode ser chamado sem opções (para mostrar o iniciador somente na janela superior esquerda) ou com as opções -x e -y para definir uma janela específica, como

 toggle_unity_launcher.sh -x 1366 -y 0

O sinalizador -h imprime o uso.

Execução do script no login

O script pode ser iniciado no login, adicionando o caminho completo para o arquivo (incluindo as opções -x e -y ) e os argumentos nos aplicativos de inicialização, como

Código-fonte

#!/usr/bin/envbash#############################################################Author:SergKolo,contact:[email protected]#Date:April8th,2016#Purpose:SetUnitylaunchertoshowuponlyon#specificviewport.Bydefault-viewport0,0#Writtenfor:http://askubuntu.com/q/349247/295286#Testedon:Ubuntu14.04LTS############################################################Copyright:SergKolo,2016##Permissiontouse,copy,modify,anddistributethissoftwareisherebygranted#withoutfee,providedthatthecopyrightnoticeaboveandthispermissionstatement#appearinallcopies.##THESOFTWAREISPROVIDED"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.

ARGV0="$0"
ARGC=$#

print_usage()
{
  cat << EOF

Copyright 2016 Serg Kolo
Usage: toggle_unity_launcher.sh [-x INT -y INT] [-h]

The script toggles Unity Launcher on user-defined viewport
By default - launcher appears only on 0, 0

-x and -y flags serve to set custom viewport 

Use 'xprop -root -notype _NET_DESKTOP_VIEWPORT' to find
the exact coordinates of a viewport you want to set
EOF
}

get_viewport() 
{
    xprop -root -notype _NET_DESKTOP_VIEWPORT | awk -F '=' '{printf "%s",substr($2,2)}'
} 

set_launcher_mode()
{
  dconf write /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode $1

}

poll_viewport_change()
{
  while [ "$(get_viewport)" = "$VIEWPORT" ]  
  do
    set_launcher_mode 0
    sleep 0.25
  done
}

parse_args()
{
  local OPTIND opt
  while getopts "x:y:h" opt
  do
   case ${opt} in
      x) XPOS=${OPTARG} 
        ;;
      y) YPOS=${OPTARG}
        ;;
      h) print_usage
         exit 0
        ;;
     \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    esac
  done
  shift $((OPTIND-1))
}

main()
{
 local XPOS=0
 local YPOS=0
 parse_args "$@"
 local VIEWPORT=$(printf "%s, %s" "$XPOS" "$YPOS"  )  
 while true
 do
  poll_viewport_change 
  set_launcher_mode 1 # happens only when 
                      # previous function exits
  sleep 0.25
 done
}

main "$@"
    
por Sergiy Kolodyazhnyy 08.04.2016 / 16:34