Execute scripts / configurações específicas em várias ocasiões (conecte o mouse, conecte a tela, etc.)

2

Tenho certeza de que não sou o único nessa situação: eu uso o Ubuntu 16 no meu laptop e uso isso para conectar-me à minha estação de trabalho no escritório.

Agora, há algumas coisas que preciso fazer todos os dias quando me conecto à minha estação de trabalho, como corrigir a velocidade do meu mouse bluetooth, definir a resolução correta para as duas telas e restaurar meu papel de parede com nitrogênio. Para cada uma dessas tarefas, eu tenho um script (de inicialização) que funciona bem, mas quando eu conecto minha segunda tela, o laptop já é inicializado.

Então, minha pergunta é, ao lado dos aplicativos de inicialização, como eu poderia (por exemplo) executar nitrogen --restore e diminuir a resolução no meu laptop (de 2560x1600 para 1440x900) quando eu conectasse a segunda tela?

O que eu faço agora é rodar todos os scripts separados novamente manualmente, o que não é grande coisa, mas nós não usamos o Ubuntu para aceitar como é, certo? ;)

Para esclarecer; minha pergunta não é muito específica para essas tarefas, mas mais em um sentido geral; como eu poderia disparar qualquer coisa do terminal em ações específicas como "entrada de exibição detectada"?

    
por Alex Timmer 24.11.2016 / 09:23

1 resposta

3

Use um pequeno indicador que adiciona automaticamente seus scripts a um menu

Em vez de criar vários procedimentos de inspeção para cada evento possível que poderia ocorrer, sugiro usar uma solução "um para todos", como abaixo.

O script do indicador adiciona automaticamente seus scripts ao menu do indicador, se você os colocar no mesmo diretório como o indicador. Desta forma, seus scripts de configuração estarão facilmente disponíveis na GUI.

Oindicador

#!/usr/bin/env python3 import subprocess import os import signal import gi gi.require_version('Gtk', '3.0') gi.require_version('AppIndicator3', '0.1') from gi.repository import Gtk, AppIndicator3 currpath = os.path.dirname(os.path.realpath(__file__)) class Indicator(): def __init__(self): self.app = 'update_setting' iconpath = currpath+"/icon.png" self.indicator = AppIndicator3.Indicator.new( self.app, iconpath, AppIndicator3.IndicatorCategory.SYSTEM_SERVICES) self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE) self.indicator.set_menu(self.create_menu()) def getscripts(self): files = [f for f in os.listdir(currpath) if f.endswith(".sh")] for f in files: fpath = os.path.join(currpath, f) subprocess.Popen(["chmod", "+x", fpath]) menuitem = Gtk.MenuItem(f.split(".")[0]) menuitem.connect("activate", self.run_script, fpath) self.menu.append(menuitem) def create_menu(self): self.menu = Gtk.Menu() self.getscripts() # quit item_quit = Gtk.MenuItem('Quit') sep = Gtk.SeparatorMenuItem() self.menu.append(sep) item_quit.connect('activate', self.stop) self.menu.append(item_quit) self.menu.show_all() return self.menu def run_script(self, widget, script): print(script) subprocess.Popen(["/bin/bash", "-c", script]) def stop(self, source): Gtk.main_quit() Indicator() signal.signal(signal.SIGINT, signal.SIG_DFL) Gtk.main()

Como usar

  1. Copie o script em um arquivo vazio, salve-o como showscripts.py
  2. Copie o ícone abaixo (clique com o botão direito - > save), salve-o como (exatamente) icon.png em um único diretório do mesmo script que o script

  3. Paracadaumdosseuscomandosdeconfiguração,crieumscriptpequeno:

    /bin/bashcommand_to_run

    Nomeie-os(semespaços),masuseaextensão.sh.Copieoumovaosscriptsparaamesmapastaemquevocêmantémoscriptdoindicador.

    Agoravocêpodecriarquantositensdemenu(scripts)desejar,

  4. Teste-executeoindicadorpelocomando:

    python3/path/to/showscripts.py
  5. Setudofuncionarbem,adicioneaStartupApplications:Dash>Aplicativosdeinicialização>Adicionar.Adicioneocomando:

    /bin/bash-c"sleep 10 && python3 /path/to/showscripts.py"
    

Explicação

  1. Quando o script é iniciado, ele lista todos os arquivos em seu próprio diretório, procurando arquivos com a extensão .sh . Esses arquivos são executados automaticamente.
  2. Para cada um desses arquivos, o indicador cria um item de menu para executá-lo no menu.

Outras opções?

  1. O mais avançado: escrever regras do udev para ações a serem tomadas em eventos específicos. Esta é também a opção mais complicada. Também não é a opção mais flexível no caso de você querer ou precisar mudar alguma coisa.
  2. Execute um script de segundo plano para verificar se há alterações no hardware conectado. Quanto a configuração de tela , um exemplo pronto para uso está em esta resposta .
  3. Combine seus comandos em um script e execute-o por meio de um atalho de teclado. Adicionar tecla de atalho: escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando para executar o script.

No entanto, eu iria para o menu do indicador. Uma vez configurado, você pode facilmente adicionar, remover ou editar funcionalidades simplesmente movendo pequenos scripts.

    
por Jacob Vlijm 24.11.2016 / 10:51