Каждый раз, когда я подключаю внешнюю клавиатуру к своему ноутбуку, повтор клавиатуры и задержка устанавливаются по умолчанию. Мой текущий способ - открыть диалоговое окно настроек клавиатуры и слегка переместить ползунок задержки. Это раздражает и случается со мной каждый день, поэтому я хотел бы найти лучшее / более быстрое решение.
Этот отчет об ошибке от Karmic именно то, что происходит со мной, но я запускаю xfce4 12.10, а не gnome на Karmic.
Можно ли написать скрипт для перезагрузки настроек xfce4 при каждом подключении USB-клавиатуры? (Правило udev?)
Любая помощь в решении этой проблемы приветствуется.
Я знаю, что это - датированная проблема, но она ВСЕ ЕЩЕ существует до сегодня. Посмотрите, например.
https://bugs.launchpad.net/ubuntu / + source/xfce4-settings / + ошибка/1180120
Пока xfce парни не могут получить это прямо, вот некоторые демонстрационные сценарии, которые могли использоваться для решения проблемы. Это относится к single-xfce4-session виду ситуаций (который покрывает большинство пользовательского случая), т.е. никакие два или три одновременных 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
Удачи!
Wirawan