Meu problema atual é que: no teclado do meu laptop Acer Nitro, há uma tecla Nitro - que é uma tecla especial que nenhuma outra marca de laptop possui. Você vê na imagem abaixo que há uma tecla N estranha ao lado da tecla de retrocesso - essa é a tecla Nitro.
Eu quero desenvolver um aplicativo GUI de forma que sempre que o botão Nitro for pressionado, meu aplicativo apareça. Estou usando o Ubuntu 22.04.
Pelo que descobri, acho que teria que escrever um LKM para capturar o evento de pressionamento de tecla Nitro e iniciar o aplicativo a partir daí. Estou seguindo a resposta aqui ( https://stackoverflow.com/questions/33836541/linux-kernel-how-to-capture-a-key-press-and-replace-it-with-another-key ) para capturar o evento de pressionamento de tecla.
Gostaria de saber se não há problema em iniciar um aplicativo GTK dentro do LKM - em outras palavras, colocando o código de exemplo aqui ( https://www.gtk.org/docs/getting-started/hello-world ) no meu código do módulo do kernel . Além disso, me pergunto se estou no caminho certo para alcançar meu objetivo.
Desde já, obrigado!
[UPD] Esclarecimento sobre o que eu quero: os laptops Acer Nitro geralmente têm um aplicativo chamado Nitrosense que fornece uma GUI para alterar a cor do teclado e a velocidade do ventilador. A tecla Nitro quando pressionada mostra aos usuários a GUI. No entanto, o aplicativo Nitrosense é apenas para Windows - quero escrever a mesma coisa para o Ubuntu. Até agora, encontrei vários repositórios sobre como alterar a cor do teclado e a velocidade do ventilador, mas não há repositório para um aplicativo que abre quando pressiono a tecla Nitro, então quero construir tal coisa. Estou usando o GNOME 42 no Ubuntu 22.04. O que eu quero é sempre que o usuário (já logado) pressionar a tecla Nitro, uma GUI mostra automaticamente para eu fazer coisas.
[UPD2] Também encontrei este repositório https://github.com/kphanipavan/PredatorNonSense que parece tentar fazer a mesma coisa que minha preocupação em outra marca Acer. Acho que pode ser útil, vamos ver.
[UPD3] Aqui está o evento que encontrei quando useievtest
No entanto, quando tentei xev
, não havia nada impresso, o que me faz pensar que o X Server não reconhece o evento de pressionamento de tecla Nitro. Acho que devo procurar documentação para escrever um módulo para enviar o evento de chave Nitro para o X Server?
Tentei acessar as configurações do teclado no GNOME Control Center para tentar adicionar um atalho de teclado, mas também não reconheceu a tecla Nitro - talvez porque o GNOME esteja sendo executado no X Server e o X Server não reconheça o evento da tecla Nitro?
Eu também olhei para o repositório que mencionei no UPD2, então o que o autor fez também foi pesquisar continuamente grep
o log de evtest
para ver se a tecla foi pressionada - confira este comando shell https://github.com/kphanipavan/PredatorNonSense/blob /master/PNS.sh .
O que eu acho que também posso fazer é escrever um serviço systemd simples para pesquisar o arquivo do dispositivo de teclado e verificar se o Nitro está pressionado. No entanto, menciona-se que isso pode desperdiçar muitos recursos. Alguma sugestão sobre isso?
Então você precisa expor o botão Nitro, por exemplo, como um evento de camada de entrada do kernel. Em seguida, algum aplicativo de espaço do usuário pode agir sobre ele e iniciar seu aplicativo de interface do usuário.
Lembre-se que o Linux é multiusuário, o sistema é projetado para uma situação onde você tem uma única máquina e dezenas de pessoas usando uma GUI com contas diferentes. Então você não pode simplesmente "iniciar um aplicativo", você precisa encontrar o usuário certo. Mas o kernel é independente do usuário.
Isso significa que algo para esse usuário em particular precisa agir sobre isso. O lugar mais simples para colocar isso é a configuração do Window Manager para esse usuário específico (que seria você, suponho).
Não está bem, e não vai funcionar.
Recursos:
Use
evtest
para ver se o Nitrojá produz um evento de pressionamento de tecla. Se isso acontecer, você não precisa escrever um módulo do kernel. Em seguida, usexev
para ver se já foi traduzido em um evento X.Se não produzir um evento de pressionamento de tecla, a busca pelo evento real ficará interessante...
Por fim, descubra qual gerenciador de janelas sua área de trabalho usa, depois pesquise no Google a documentação do seu gerenciador de janelas e descubra como iniciar programas para um determinado pressionamento de tecla.
(BTW, geralmente é melhor apenas colar o texto recuado por quatro espaços em branco em vez de uma imagem)
Então esse é um evento comum de pressionamento e liberação de teclas para o código 425
KEY_PRESENTATION
.Se você quiser criar seu próprio layout de teclado que mapeie esse código para um keysym X, recomendo a leitura de An Unreliable Guide to XKB Configuration (2004) . Copie um layout existente com um novo nome e modifique-o, assim você não o perderá quando os pacotes do sistema forem atualizados.
Se você quiser que um pequeno programa de espaço do usuário escute essa chave, escolha uma linguagem com uma biblioteca para a camada de entrada do kernel, por exemplo, Python . Certifique-se de usar o link simbólico
/dev/input/by-path/...
que corresponde ao seu teclado, os/dev/input/eventX
números não são estáveis nas botas.Considerando que seu sistema provavelmente já está configurado para gerenciamento térmico (através do daemon ACPI Thermald ou então), eu definitivamente não tentaria brincar com as velocidades do ventilador nas costas.
Em relação à capacidade de alterar a cor do teclado, você está correto ao escrever que isso só pode ser feito através de algum driver de dispositivo apropriado.
Seu teclado (algum dispositivo compatível com HID quase certamente) deve necessariamente expor ao kernel algum dispositivo de saída (diferente do dispositivo de entrada associado à transmissão das teclas do teclado) que precisa ser tratado adequadamente se desejar enviar qualquer ordem para o seu teclado)
Você pode se inspirar na luz de fundo do teclado Acer Gaming RGB e no módulo de kernel Linux no modo Turbo
Isso deve basicamente visar a expor os controles na árvore /sys/devices.
A maneira como você pode agir nesses controles depende de você na área do usuário, desde ecoar ousadamente aos controles /sys/devices até a concepção de qualquer widget gtk.
Ter isso ativado usando qualquer tecla do teclado (incluindo sua tecla Nitro especial) sendo um problema simples de mapeamento de teclado que seu DE pode ser capaz de lidar com as configurações básicas do sistema.