Como vincular hotkeys globais a um programa WINE no Linux
Você já instalou um programa do Windows no Linux no WINE, apenas para descobrir que ele não liga mais as teclas de atalho do sistema? HTG tem o trabalho que você está procurando.
Imagem por djeucalipto
visão global
Qualquer um que tenha pensado na ideia de mudar para o Linux, provavelmente encontrou muito rapidamente o problema de que há este aplicativo do Windows que você PRECISA para funcionar. Nós já mostramos que você pode fazer isso usando WINE.
Para este escritor, o aplicativo era um aplicativo Text-To-Speech que utiliza o mecanismo Microsoft SAPI4. Instalar o programa em WINE foi muito fácil, mas após a conclusão eu descobri rapidamente que as teclas de atalho usadas para acionar as várias ações do programa (iniciar a leitura, parar de ler, etc ') não funcionavam e que isso é um problema conhecido. problema com o vinho.
Fico feliz em dizer que depois de muitas pesquisas, finalmente encontrei a solução na forma de um utilitário GNU que pode manipular a interface do X.org usando funções nativas. Embora não seja o único de seu tipo, o xdotool é o mais fácil de se trabalhar e já estava nos repositórios do Ubuntu / Mint.
xdotool
O programa xdotool pode fazer muitas tarefas relacionadas à janela a partir do CLI, com isso dito, os únicos dois que vamos utilizar são “pesquisa” e “chave”. A função "pesquisa" faz exatamente isso, procura por um ID de janela de acordo com os parâmetros que você definiu para ele. A função "chave" permite simular um toque de tecla para um ID de janela.
Instalação e configuração
Presume-se que você já tenha instalado o WINE e o programa que você precisa sob ele. Neste exemplo, usaremos Balabolka como o aplicativo “Windows”, pois é uma boa réplica do programa original que eu precisava para essa solução (2º centro de fala).
Se você optou por usar Balabolka também, você precisa ativar sua habilidade de teclas de atalho.
Nota: Você pode querer instalar o TTSReader ou o segundo centro de fala mesmo no modo de demonstração, para que as vozes do SAPI sejam instaladas.
Abra o programa e vá para as configurações (Shift + F6) em "Opções" -> "Configurações".
Vá para a guia de teclas de atalho e marque a caixa de seleção "Usar teclas de atalho globais".
Clique OK.
Deixá-lo funcionando em segundo plano para que ele possa fazer o seu trabalho quando ligarmos as teclas a ele.
Instale o xdotool emitindo:
sudo apt-get install xdotool
Ligação global
O programa xdotool por si só não nos ajuda a nos ligar globalmente às teclas de atalho, mas podemos usar o sistema de atalho do sistema operacional já existente. O que faremos é criar um script simples que utilize o xdotool para enviar as teclas que desejamos para o programa Balabolka e chamá-lo do sistema de teclas de atalho do sistema operacional..
Crie um script chamado “start_read.sh” com o seguinte conteúdo:
chave xdotool --window $ (busca xdotool --limit 1 --all --pid $ (pgrep balabolka) --nome Balabolka) "ctrl + alt + F9"
Crie outro script dessa vez chamado “stop_read.sh” com o seguinte conteúdo:
chave xdotool --window $ (xdotool search --limit 1 --todos --pid $ (pgrep balabolka) --name Balabolka) "ctrl + alt + F7"
Nota: Eu sei que este é um liner que não requer um script, mas o programa “Atalhos de teclado” do Mint / Ubuntu, não estava cooperando apenas com invocá-lo diretamente. Se você sabe como fazer isso, por favor, compartilhe nos comentários abaixo.
Travando este comando para seus componentes, o que vemos é:
- A parte “-pid $ (pgrep balabolka)”, executa um “pgrep” no programa que queremos usar para determinar seu ID de processo. Isto irá restringir o xdotool arquivado de “pesquisa” para apenas aquele PID.
- A parte “xdotool search -limit 1 -all… -name Balabolka”, restringe ainda mais o campo de pesquisa do xdotool e limita as respostas retornadas a 1. Como no nosso caso, não importa qual dos IDs de janela retornados do programa, limitando o resultado atua como um formatador para o comando “chave”. Você pode achar que precisa massagear essa parte mais se isso importa para o programa que você está usando.
- A parte “xdotool key -window% WINDOW_ID%“ ctrl + alt + F7 ””, envia o pressionamento de tecla desejado para o windowID que foi obtido pelas partes anteriores.
Torne os scripts executáveis.
Teclado Linux Mint atalhos
No Linux Mint, as teclas de atalho globais são definidas no programa "Atalhos de teclado".
Depois de aberto Clique em "Adicionar" para criar um novo atalho personalizado:
Dê um nome e, em "Comando", dê o caminho completo para um dos scripts que criamos acima. Repita o processo para o segundo script.
Agora, na coluna "Atalhos", clique na palavra "Desativado" para obter a opção de definir uma nova combinação de teclas.
Nota: Você pode, se desejar, usar algo diferente do padrão do programa. De certo modo, criar um “remapeamento” para as combinações de teclas que, dependendo do programa que você usa, de outra forma estaria fora de seu controle.
Bata no combo que você selecionou e ouça a magia.
Teclado Ubuntu
No Ubuntu, o programa que define as teclas de atalho globais é chamado de "teclado".
Mude para o separador "Atalhos" e selecione "Atalhos personalizados".
Clique no sinal de mais para adicionar um atalho. Dê um nome e, em "Comando", dê o caminho completo para um dos scripts que criamos acima. Repita o processo para o segundo script.
Agora clique na palavra "Disabled" para obter a opção de definir uma nova combinação de teclas.
Nota: Repetindo a nota da seção Mint, você pode, se desejar, usar algo diferente do padrão do programa. De certo modo, criar um “remapeamento” para as combinações de teclas que, dependendo do programa que você usa, de outra forma estaria fora de seu controle.
Notas do autor
Toda vez que eu considerei seriamente mudar para o Linux, essa questão foi a primeira na minha lista de problemas. Não é que o Linux não tenha problemas, mas esse foi o verdadeiro obstáculo para mim. Eu tentei uma e outra vez, perguntei aos amigos / pessoas no campo e até fiz uma recompensa… Eu estou feliz que esta saga acabou e que a minha alma pode finalmente descansar.
É minha esperança que eu ajudei alguém lá fora a não ter que passar pelo mesmo calvário.
Doc Brown: Demorei quase trinta anos e toda a minha fortuna familiar para realizar a visão daquele dia. Meu Deus, tem sido tanto tempo?