每次我将外接键盘插入笔记本电脑时,键盘重复和延迟都会设置为默认的慢速。我目前的解决方法是打开键盘设置对话框并稍微移动延迟滑块。这很烦人,而且每天都会发生这种情况,所以我想要一个更好/更快的解决方案。
来自 Karmic 的此错误报告正是发生在我身上的事情,但我在 12.10 上运行 xfce4,而不是在 Karmic 上运行 gnome。
有没有我可以编写的脚本,用于在插入 USB 键盘时重新加载 xfce4 设置?(udev 规则?)
任何有助于解决该问题的帮助都将不胜感激。
答案1
我知道这是一个过时的问题,但它至今仍然存在。例如
https://bugs.launchpad.net/ubuntu/+source/xfce4-settings/+bug/1180120
在 xfce 的开发人员能够解决这个问题之前,这里有一些可用于修复此问题的示例脚本。它适用于单 xfce4 会话类型的情况(涵盖了大多数用户情况),即没有两个或三个同时的 X 会话。
第一个是文件/etc/udev/rules.d/50-external-keyboard.rules
,它在插入时调用另一个脚本特别的USB 键盘(您需要调整 idVendor 和 idProduct 编号):
SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="071d", RUN+="/etc/udev/_Actions/x-keyboard-rates-launcher.sh"
启动器脚本是一个代理启动器,出于安全原因,它将权限降低到用户级别。将其保存为/etc/udev/_Actions/x-keyboard-rates-launcher.sh
并将 X_USER 调整为您的名称:
#!/bin/sh
# Adapted from http://unix.stackexchange.com/questions/65891/how-to-execute-a-shellscript-when-i-plug-in-a-usb-device
# Set DEBUG to something non-null string if we want to debug the script.
DEBUG=
X_USER=wirawan
export DISPLAY=:0
export XAUTHORITY="/home/$X_USER/.Xauthority"
Log () {
if [ -n "$DEBUG" ]; then
echo "$*" >> /tmp/udev_test_action.log
fi
}
Log "$ACTION : $(date)"
if [ "${ACTION}" = "add" ]
then
if [ -n "$DEBUG" ]; then
export
su -c "/bin/sh /etc/udev/_Actions/x-keyboard-rates-user.sh $DISPLAY $X_USER >> /tmp/udev_test_action.$X_USER.log 2> /tmp/udev_test_action.$X_USER.err" $X_USER &
else
su -c "/bin/sh /etc/udev/_Actions/x-keyboard-rates-user.sh $DISPLAY $X_USER > /dev/null 2>&1" $X_USER &
fi
fi
那么这是真正的脚本,它会根据您自己的 xfce 设置重新应用您的键盘参数。将其保存为/etc/udev/_Actions/x-keyboard-rates-user.sh
:
#!/bin/sh
# 20150318
# This script is supposed to run on the user level, not as the root.
if [ -n "$DEBUG" ]; then
set -x
fi
X_USER=${2:-wirawan}
export DISPLAY=${1:-:0}
export XAUTHORITY=${3:-/home/$X_USER/.Xauthority}
is_x_running () {
# Detects whether the X server is up and running on the
# given display
xdpyinfo > /dev/null 2>&1
}
is_user_session_up () {
# Detects whether the X session of interest is up
pgrep xfce4-session -u $X_USER > /dev/null 2>&1
}
get_keyboard_settings () {
/usr/bin/xfconf-query -c keyboards -p /Default/KeyRepeat/Delay \
&& /usr/bin/xfconf-query -c keyboards -p /Default/KeyRepeat/Rate
}
apply_keyboard_settings () {
if [ $# -eq 2 ]; then
/usr/bin/xset r rate $1 $2
else
return 2
fi
}
Log () {
if [ -n "$DEBUG" ]; then
echo "$*"
fi
}
Log "$ACTION :user: $(date)"
if [ "${ACTION}" = "add" ]
then
sleep 1s
if is_x_running; then
if is_user_session_up; then
KB_SETTINGS=$(get_keyboard_settings) || {
Log "Error: cannot get keyboard settings"
exit 1
}
apply_keyboard_settings $KB_SETTINGS || {
Log "Error: cannot apply keyboard settings"
exit 1
}
else
Log "Warning: target user session is not up; quitting"
fi
else
Log "Warning: X is not running; quitting"
fi
fi
祝你好运!
威拉万