在 Ubuntu 12.10 xfce 中插入 USB 键盘时,键盘重复/延迟被重置

在 Ubuntu 12.10 xfce 中插入 USB 键盘时,键盘重复/延迟被重置

每次我将外接键盘插入笔记本电脑时,键盘重复和延迟都会设置为默认的慢速。我目前的解决方法是打开键盘设置对话框并稍微移动延迟滑块。这很烦人,而且每天都会发生这种情况,所以我想要一个更好/更快的解决方案。

来自 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

祝你好运!

威拉万

相关内容