Где поставить конфигурацию X11 (XQuartz) на OS X?

2208
Lenar Hoyt

Я пытаюсь установить частоту повторения клавиш на другое значение, используя 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
Thomas Dickey

A recent mailing-list item gives a clue (Re: Newbie: XQuartz installation for FontForge questions):

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

and a little checking shows that if you put a script whose name suffixed ".sh" into your ~/.xinitrc.d directory, you can put X commands (such as xset) there. Be sure to end the commands with & (to detach).

For example, your quick.sh script might look like this:

xset r rate 10 & 

However (noting comment), it is a little more involved than that. Xquartz resets the keyboard rate after running the scripts in /.xinitrc. Possibly this is related to a bug report resolved by making Xquartz match the system preferences.

As a workaround, you could make the quick.sh call a more complicated script:

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

and (putting the new script in the same directory for convenience), the contents of rapid-keyboard could be like this:

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

The script logs its changes (not really needed except for demonstration purposes), and waits for Xquartz to change the settings again. In testing it, I see the settings change twice, during initialization, but not afterwards.

Скрипты в ~ / .xinitrc.d игнорируются. Возможно, настройки перезаписываются при запуске xterm или что-то подобное? Lenar Hoyt 8 лет назад 0
Он должен быть исполняемым, и имя имеет значение (я проверял это, прежде чем ответить, используя El Capitan с XQuartz 2.7.8). Однако я также игнорирую первый xterm, закрывая его, и запускаю тот, который скомпилировал сам - порядок может иметь значение (если скрипт xinitrc запускается после запуска xterm). Thomas Dickey 8 лет назад 0
Я установил скрипт в ~ / .xinitrc.d / keyboard.sh для кода разрешения 755. Разве это не должно работать? Lenar Hoyt 8 лет назад 0
Может ли быть так, что сервер X11 продолжает работать в фоновом режиме, так что простое завершение и перезапуск XQuarts.app не перезагрузит файлы конфигурации? Это кажется маловероятным, поскольку наличие файла .initrc вызывает цикл сбоя. Lenar Hoyt 8 лет назад 0
Я вижу (вновь). Сценарий вызывается, но что-то в XQuartz следует и сбрасывает его. По словам pstree, xterm уже запущен. Посмотрим позже. Thomas Dickey 8 лет назад 0
Интересно, что я читал в другом месте, что `xset` должен установить его раз и навсегда. Не уверен, что это правда, но на моей машине это не так. Когда я закрываю и снова открываю XQuartz.app, он просто возвращается к старым настройкам повтора ключа. Lenar Hoyt 8 лет назад 0
Потрясающие. Оно работает. Должен ли я сообщить об ошибке куда-нибудь? Lenar Hoyt 8 лет назад 0
Вы можете [здесь] (https://bugs.freedesktop.org/enter_bug.cgi?product=XQuartz&component=New%20Bugs). Thomas Dickey 8 лет назад 0