Como escrever um script para alternar a configuração unitytweaktool (hotcorners)

3

Especificamente, eu quero ligar / desligar os hotcorners toda vez que eu começo um jogo a vapor. Mas eu não tenho conhecimento de scripts de qualquer tipo. Qualquer recurso para aprender esse tipo de coisa seria ótimo.

Por favor, diga-me se esta pergunta está no lugar errado, eu vou deletar.

    
por uniqueID 19.05.2016 / 06:44

2 respostas

5

Se você quiser apenas o script, pule a explicação

Explicação

Você terá que aprender pelo menos uma linguagem de programação (/ script) apropriada, mas então:

Introdução; dconf e gsettings
A maioria (se não todas) das configurações, editadas pela Unity Tweak Tool, edita o banco de dados dconf , em que muitas configurações são armazenadas. É melhor executar a edição do banco de dados do dconf via gsettings , que é de fato um cli -front final para o banco de dados dconf.

No seu exemplo, infelizmente, só é possível definir / alternar hotcorners editando o banco de dados dconf diretamente, porque não há SCHEMA disponível em gsettings para ele.

Como obter o valor atual
O hotcorners -plugin é definido em:

/org/compiz/profiles/unity/plugins/core/show-desktop-edge

Você pode ler o estado atual pelo comando:

dconf read /org/compiz/profiles/unity/plugins/core/show-desktop-edge

Isso terá uma saída no seu caso como (do seu comentário):

 '|BottomRight'

Como definir um novo valor
Para desativar hotcorners, você precisa executar o comando:

dconf write /org/compiz/profiles/unity/plugins/core/show-desktop-edge "''"

para (re) ativar hotcorners, com seu hotcorner definido anteriormente:

dconf write /org/compiz/profiles/unity/plugins/core/show-desktop-edge "'|BottomRight'"

A anatomia de um script de alternância

O que o script (em geral) deve fazer:

  1. Teste qual é o estado atual A / B
    • Se o estado atual for A - > conjunto B
    • Se o estado atual for B - > definir um

O script

No script, as etapas acima são descritas nos comentários:

#!/usr/bin/env python3
import subprocess

key = "/org/compiz/profiles/unity/plugins/core/show-desktop-edge"
val_on = "'|BottomRight'"

def test():
    # read the current setting
    return subprocess.check_output(["dconf", "read", key]).decode("utf-8").strip() == val_on

currstate = test()

if currstate == True:
    # if currently hotcorners are "on", set it to "''"
    newval = "''"
else:
    # if currently hotcorners are "off", set it to val_on
    newval = val_on

subprocess.Popen(["dconf", "write", key, str(newval)])

Como usar

  1. Copie o script em um arquivo vazio, salve-o como toggle_hotcorners.py
  2. Teste- execute-o a partir de um terminal:

    python3 /path/to/toggle_hotcorners.py
    
  3. Se tudo funcionar bem, adicione-o a um atalho de teclado. Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

    python3 /path/to/toggle_hotcorners.py
    

Como posso ver o que a ferramenta Unity Tweak está editando?

Não apenas para a Ferramenta Unity Tweak, mas também para ver o que as Configurações do Sistema estão editando; em muitos casos, as informações a seguir fornecem informações úteis:

  • Abra um terminal, abra a ferramenta Unity Tweak
  • Execute o comando dconf watch / no terminal
  • Alterar o valor da GUI na ferramenta Unity Tweak

A saída no terminal muda:

Você pode ver o que acontece se eu desabilitar / habilitar os hotcorners na Ferramenta Unity Tweak.

    
por Jacob Vlijm 19.05.2016 / 08:13
2

Tweaked @ roteiro de Jacob um pouco. Primeiro, usando dconf watch / e ligando / desligando hotcorners na unidade-tweak-tool para descobrir quais variáveis (?) Estão sendo alteradas

  1. Eu tenho janelas espalhadas no canto inferior esquerdo, a configuração está em /org/compiz/profiles/unity/plugins/expo/expo-edge
  2. Também tem espaço de trabalho espalhado no canto inferior direito, a configuração está em /org/compiz/profiles/unity/plugins/scale/initiate-edge

Obrigado pelo Google e pelo workshop sobre código de 2 dias:

#!/usr/bin/env python3
import subprocess

key = "/org/compiz/profiles/unity/plugins/expo/expo-edge" #<-- this is for "show workspaces"
val_on = "'BottomRight'"

def test():
    # read the current setting
    # if one corner is on, other is also on and vice versa, no need to check both
    return subprocess.check_output(["dconf", "read", key]).decode("utf-8").strip() == val_on

currstate = test()

if currstate == True:
    # if currently hotcorners are "on", set it to "''"
    newval = "''"
    othercorner = "''"
else:
    # if currently hotcorners are "off", set it to val_on
    newval = val_on
    othercorner = "'BottomLeft'"

subprocess.Popen(["dconf", "write", key, str(newval)])

# this is for "windows spread"
subprocess.Popen(["dconf", "write", "/org/compiz/profiles/unity/plugins/scale/initiate-edge", str(othercorner)])

Volia, funcionou como um encanto.

Realmente muito obrigado ao @Jacob por me fornecer informações e um script básico porque não tenho idéia do que o dconf faz ou como usar o python. Ainda não. Onde você aprendeu isso de qualquer maneira?

Sério, onde eu aprendo essas coisas?

    
por uniqueID 19.05.2016 / 22:19