在 Ubuntu 中自动交换键盘布局

在 Ubuntu 中自动交换键盘布局

我在办公桌前使用采用美国替代国际(以前的美国国际)布局的笔记本电脑和采用巴西布局的 USB Microsoft Curve 键盘。

我希望当检测到 USB 键盘时自动切换布局,而不是每次离开办公桌时手动进入首选项。ubuntu 9.04 中有这样的方法吗?

答案1

该解决方案有三个组件可让您交换键盘布局:

  1. 检测键盘插入/拔出的时间
  2. 检测键盘上的布局
  3. 设置系统布局以匹配键盘布局。

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 指令来实现。

但是,您不必每次想要切换布局时都转到“首选项”。为什么不直接将“键盘指示器”小程序添加到面板中呢?只需单击一下鼠标即可。

相关内容