Qual é a maneira mais eficiente de CPU para garantir que o NumLock esteja ativado?

2

Situação: Eu tenho um script observando o status NumLock, bem, não assistindo, mas ligando a cada 1 segundo. O script está sendo executado em segundo plano.

Raciocínio: muitas vezes eu acidentalmente desativo o NumLock. E eu não tenho nenhum indicador do status NumLock no teclado.

SO, DE, DM, WM, xmodmap :

Sistema operacional :

$ lsb_release -a

No LSB modules are available.
Distributor ID: LinuxMint
Description:    Linux Mint 18 Sarah
Release:    18
Codename:   sarah

Ambiente da área de trabalho :

echo $DESKTOP_SESSION

cinnamon

Gerenciador de exibição :

cat /etc/X11/default-display-manager

/usr/sbin/mdm

Gerenciador de janelas :

wmctrl -m | head -n 1

Name: Mutter (Muffin)

xmodmap :

xmodmap -pm

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

Meu script original de Bash segue:

#!/bin/bash

while true
do

  numlockx on

  sleep 1s

done

Como você pode ver, o script não se importa com o status atual do NumLock. Apenas continua ligando.

Objetivo: Eu gostaria de tornar o script pelo menos um pouco eficiente CPU .

Pergunta: Qual é a maneira mais eficiente de CPU garantir que o NumLock esteja ativado no Linux (Mint 18)?

    
por Vlastimil 07.08.2016 / 11:11

3 respostas

2

Encontramos a solução em Revisão de código :

setxkbmap -option numpad:mac

Até agora, não vejo nenhum enfraquecimento dos meus principais mapeamentos.

    
por 23.11.2016 / 09:25
2

Não, não é eficiente. O problema é que o custo de consultar o estado NumLock é o mesmo que o custo de definir o estado NumLock. Então, você apenas dobra a carga se tentar consultar o estado antes de defini-lo.

Você poderia melhorar um pouco escrevendo código C compilado, já que evitaria os custos de fork / exec e de interpretação, mas ainda assim seria um hack horrível.

O que você poderia fazer em vez disso, é ativar o NumLock e, em seguida, desabilitar a tecla NumLock (ou até mesmo ignorar seu estado, se tudo o que você quiser é um teclado numérico sempre numérico).

Veja esta postagem do SuperUser para detalhes sobre como fazer isso com xmodmap (1) .

    
por 07.08.2016 / 13:01
0

A maneira mais eficiente de usar a CPU é simplesmente desabilitar NumLock usando xmodmap , então você não precisa pesquisar o status NumLock . Em outras palavras, o tempo gasto da CPU é zero. Isso pode ser feito com

xmodmap -e "remove mod2 = Num_Lock"

e se você quiser usá-lo novamente, ligue-o com

xmodmap -e "add mod2 = Num_Lock"

Como alternativa, crie um arquivo ~/.Xmodmap com uma linha semelhante e certifique-se de que sua inicialização do X leia esse arquivo (alguns ambientes de desktop modernos não o fazem).

Veja man xmodmap para detalhes.

    
por 23.11.2016 / 07:44