在 OS X 上将 X11(XQuartz)配置放在哪里?

在 OS X 上将 X11(XQuartz)配置放在哪里?

我正在尝试使用 将按键重复率设置为不同的值xset r rate 280 50。我尝试将此配置语句添加到各种配置文件(~/.zprofile、、 ),但当我尝试启动 XQuartz.app 时,它总是导致无限崩溃循环。如果我删除配置文件并直接在 xterm 中使用该语句,~/.xinitrc它就~/.zlogin可以正常工作。xset

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

答案1

最近的邮件列表提供了一条线索(回复:新手: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 再次更改设置。在测试中,我看到设置在初始化期间更改了两次,但之后没有更改。

相关内容