You are not logged in.

#1 2009-11-20 22:08:05

Gwasanaethau
Member
From: Baile Átha Clíath, Éire
Registered: 2009-11-20
Posts: 12

[Solved] Multiple Keyboard Layouts

Hi all!

I have a small question about keyboard layouts in Xorg. Up until recently, I turned off hotplugging in Xorg and used the xorg.conf file to specify multiple keyboard layouts for a single physical keyboard, and a key sequence to switch between them. However, in a recent pacman -Syu update, I noticed that all keyboard layouts are defined by hal and that xorg now ignores the layouts specified in xorg.conf. I can specify one keyboard as outlined in the wiki, but how can I specify the others?

My /etc/xorg.conf file:

Section "ServerLayout"
    Identifier     "X.org Configured"
    Screen      0  "Screen" 0 0
    InputDevice    "SynapticsTouchpad" "SendCoreEvents"
    InputDevice    "Keyboard" "CoreKeyboard"
EndSection

Section "Files"
    ModulePath   "/usr/lib/xorg/modules"
    FontPath     "/usr/share/fonts/misc"
    FontPath     "/usr/share/fonts/100dpi:unscaled"
    FontPath     "/usr/share/fonts/75dpi:unscaled"
    FontPath     "/usr/share/fonts/TTF"
    FontPath     "/usr/share/fonts/Type1"
EndSection

Section "Module"
    Load  "dbe"
    Load  "dri2"
    Load  "glx"
    Load  "record"
    Load  "dri"
    Load  "extmod"
    Load  "synaptics"
EndSection

Section "InputDevice"
    Identifier  "Keyboard"
    Driver      "kbd"
    Option      "XkbLayout"  "gb,gr,ru,kr_gb"
    Option      "XkbOptions" "compose:menu,grp:lwin_toggle"
EndSection

Section "InputDevice"
    Identifier  "SynapticsTouchpad"
    Driver      "synaptics"
    Option      "AlwaysCore"           "True"
    Option        "Protocol"             "auto-dev"
    Option        "Device"               "/dev/psaux"
    Option        "SHMConfig"            "False"
    Option      "LeftEdge"             "1700"
    Option      "RightEdge"            "5300"
    Option      "TopEdge"              "1700"
    Option      "BottomEdge"           "4200"
    Option      "FingerLow"            "25"
    Option      "FingerHigh"           "30"
    Option      "MaxTapTime"           "180"
    Option      "MaxTapMove"           "220"
    Option      "VertEdgeScroll"       "True"
    Option      "HorizEdgeScroll"      "False"
    Option      "CornerCoasting"       "True"
    Option      "CoastingSpeed"        "0.30"
    Option      "VertScrollDelta"      "100"
#    Option      "HorizScrollDelta"     "100"
    Option      "MinSpeed"             "0.20"
    Option      "MaxSpeed"             "0.60"
    Option      "AccelFactor"          "0.0030"
    Option      "VertTwoFingerScroll"  "True"
    Option      "HorizTwoFingerScroll" "True"
    Option      "TapButton1"           "1"
    Option      "TapButton2"           "2"
    Option      "TapButton3"           "3"
EndSection

Section "Monitor"
    Identifier   "Monitor"
    VendorName   "Monitor Vendor"
    ModelName    "Monitor Model"
    Option       "DPMS" "True"
EndSection

Section "Device"
    Identifier  "GraphicsCard"
    Driver      "nvidia"
    VendorName  "nVidia Corporation"
    BoardName   "GeForce 8200M G"
    BusID       "PCI:2:0:0"
    Option      "NoLogo"       "True"
    Option      "BackingStore" "False"
    Option      "RenderAccel"  "True"
EndSection

Section "Screen"
    Identifier "Screen"
    Device     "GraphicsCard"
    Monitor    "Monitor"
    SubSection "Display"
        Viewport   0 0
        Depth     24
        Modes     "1366x768" "1280x720" "854x480" "800x600" "640x480"
    EndSubSection
EndSection

Section "ServerFlags"
    Option   "DontZap" "False"
EndSection

Section "Extensions"
    Option   "Composite" "Enable"
EndSection

My /etc/hal/fdi/policy/10-keymap.fdi file:

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.keymap">
      <append key="info.callouts.add" type="strlist">hal-setup-keymap</append>
    </match>

    <match key="info.capabilities" contains="input.keys">
      <merge key="input.xkb.rules" type="string">base</merge>

      <!-- If we're using Linux, we use evdev by default (falling back to
           keyboard otherwise). -->
      <merge key="input.xkb.model" type="string">keyboard</merge>
      <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
             string="Linux">
        <merge key="input.xkb.model" type="string">evdev</merge>
      </match>

      <merge key="input.xkb.layout" type="string">gb</merge>
      <merge key="input.xkb.variant" type="string" />
    </match>
  </device>
</deviceinfo>

Last edited by Gwasanaethau (2009-11-21 02:00:44)

Offline

#2 2009-11-21 01:59:27

Gwasanaethau
Member
From: Baile Átha Clíath, Éire
Registered: 2009-11-20
Posts: 12

Re: [Solved] Multiple Keyboard Layouts

OK, I didn't realise you could just put the old codes from xorg.conf into the new 10-keymap.fdi file. Thus it became (update in last few lines):

<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.keymap">
      <append key="info.callouts.add" type="strlist">hal-setup-keymap</append>
    </match>

    <match key="info.capabilities" contains="input.keys">
      <merge key="input.xkb.rules" type="string">base</merge>

      <!-- If we're using Linux, we use evdev by default (falling back to
           keyboard otherwise). -->
      <merge key="input.xkb.model" type="string">keyboard</merge>
      <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
             string="Linux">
        <merge key="input.xkb.model" type="string">evdev</merge>
      </match>

      <merge key="input.xkb.layout" type="string">gb,gr,ru,kr_gb</merge>
      <merge key="input.xkb.variant" type="string" />
      <merge key="input.xkb.layout" type="string">compose:menu,grp:lwin_toggle</merge>
    </match>
  </device>
</deviceinfo>

Offline

Board footer

Powered by FluxBB