Existem três componentes para a solução que permitem trocar layouts de teclado:
- Detectar quando o teclado está conectado / desligado
- Detectar o layout no teclado
- Defina o layout do seu sistema para corresponder ao layout do teclado.
1. Detectar quando o teclado está conectado / desligado
Todas as alterações de hardware são enviadas no daemon do barramento de mensagens D-Bus .
D-Bus is a message bus system, a simple way for applications to talk to one another. In addition to interprocess communication, D-Bus helps coordinate process lifecycle; it makes it simple and reliable to code a "single instance" application or daemon, and to launch applications and daemons on demand when their services are needed.
D-Bus supplies both a system daemon (for events such as "new hardware device added" or "printer queue changed") and a per-user-login-session daemon (for general IPC needs among user applications).
Você pode monitorar os eventos enviados no D-Bus através do comando dbus-monitor :
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
Conecte seu teclado e observe as mensagens passarem. Isso deve lhe dar uma idéia do filtro que você precisa para detectar um teclado conectado ou desligado. Você também precisará se familiarizar com o uso do dbus-monitor em mais detalhes.
2. Detectar o layout do teclado
Quando o teclado estiver conectado ao sistema, HAL (Herware Abstraction Layer) configura-o. Você pode recuperar essas informações usando o comando hal-get-property depois de identificar a chave de que precisa. Por exemplo, no meu sistema:
$ 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
Veja esta resposta para uma explicação detalhada de como obter valores de HAL: configurando perfis de processo no Ubuntu . Acho que a mensagem do D-Bus pode fornecer o nó HAL configurado para o dispositivo conectado, mas não tenho certeza. Se não, você sabe que será em um dos dois lugares - correspondendo a um dos dois teclados.
3. Selecione o layout do seu sistema para corresponder ao layout do teclado
joe já apontou como você pode fazer isso usando xmodmap .