1

Я пытаюсь установить частоту повторения клавиш на другое значение, используя xset r rate 280 50 . Я пытался добавить этот оператор конфигурации в различные файлы конфигурации (~/.zprofile , ~/.xinitrc , ~/.zlogin), но он всегда приводил к бесконечным циклам сбоя при попытке запустить XQuartz.app. Это работает нормально, если я удаляю файлы конфигурации и вместо этого использую инструкцию xset в xterm.

XQuartz 2.7.8 (xorg-server 1.16.4)
OS X 10.11.1 (15B42)

1 ответ1

2

Недавний элемент списка рассылки дает подсказку (Re: Newbie: XQuartz установка для вопросов FontForge):

Я предлагаю вам просто отодвинуть его в сторону. Если вы хотите что-то сделать, поместите скрипты в ~/.xinitrc.d и установите их исполняемыми.

и небольшая проверка показывает, что если вы поместите скрипт с суффиксом «.sh» в свой каталог ~/.xinitrc.d , вы можете поместить туда команды X (например, xset). Обязательно заканчивайте команды символом & (для отсоединения).

Например, ваш скрипт quick.sh может выглядеть так:

xset r rate 10 &

Однако (отмечая комментарий), это немного более сложно, чем это. Xquartz сбрасывает скорость клавиатуры после запуска скриптов в /.xinitrc . Возможно, это связано с сообщением об ошибке, разрешенным путем настройки Xquartz на системные настройки.

В качестве обходного пути вы можете сделать вызов quick.sh более сложным сценарием:

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

и (поместив новый скрипт в тот же каталог для удобства), содержимое rapid-keyboard может выглядеть следующим образом:

#!/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

Сценарий регистрирует свои изменения (на самом деле не нужны, за исключением демонстрационных целей) и ждет, пока Xquartz снова изменит настройки. При тестировании я вижу, что настройки меняются дважды, во время инициализации, но не после.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .