Onde colocar a configuração do X11 (XQuartz) no OS X?

1

Estou tentando definir a taxa de repetição de chave para um valor diferente usando xset r rate 280 50 . Eu tentei adicionar essa declaração de configuração a vários arquivos de configuração ( ~/.zprofile , ~/.xinitrc , ~/.zlogin ), mas sempre resultou em ciclos de falha infinitos quando tentei iniciar o XQuartz.app. Ele funciona bem se eu remover os arquivos de configuração e usar a instrução xset no xterm diretamente.

XQuartz 2.7.8 (xorg-server 1.16.4)
OS X 10.11.1 (15B42)
    
por Lenar Hoyt 28.11.2015 / 13:29

1 resposta

2

Um item recente da lista de discussão dá uma pista ( Re: Newbie: XQuartz instalação para perguntas FontForge ):

I suggest you just move it aside. If you want to do things, drop scripts into ~/.xinitrc.d and set them executable.

e uma pequena verificação mostra que se você colocar um script cujo nome tenha o sufixo ".sh" no diretório ~/.xinitrc.d , poderá colocar comandos X (como xset ) nele. Certifique-se de terminar os comandos com & (para desanexar).

Por exemplo, seu script quick.sh pode ter esta aparência:

xset r rate 10 &

No entanto (notando comentário), é um pouco mais envolvido do que isso. O Xquartz redefine a taxa de teclado após executando os scripts em /.xinitrc . Possivelmente, isso está relacionado a um relatório de erros resolvido fazendo Xquartz corresponder ao preferências do sistema.

Como solução alternativa, você pode fazer com que o quick.sh chame um script mais complicado:

pkill -9 rapid-keyboard
$HOME/.xinitrc.d/rapid-keyboard &

e (colocando o novo script no mesmo diretório por conveniência), o conteúdo de rapid-keyboard poderia ser assim:

#!/bin/sh
export PATH=\
/usr/bin:\
/bin:\
/opt/X11/bin

getvalue() {
    value=$(xset q |\
            fgrep "$2" |\
            sed -e 's/^.*'"$2"':[[:space:]]*//' -e 's/[[:space:]].*//')
    [ -z "$value" ] && value="not set"
    eval $1=$value
}

WANT_RATE=50
WANT_DELAY=280
LOGFILE=/tmp/rapid-keyboard.log
rm -f $LOGFILE

while :
do
    X11_PID=$(pgrep Xquartz)
    if [ -n "$X11_PID" ]
    then
            getvalue XSET_RATE "repeat rate"
            getvalue XSET_DELAY "repeat delay"
            if [ "x$XSET_RATE"  != "x$WANT_RATE" ]
            then
                    echo "** rate was $XSET_RATE at $(date)" >>$LOGFILE
                    xset r rate $WANT_DELAY $WANT_RATE
            elif [ "x$XSET_DELAY" != "x$WANT_DELAY" ]
            then
                    echo "** delay was $XSET_RATE at $(date)" >>$LOGFILE
                    xset r rate $WANT_DELAY $WANT_RATE
            fi
    fi
    sleep 1
done

O script registra suas alterações (não são realmente necessárias, exceto para fins de demonstração) e aguarda que o Xquartz altere as configurações novamente. Ao testá-lo, vejo as configurações mudarem duas vezes, durante a inicialização, mas não depois.

    
por 28.11.2015 / 18:10