我在办公桌前使用采用美国替代国际(以前的美国国际)布局的笔记本电脑和采用巴西布局的 USB Microsoft Curve 键盘。
我希望当检测到 USB 键盘时自动切换布局,而不是每次离开办公桌时手动进入首选项。ubuntu 9.04 中有这样的方法吗?
答案1
该解决方案有三个组件可让您交换键盘布局:
- 检测键盘插入/拔出的时间
- 检测键盘上的布局
- 设置系统布局以匹配键盘布局。
1. 检测键盘插入/拔出的时间
所有硬件更改均发送至D-Bus 消息总线守护进程。
D-Bus 是一种消息总线系统,是应用程序之间进行通信的简单方式。除了进程间通信之外,D-Bus 还有助于协调进程生命周期;它使编写“单实例”应用程序或守护进程变得简单可靠,并且在需要应用程序和守护进程的服务时按需启动它们。
D-Bus 既提供系统守护进程(用于诸如“添加新硬件设备”或“打印机队列更改”等事件),也提供每个用户登录会话守护进程(用于用户应用程序之间的一般 IPC 需求)。
您可以通过以下方式监视 D-Bus 上发送的事件dbus 监控命令:
dbus-monitor --system #show all events
dbus-monitor --system --profile 'interface=org.freedesktop.Hal.Manager' # filter: only events sent by Hal
dbus-monitor --system --profile 'interface=org.freedesktop.Hal.Manager, member=DeviceAdded' # filter: only DeviceAdded events sent by Hal
插入键盘,然后观察消息的流逝。这应该能让你了解检测键盘插入或拔出所需的过滤器。你还需要熟悉dbus 监控更详细的用法。
2. 检测键盘布局
一旦键盘插入系统,哈尔(硬件抽象层)配置它。您可以使用hal-get-属性确定所需的密钥后,执行命令。例如,在我的系统上:
$ hal-get-property --udi /org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input --key "input.xkb.layout"
gb
$ hal-get-property --udi /org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input --key "input.xkb.model"
pc105
请参阅此答案以获取有关如何从 HAL 获取值的详细解释: 在 Ubuntu 上设置进程配置文件。我认为 D-Bus 消息可能会为您提供已连接设备的已配置 HAL 节点,但我不确定。如果没有,您知道它将位于两个位置之一 - 对应于两个键盘之一。
3. 选择系统布局以匹配键盘布局
joe 已经指出如何使用 xmodmap 来实现。
答案2
我不知道这个。但这是我以前解决的办法(从美国转到英国)
sudo xmodmap /usr/share/xmodmap/xmodmap.uk
答案3
我猜测这可能可以通过使用一些 HAL 指令来实现。
但是,您不必每次想要切换布局时都转到“首选项”。为什么不直接将“键盘指示器”小程序添加到面板中呢?只需单击一下鼠标即可。