X11::Protocol::Ext::XKEYBOARD -- Perl extension module for X Keyboard Extension Protocol
use X11::Protocol; $x = X11::Protocol->new($ENV{DISPLAY}); $x->init_extension('XKEYBOARD') or die;
This module is used by the X11::Protocol(3pm) module to participat in the keboard extension to the X protocol, allowing the client to control the keyboard and other input devices, per the "X Keyboard Extension Protocol Specification", a copy of which can be obtained from http://www.x.org/releases/X11R7.7/doc/kbproto/xkbproto.pdf.
This manual page does not attempt to document the protocol itself, see the specification for that. It documents the "CONSTANTS", "EVENTS" and "ERRORS" that are added to the X11::Protocol(3pm) module.
XKEYBOARD multiplexes one base event number with the xkb-code field. Therefore, X11::Protocol::Ext::XKEYBOARD provides the following single event type: XkbNotify, the fields of which depend on the value of the xkb_code field (which is of type XkbEventType). This field can have the value:
xkb-code
XkbNotify
xkb_code
XkbEventType
XkbEventType => XkbNewKeyboardNotify XkbMapNotify XkbStateNotify XkbControlsNotify XkbIndicatorStateNotify XkbIndicatorMapNotify XkbNamesNotify XkbCompatMapNotify XkbBellNotify XkbActionNotify XkbAccessXNotify XkbExtensionDeviceNotify
The unpacked XkbNewKeyboardNotify event contains the following fields in the event hash:
XkbNewKeyboardNotify
XkbNewKeyboardNotify => { xkb_code => $code, time => $time, deviceID => $deviceid, oldDeviceID => $deviceid, minKeyCode => $keycode, maxKeyCode => $keycode, oldMinKeyCode => $keycode, oldMaxKeyCode => $keycode, requestMajor => $major, requestMinor => $minor, changed => $XkbNKNDetail} # mask
The unpacked XkbMapNotify event contains the following fields in the event hash:
XkbMapNotify
XkbMapNotify => { xkb_code => $code, time => $time, deviceId => $deviceid, ptrBtnActions => $XkbButMask, # 8-bit bit mask changed => $XkbMapPart, # mask minKeyCode => $keycode, maxKeyCode => $keycode, firstType => $type, nTypes => $ntypes, firstKeySym => $keysym, nKeySyms => $nkeysyms, firstKeyAct => $keyact, nKeyActs => $nkeyacts, firstKeyBehavior => $behave, nKeyBehavior => $nbehave, firstKeyExplicit => $keyexp, nKeyExplicit => $nkeyexp, firstModMapKey => $modmapkey, nModMapKeys => $nmodmapkey, firstVModMapKey => $vmodmapkey, nVModMapKeys => $nvmodmapkey, virtualMods => $XkbVMod} # mask
The unpacked XkbStateNotify event contains the following fields in the event hash:
XkbStateNotify
XkbStateNotify => { xkb_code => $code, time => $time, deviceID => $deviceid, mods => $XkbKeyMask, # mask baseMods => $XkbKeyMask, # mask latchedMods => $XkbKeyMask, # mask lockedMods => $XkbKeyMask, # mask group => $XkbGroup, baseGroup => $group, latchedGroup => $group, lockedGroup => $XkbGroup, compatState => $XkbKeyMask, # mask grabMods => $XkbKeyMask, # mask compatGrabMods => $XkbKeyMask, # mask lookupMods => $XkbKeyMask, # mask compatLookupMods => $XkbKeyMask, # mask ptrBtnState => $butmask, changed => $XkbStatePart, # mask keycode => $keycode, eventType => $eventtype, requestMajor => $major, requestMinor => $minor}
The unpacked XkbControlsNotify event contains the following fields in the event hash:
XkbControlsNotify
XkbControlsNotify => { xkb_code => $code, time => $time, deviceID => $deviceid, numGroups => $numgroups, changedControls => $XkbControl, # mask enabledControls => $XkbBoolCtrl, # mask enabledControlChanges => $XkbBoolCtrl, # mask keycode => $keycode, eventType => $eventttype, requestMajor => $major, requestMinor => $minor}
The unpacked XkbIndicatorStateNotify event contains the following fields in the event hash:
XkbIndicatorStateNotify
XkbIndicatorStateNotify => { xkb_code => $code, time => $time, deviceID => $deviceid, state => $XkbIndicator, # 32-bit bit mask stateChanged => $XkbIndicator} # 32-bit bit mask
The unpacked XkbIndicatorMapNotify event contains the following fields in the event hash:
XkbIndicatorMapNotify
XkbIndicatorMapNotify => { xkb_code => $code, time => $time, deviceID => $deviceid, state => $XkbIndicator, # 32-bit bit mask mapChanged => $XkbIndicator} # 32-bit bit mask
The unpacked XkbNamesNotify event contains the following fields in the event hash:
XkbNamesNotify
XkbNamesNotify => { xkb_code => $code, time => $time, deviceID => $deviceid, changed => $XkbNameDetail, # mask firstType => $type, nTypes => $ntypes, firstLevelName => $level, nLevelNames => $nlevels, nRadioGroups => $ngroups, nKeyAliases => $naliases, changedGroupNames => $XkbKbGroup, # mask changedVirtualMods => $XkbVMod, # mask firstKey => $keycode, nKeys => $nkeys, changedIndicators => $XkbIndicator} # 32-bit bit mask
The unpacked XkbCompatMapNotify event contains the following fields in the event hash:
XkbCompatMapNotify
XkbCompatMapNotify => { xkb_code => $code, time => $time, deviceID => $deviceid, changedGroups => $XkbKbGroup, # mask firstSI => $firstsi, nSI => $nsi, nTotalSI => $ntotalsi}
The unpacked XkbBellNotify event contains the following fields in the event hash:
XkbBellNotify
XkbBellNotify => { xkb_code => $code, time => $time, deviceID => $deviceid, bellClass => $XkbBellClassResult, bellID => $bellid, percent => $percent, pitch => $pitch, duration => $duration, bell_name => $atom, # 'name' would conflict window => $window, eventOnly => $Bool}
The unpacked XkbActionMessage event contains the following fields in the event hash:
XkbActionMessage
XkbActionMessage => { xkb_code => $code, time => $time, deviceID => $deviceid, keycode => $keycode, press => $Bool, keyEventFollows => $Bool, mods => $XkbKeyMask, # mask group => $XkbGroup, message => $message}
The unpacked XkbAcessXNotify event contains the following fields in the event hash:
XkbAcessXNotify
XkbAcessXNotify => { xkb_code => $code, time => $time, deviceID => $deviceid, keycode => $keycode, detail => $XkbAXNDetail, # mask slowKeysDelay => $delay, debounceDelay => $delay}
The unpacked XkbExtensionDeviceNotify event contains the following fields in the event hash:
XkbExtensionDeviceNotify
XkbExtensionDeviceNotify => { xkb_code => $code, time => $time, deviceID => $deviceid, reason => $XkbXIDetail, # mask ledClass => $XkbLEDClassResult, ledID => $ledid, ledsDefined => $XkbIndicator, # 32-bit bit mask ledState => $XkbIndicator, # 32-bit bit mask firstButton => $button, nButtons => $nbuttons, supported => $XkbXIFeature, # mask unsupported => $XkbXIFeature} # mask
X11::Protocol::Ext::XKEYBOARD provides the following constants: (some are enums, some are masks, some are both)
XkbEventType => XkbNewKeyboardNotify XkbMapNotify XkbStateNotify XkbControlsNotify XkbIndicatorStateNotify XkbIndicatorMapNotify XkbNamesNotify XkbCompatMapNotify XkbBellNotify XkbActionMessage XkbAcessXNotify XkbExtensionDeviceNotify
XkbKeyMask => Shift Lock Control Mod1 Mod2 Mod3 Mod4 Mod5
XkbButMask => Button0 Button1 Button2 Button3 Button4 Button5 Button6 Button7
XkbNKNDetail => Keycodes Geometry DeviceID
XkbAXNDetail => SKPress SKAccept SKReject SKRelease BKAccept BKReject AXKWarning
XkbMapPart => KeyTypes KeySyms ModifierMap ExplicitComponents KeyActions KeyBehaviors VirtualMods VirtualModMap
XkbStatePart => ModifierState ModifierBase ModifierLatch ModifierLock GroupState GroupBase GroupLatch GroupLock CompatState GrabModes CompatGrabMods LookupMods CompatLookupMods PointerButtons
XkbBoolCtrl => RepeatKeys SlowKeys BounceKeys StickyKeys MouseKeys MouseKeysAccel AccessXKeys AccessXTimeoutMask AccessXFeedbackMask AudibleBellMask Overlay1Mask Overlay2Mask IgnoreGroupLockMask
XkbControl => RepeatKeys SlowKeys BounceKeys StickyKeys MouseKeys MouseKeysAccel AccessXKeys AccessXTimeoutMask AccessXFeedbackMask AudibleBellMask Overlay1Mask Overlay2Mask IgnoreGroupLockMask GroupsWrap InternalMods IgnoreLockMods PerKeyRepeat ControlsEnabled
XkbAXFBOpt => SKPress SKAccept Feature SlowWarn Indicator StickyKeys SKRelease SKReject BKReject DumbBell
XkbAXSKOpt => TwoKeys LatchToLock
XkbAXOption => SKPress SKAccept Feature SlowWarn Indicator StickKeys TwoKeys LatchToLock SKRelease SKReject BKReject DumbBell
XkbDeviceSpec => UseCoreKbd UseCorePtr
XkbLEDClassResult => KbdFeedbackClass LedFeedbackClass
XkbLEDClassSpec => KbdFeedbackClass LedFeedbackClass DfltXIClass AllXIClasses
XkbBellClassResult => KbdFeedbackClass BellFeedbackClass
XkbBellClassSpec => KbdFeedbackClass BellFeedbackClass DfltXIClass
XkbIDSpec => DfltXIId
XkbIDResult => DfltXIId XINone
XkbMultiIDSpec => DfltXIId AllXIIds
XkbGroup => Group1 Group2 Group3 Group4
XkbGroups => Group1 Group2 Group3 Group4 AnyGroup AllGroups
XkbKbGroup => Group1 Group2 Group3 Group4
XkbKbGroups => Group1 Group2 Group3 Group4 AnyGroup
XkbGroupsWrap => ClampIntoRange RedirectIntoRange
XkbVModsHigh => vmod8 vmod9 vmod10 vmod11 vmod12 vmod13 vmod14 vmod15
XkbVModsLow => vmod0 vmod1 vmod2 vmod3 vmod4 vmod5 vmod6 vmod7
XkbVMod => vmod0 vmod1 vmod2 vmod3 vmod4 vmod5 vmod6 vmod7 vmod8 vmod9 vmod10 vmod11 vmod12 vmod13 vmod14 vmod15 vmod16
XkbExplicit => KeyType1 KeyType2 KeyType3 KeyType4 Interpret AutoRepeat Behavior VModMap
XkbSymInterpMatch => LevelOneOnly Operation
XkbIMFlag => LEDDrivesKB NoAutomatic NoExplicit
XkbIMModsWhich => UseBase UseLatched UseLocked UseEffective UseCompat
XkbIMGroupsWhich => UseBase UseLatched UseLocked UseEffective UseCompat
XkbCMDetail => SymInterp GroupCompat
XkbNamesDetail => KeycodesName GeometryName SymbolsName PhysSymbolsName TypesName CompatName KeyTypeNames KTLevelNames IndicatorNames KeyNames KeyAliases VirtualModNames GroupNames RGNames
XkbGBNDetail => Types CompatMap ClientSymbols ServerSymbols IndicatorMaps KeyNames Geometry OtherNames
XkbXIExtDevFeature => ButtonActions IndicatorNames IndicatorMaps IndicatorState
XkbXIFeature => Keyboards ButtonActions IndicatorNames IndicatorMaps IndicatorState
XkbXIDetail => Keyboards ButtonActions IndicatorNames IndicatorMaps IndicatorState UnsupportedFeature
XkbPerClientFlag => DetectableAutorepeat GrabsUseXKBState AutoResetControls LookupStateWhenGrabbed SendEventUsesXKBState
X11::Protocol::Ext::XKEYBOARD provides the following bad resource errors: Keyboard
Keyboard
X11::Protocol::Ext::KEYBOARD provides the folloing requests:
$X->XkbUseExtension($major,$minor) => ($supported,$major,$minor)
$X->XkbSelectEvents($deviceSpec, $XkbEventType=>'clear', # to clear events $XkbEventType=>'selectAll, # to select all events $XkbEventType=>[$affect,$details], # filtered events ... ) $deviceSpec => $XkbDeviceSpec $affects => $bitmask # see spec for type $details => $bitmask # see spec for type $bit is event type bit name or bit number
$X->XkbBell($deviceSpec, $bellClass, $bellID, $percent, $forceSound, $eventOnly, $pitch, $duration, $name, $window)
$X->XkbGetState($deviceSpec) => ($deviceID, $mods, $baseMods, $latchedMods, $lockedMods, $group, $lockedGroup, $baseGroup, $latchedGroup, $compatState, $grabMods, $compatGrabMods, $lookupMods, $compatLookupMods, $ptrBtnState)
$X->XkbLatchLockState($deviceSpec, $affectModLocks, $modLocks, $lockGroup, $groupLock, $affectModLatches, $modLatches, $latchGroup, $groupLatch) $affectModLocks => $XkbKeyMask # mask $modLock => $XkbKeyMask # mask $lockGroup => $Bool $groupLock => $XkbGroup $affectModLatches => $XkbKeyMask # mask $modLatches => $XkbKeyMask # mask $latchGroup => $Bool $groupLatch => $bitmask # 16-bit bit mask
$X->XkbGetControls($deviceSpec) => ($deviceID, $mouseKeysDfltBtn, $numGroups, $groupsWrap, $internalMods_mask, $ignoreLockMods_mask, $interalMods_realMods, $ignoreLockMods_realMods, $internalMods_vmods, $ignoreLockMods_vmods, $repeatDelay, $repeatInterval, $slowKeysDelay, $debounceDelay, $mouseKeysDelay, $mouseKeysInterval, $mouseKeysTimeToMax, $mouseKeysMaxSpeed, $mouseKeysCurve, $accessXOptions, $accessXTimeout, $accessXTimeoutOptionsMask, $accessXTimeoutOptionValues, $accessXTimeoutMask, $accessXTimeoutValues, $enabledControls, $perKeyRepeat) $deviceSpec => $XkbDeviceSpec $internalMods_mask => $XkbKeyMask # mask $ignoreLockMods_mask => $XkbKeyMask # mask $internalMods_realMods => $XkbKeyMask # mask $ignoreLockMods_realMods => $XkbKeyMask # mask $internalMods_vmods => $XkbVMod # mask $ignoreLockMods_vmods => $XkbVMod # mask $accessXOptions => #XkbAXOption # mask $accessXTimeoutOptionsMask => $XkbAXOption # mask $accessXTimeoutOptionsValues => $XkbAXOption # mask $accessXTimeoutMask => $XkbBoolCtrl # mask $accessXTimeoutValues => $XkbBoolCtrl # mask $enabledControls => $XkbBoolCtrl # mask
$X->XkbSetControls($deviceSpec, $affectInternalRealMods, $internalRealMods, $affectIgnoreLockRealMods, $ignoreLockRealMods, $affectInternalVirtualMods, $internalVirtualMods, $affectIgnoreLockVirtualMods, $ignoreLockVirtualMods, $mouseKeysDfltBtn, $groupsWrap, $accessXOptions, $affectEnabledControls, $enabledControls, $changeControls, $repeatDelay, $repeatInterval, $slowKeysDelay, $debounceDelay, $mouseKeysDelay, $mouseKeysInterval, $mouseKeysTimeToMax, $mouseKeysMaxSpeed, $mouseKeysCurve $accessXTimeout, $accessXTimeoutMask, $accessXTimeoutValues, $accessXTimeoutOptionsMask, $accessXTimeoutOptionsValues, $perKeyRepeat) $deviceSpec => $XkbDeviceSpec $affectInternalRealMods => $XkbKeyMask # mask $internalRealMods => $XkbKeyMask # mask $affectIgnoreLockRealMods => $XkbKeyMask # mask $ignoreLockRealMods => $XkbKeyMask # mask $affectInternalVirualMods => $XkbVMod # mask $internalVirualMods => $XkbVMod # mask $affectIgnoreLockVirtualMods => $XkbVMod # mask $ignoreLockVirtualMods => $XkbVMod # mask $accessXOptions => $XkbAXOption # mask $enabledControls => $XkbBoolCtrl # mask $changeControls => $XkbControl # mask $accessXTimeoutMask => $XkbBoolCtrl # mask $accessXTimeoutValues => $XkbBoolCtrl # mask $accessXTimeoutOptionsMask => $XkbAXOption # mask $accessXTimeoutOptionsValues => $XkbAXOption # mask
$X->XkbGetMap($deviceSpec, $full, $partial, $firstType, $nTypes, $firstKeySym, $nKeySyms, $firstKeyAction, $nKeyActions, $firstKeyBehavior, $nKeyBehaviours, $virtualMods, $firstKeyExplicit, $nKeyExplicit, $firstModMapKey, $nModMapKeys, $firstVModMapKey, $nVModMapKeys) => ($deviceID, $minKeyCode, $maxKeyCode, $present, $firstType, $nTypes, $totalTypes, $firstKeySym, $nKeySyms, $firstKeyAction, $totalActions, $nKeyActions, $firstKeyBehavior, $nKeyBehaviors, $totalKeyBehaviors, $firstKeyExplicit, $nKeyExplicit, $totalKeyExplicit, $firstModMapKey, $nModMapKeys, $totalModMapKeys, $firstVModMapKey, $nVModMapKeys, $totalVModMapKeys, $virtualMods, XkbKeyTypes=>$typesRtrn, XkbKeySyms=>$symsRtrn, XkbKeyActions=>[$actsRtrn,...], XkbKeyBehaviors=>$behaviorsRtrn, XkbVirtualMods=>$vmodsRtrn, XkbExplicitComponents=>$explicitRtrn, XkbModifierMap=>$modmapRtrn, XkbVirtualModMap=>$vmodMapRtrn) $typesRtrn => [ $keytype, ... ] $keytype => [ $mods_mask, $mods_mods, $mods_vmods, $numLevels, $hasPreserve, [$map,...], [$preserve,...] ] $map => [ $active, $mods_mask, $level, $mods_mods, $mods_vmods ] $preserve => [ $moddef, ... ] $symsRtrn => [ $keysym, ... ] $keysym => [ [ @ktIndex[0..3] ], $groupInfo, $width, [ $sym, ... ] ] $actsRtrn => [ $act, ... ] $behaviorsRtrn => [ $behavior, ... ] $behavior => [ $keycode, $behaviors ] $vmodsRtrn => [ $vmod, ... ] $explicitRtrn => [ $explicit, ... ] $explicit => [ $keycode, $explicits ] $modmapRtrn => [ $modmap, ... ] $modmap => [ $keycode, $mods ] $vmodmapRtrn => [ $vmodmap, ... ] $vmodmap => [ $keycode, $vmods ]
$X->XkbSetMap(...) too complex (not implemented yet)
$X->XkbGetCompatMap(...) too complex (not implemented yet)
$X->XkbSetCompatMap(...) too complex (not implemented yet)
$X->GetIndicatorState($deviceSpec) => ($deviceID, $state) $deviceSpec => $XkbDeviceSpec
$X->GetIndicatorMap($deviceSpec, $which) => ($deviceID, $which, $realIndicators, $maps) $deviceSpec => $XkbDeviceSpec $maps => [ $map, ... ] $map => [ $flags, $whichGroups, $groups, $whichMods, $mods, $realMods, $vmods, $ctrls ]
$X->SetIndicatorMap($deviceSpec,$which, $maps) $deviceSpec => $XkbDeviceSpec $maps => [ $map, ... ] $map => [ $flags, $whichGroups, $groups, $whichMods, $mods, $realMods, $vmods, $ctrls ]
$X->GetNamedIndicator($deviceSpec, $ledClass, $ledID, $indicator) => ($deviceID, $indicator, $found, $on, $realIndicator, $ndx, $map, $supported) $deviceSpec => $XkbDeviceSpec $map => [ $flags, $whichGroups, $groups, $whichMods, $mods, $realMods, $vmods, $ctrls ]
$X->XkbSetNamedIndicator->($deviceSpec, $ledClass, $ledID, $indicator, $setState, $on, $setMap, $createMap, $map) $deviceSpec => $XkbDeviceSpec $map => [ $flags, $whichGroups, $groups, $whichMods, $mods, $realMods, $vmods, $ctrls ]
$X->XkbGetNames(...) too complex (not implemented yet)
$X->XkbSetNames(...) too complex (not implemented yet)
$X->XkbGetGeometry(...) too complex (not implemented yet)
$X->XkbSetGeometry(...) too complex (not implemented yet)
$X->XkbPerClientFlags($deviceSpec, $change, $value, $ctrlsToChange, $autoCtrls, $autoCtrlValues) => ($deviceID, $supported, $value, $autoCtrls, $autoCtrlValues) $deviceSpec => $XkbDeviceSpec $change => $XkbPerClientFlag # mask $value => $XkbPerClientFlag # mask $ctrlsToChange => $XkbBoolCtrl # mask $autoCtrls => $XkbBoolCtrl # mask $autoCtrlValues => $XkbBoolCtrl # mask
$X->XkbListComponents($deviceSpec, $maxNames, $keymaps, $keycodes, $types, $compatMap, $symbols, $geometry) => ($deviceID, $keymaps, $keycodes, $types, $compatMaps, $symbols, $geometries, $extra) $keymaps => [ $kblisting, ... ] $keycodes => [ $kblisting, ... ] $types => [ $kblisting, ... ] $compatMaps => [ $kblisting, ... ] $symbols => [ $kblisting, ... ] $kblisting => [ $flags, $string ]
$X->XkbGetKbdByName(...) too complex (not implemented yet)
$X->XkbGetDeviceInfo(...) too complex (not implemented yet)
$X->XkbSetDeviceInfo(...) too complex (not implemented yet)
$X->XkbSetDebuggingFlags(...) not useful (not implemented)
This modue has not been tested exhaustively and will likely fail when anything special is attempted.
Many requests are not implemented yet due to their high complexity. (I really only needed XkbGetControls and XkbSetControls.)
Brian Bidulock <bidulock@cpan.org>.
perl(1), X11::Protocol(3pm), The X Keyboard Extension: Protocol Specification, Protocol Version 1.0/Document Revision 1.0 (X Consortium Standard)
To install X11::Protocol::Enhanced, copy and paste the appropriate command in to your terminal.
cpanm
cpanm X11::Protocol::Enhanced
CPAN shell
perl -MCPAN -e shell install X11::Protocol::Enhanced
For more information on module installation, please visit the detailed CPAN module installation guide.