Я пытаюсь загрузить новую раскладку клавиатуры, когда я включаю клавиатуру usb, но мое правило udev не работает.
SUBSYSTEM=="input", ATTR{idVendor}=="062a", ATTR{idProduct}=="0201", GOTO="usb_xmodmap_auto" LABEL="usb_xmodmap_auto" ACTION=="add", RUN+="/usr/bin/xmodmap ~/.usbXmodmap" ACTION=="remove", RUN+="/usr/bin/xmodmap ~/.pndXmodmap"
Я перезагрузил использование правил:
>sudo udevadm control --reload-rules
и путем перезапуска системы, но когда я включаю usb, вводят с клавиатуры orginal xmodmap, все еще загружается, и таким образом раскладка клавиатуры неправильная, но если я выполняю команду в терминале
>/usr/bin/xmodmap ~/.usbXmodmapили
>/usr/bin/xmodmap ~/.pndXmodmap
они работают просто великолепно.
надежда soneone может помочь.
Править:
только для помощи больше я запустил некоторые udevadm тесты:
>udevadm test --action=add /devices/platform/ehci-omap.0/usb1/1-2/1-2.3/1-2.3:1.1/input/input10
выводы:
run_command: calling: test udevadm_test: version 151 This program is for debugging only, it does not run any program, specified by a RUN key. It may show incorrect results, because some values may be different, or not available at a simulation run. [...] parse_file: reading '/etc/udev/rules.d/usb-keyboard.rules' as rules file udev_rules_new: rules use 100572 bytes tokens (8381 * 12 bytes), 21523 bytes buffer udev_rules_new: temporary index used 35380 bytes (1769 * 20 bytes) udev_device_new_from_syspath: device 0x3b4d8 has devpath '/devices/platform/ehci-omap.0/usb1/1-2/1-2.3/1-2.3:1.1/input/input10' udev_rules_apply_to_event: RUN '/sbin/modprobe -b $env{MODALIAS}' /etc/udev/rules.d/80-drivers.rules:5 udev_rules_apply_to_event: RUN 'socket:@/org/freedesktop/hal/udev_event' /etc/udev/rules.d/90-hal.rules:2 udev_rules_apply_to_event: RUN '/sbin/modprobe $env{MODALIAS}' /etc/udev/rules.d/local.rules:31 udev_rules_apply_to_event: RUN 'socket:/org/kernel/udev/monitor' /etc/udev/rules.d/run.rules:2 udev_rules_apply_to_event: RUN '/usr/bin/xmodmap ~/.usbXmodmap' /etc/udev/rules.d/usb-keyboard.rules:4 udevadm_test: UDEV_LOG=6 udevadm_test: DEVPATH=/devices/platform/ehci-omap.0/usb1/1-2/1-2.3/1-2.3:1.1/input/input10 udevadm_test: PRODUCT=3/62a/201/110 udevadm_test: NAME="USB-compliant keyboard" udevadm_test: PHYS="usb-ehci-omap.0-2.3/input1" udevadm_test: UNIQ="" udevadm_test: EV==1f udevadm_test: KEY==837fff 2c3027 bf004444 0 0 1fe3 c04 a27c000 267bfa d941dfed 9e0000 0 0 0 udevadm_test: REL==143 udevadm_test: ABS==1 0 udevadm_test: MSC==10 udevadm_test: MODALIAS=input:b0003v062Ap0201e0110-e0,1,2,3,4,k71,72,73,74,77,80,82,83,85,86,87,88,89,8A,8B,8C,8E,8F,90,96,98,9B,9C,9E,9F,A1,A3,A4,A5,A6,A7,A8,A9,AB,AC,AD,AE,B1,B2,B5,CE,CF,D0,D1,D2,D5,D9,DB,E2,EA,EB,100,101,105,106,107,108,109,10A,10B,10C,162,166,16A,16E,178,179,17A,17B,17C,17D,17F,180,181,182,185,18C,18D,192,193,195,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA,1AB,1AC,1AD,1AE,1B0,1B1,1B7,r0,1,6,8,a20,m4,lsfw udevadm_test: ACTION=add udevadm_test: SUBSYSTEM=input udevadm_test: run: '/sbin/modprobe -b input:b0003v062Ap0201e0110-e0,1,2,3,4,k71,72,73,74,77,80,82,83,85,86,87,88,89,8A,8B,8C,8E,8F,90,96,98,9B,9C,9E,9F,A1,A3,A4,A5,A6,A7,A8,A9,AB,AC,AD,AE,B1,B2,B5,CE,CF,D0,D1,D2,D5,D9,DB,E2,EA,EB,100,101,105,106,107,108,109,10A,10B,10C,162,166,16A,16E,178,179,17A,17B,17C,17D,17F,180,181,182,185,18C,18D,192,193,195,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA,1AB,1AC,1AD,1AE,1B0,1B1,1B7,r0,1,6,8,a20,m4,lsfw' udevadm_test: run: 'socket:@/org/freedesktop/hal/udev_event' udevadm_test: run: '/sbin/modprobe input:b0003v062Ap0201e0110-e0,1,2,3,4,k71,72,73,74,77,80,82,83,85,86,87,88,89,8A,8B,8C,8E,8F,90,96,98,9B,9C,9E,9F,A1,A3,A4,A5,A6,A7,A8,A9,AB,AC,AD,AE,B1,B2,B5,CE,CF,D0,D1,D2,D5,D9,DB,E2,EA,EB,100,101,105,106,107,108,109,10A,10B,10C,162,166,16A,16E,178,179,17A,17B,17C,17D,17F,180,181,182,185,18C,18D,192,193,195,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA,1AB,1AC,1AD,1AE,1B0,1B1,1B7,r0,1,6,8,a20,m4,lsfw' udevadm_test: run: 'socket:/org/kernel/udev/monitor' udevadm_test: run: '/usr/bin/xmodmap ~/.usbXmodmap'
и
>udevadm test --action=remove /devices/platform/ehci-omap.0/usb1/1-2/1-2.3/1-2.3:1.1/input/input10
выводы:
run_command: calling: test udevadm_test: version 151 This program is for debugging only, it does not run any program, specified by a RUN key. It may show incorrect results, because some values may be different, or not available at a simulation run. [...] parse_file: reading '/etc/udev/rules.d/usb-keyboard.rules' as rules file udev_rules_new: rules use 100572 bytes tokens (8381 * 12 bytes), 21523 bytes buffer udev_rules_new: temporary index used 35380 bytes (1769 * 20 bytes) udev_device_new_from_syspath: device 0x3b4d8 has devpath '/devices/platform/ehci-omap.0/usb1/1-2/1-2.3/1-2.3:1.1/input/input10' udev_rules_apply_to_event: RUN 'socket:@/org/freedesktop/hal/udev_event' /etc/udev/rules.d/90-hal.rules:2 udev_rules_apply_to_event: RUN 'socket:/org/kernel/udev/monitor' /etc/udev/rules.d/run.rules:2 udev_rules_apply_to_event: RUN '/usr/bin/xmodmap ~/.pndXmodmap' /etc/udev/rules.d/usb-keyboard.rules:5 udevadm_test: UDEV_LOG=6 udevadm_test: DEVPATH=/devices/platform/ehci-omap.0/usb1/1-2/1-2.3/1-2.3:1.1/input/input10 udevadm_test: PRODUCT=3/62a/201/110 udevadm_test: NAME="USB-compliant keyboard" udevadm_test: PHYS="usb-ehci-omap.0-2.3/input1" udevadm_test: UNIQ="" udevadm_test: EV==1f udevadm_test: KEY==837fff 2c3027 bf004444 0 0 1fe3 c04 a27c000 267bfa d941dfed 9e0000 0 0 0 udevadm_test: REL==143 udevadm_test: ABS==1 0 udevadm_test: MSC==10 udevadm_test: MODALIAS=input:b0003v062Ap0201e0110-e0,1,2,3,4,k71,72,73,74,77,80,82,83,85,86,87,88,89,8A,8B,8C,8E,8F,90,96,98,9B,9C,9E,9F,A1,A3,A4,A5,A6,A7,A8,A9,AB,AC,AD,AE,B1,B2,B5,CE,CF,D0,D1,D2,D5,D9,DB,E2,EA,EB,100,101,105,106,107,108,109,10A,10B,10C,162,166,16A,16E,178,179,17A,17B,17C,17D,17F,180,181,182,185,18C,18D,192,193,195,1A0,1A1,1A2,1A3,1A4,1A5,1A6,1A7,1A8,1A9,1AA,1AB,1AC,1AD,1AE,1B0,1B1,1B7,r0,1,6,8,a20,m4,lsfw udevadm_test: ACTION=remove udevadm_test: SUBSYSTEM=input udevadm_test: run: 'socket:@/org/freedesktop/hal/udev_event' udevadm_test: run: 'socket:/org/kernel/udev/monitor' udevadm_test: run: '/usr/bin/xmodmap ~/.pndXmodmap'
который, кажется, показывает, что это должно работать, но это не надеется, что это помогает получить ответ.
При выполнении GNOME затем, необходимо будет отключить его плагин управления клавиатурой так, чтобы он не переопределял изменения макета.
gconftool-2 --toggle /apps/gnome_settings_daemon/plugins/keyboard/active
Выполните ту же команду снова для включения его, как желаемый.
Это не работает потому что udev
и xmodmap
не имейте доступа к своему дисплею X11.Действительно, udev
даже не знает, существуют ли активные дисплеи X11.
Для ответа на вопрос о доступе к рабочему дисплею можно экспортировать соответствующую переменную ДИСПЛЕЯ в сценарии, предположив, что полномочия для дисплея правильно установлены. (man xset
для полномочий дисплея.)
Во многих обычных случаях Вы можете просто export DISPLAY=:0
для команды, поскольку это - первый дисплей в системе отдельного пользователя. Является, вероятно, самым легким запустить скрипт, а не xmodmap непосредственно, поскольку это позволит Вам иметь больше контроля над переменными среды и остальными. (Так заменяют "/usr/bin/xmodmap ~/.usbXmodmap" в Вашем правиле с "/usr/local/bin/keyboard_plug.sh" и помещенный соответствующие команды в том сценарии наряду с переменной ДИСПЛЕЯ.)
Как отмечено выше, тем не менее, если Вы принимаете ДИСПЛЕЙ =:0 затем, Вы могли бы столкнуться с проблемами позже, если у Вас есть многочисленные пользователи или дисплеи. Можно записать сценарии для обнаружения соответствующего дисплея, но в этом случае Вы самостоятельно (что касается этого ответа).:)