h&>(      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred"%&'(-?` evdevDevice propertiesevdevFor simple sound output devices evdevSpecifying autorepeating eventsevdevLEDsevdev Miscellaneous"evdevStateful binary switches3evdevAbsolute changes^evdevRelative changeslevdevKeys and buttonsevdev7Each of these corresponds to one of the contructors of . So you're unlikely to need to use these directly (C doesn't have ADTs - we do).evdevSynchronization events  ! "210/.-,+*)('&%$#3]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:987654^kjihgfedcba`_l~}|{zyxwvutsrqponml~}|{zyxwvutsrqponm^kjihgfedcba`_3]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:987654"210/.-,+*)('&%$#!     Safe-Inferred"%&'(-?,evdev LEDs values Safe-Inferred"%&'(-?\ Safe-Inferred"%&'(-?%evdevThe status of a key.evdevA direct representation of the value field of the C  input_event3, for when there is no obvious meaningful sum type.evdevA direct representation of the code field of the C  input_event3, for when there is no obvious meaningful sum type.evdevAn input event, without the timestamp. Each constructor corresponds to one  https://www.kernel.org/doc/html/latest/input/event-codes.html#event-types event type , except for .evdev"We include this primarily so that  can be well-defined - let us know if you ever actually see one emitted by a device, as it would likely indicate a shortcoming in the library. evdev(An input event, including the timestamp.evdevAn input device.evdevPrevent other clients (including kernel-internal ones) from receiving events. Often a bad idea.evdevRelease a grabbed device.evdev#Get the next event from the device.evdevGet the next event from the device, if one is available. Designed for use with devices created from a non-blocking file descriptor. Otherwise equal to fmap Just . nextEvent.evdev,Create a device from a valid path - usually /dev/input/eventX for some numeric X. Use 9 if you need more control over how the device is created.evdevGeneralisation of , in case one needs control over the file descriptor, e.g. in order to set a particular ,  , or   . Note that: newDevice path = newDeviceFromFd =<< openFd path ReadOnly Nothing defaultFileFlagsWARNING: Don't attempt to reuse the  - it will be closed when the  is garbage collected.evdev(The usual directory containing devices ( "/dev/input").evdev#Set the state of a LED on a device. Safe-Inferred"%&'(-?'evdevA uinput device.evdev Create a new uinput device.evdev6Write a single event. Doesn't issue a sync event, so: &writeEvent dev e /= writeBatch dev [e].evdev#Write several events followed by a .evdev Device name<<    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&-"evdev-2.2.0-Fo04aVFRT6u4rW70WVmFZD Evdev.CodesEvdev Evdev.Uinput EventDataEvdev.LowLevelUtil System.PosixFileModeOpenMode OpenFileFlagsDevicePropertyInputPropPointerInputPropDirectInputPropButtonpadInputPropSemiMtInputPropTopbuttonpadInputPropPointingStickInputPropAccelerometer SoundEventSndClickSndBellSndTone RepeatEventRepDelay RepPeriodLEDEventLedNumlLedCapsl LedScrolll LedComposeLedKanaLedSleep LedSuspendLedMuteLedMiscLedMail LedCharging MiscEvent MscSerial MscPulseled MscGestureMscRawMscScan MscTimestamp SwitchEventSwLid SwTabletModeSwHeadphoneInsert SwRfkillAllSwRadioSwMicrophoneInsertSwDockSwLineoutInsertSwJackPhysicalInsertSwVideooutInsertSwCameraLensCover SwKeypadSlideSwFrontProximity SwRotateLockSwLineinInsert SwMuteDevice AbsoluteAxisAbsXAbsYAbsZAbsRxAbsRyAbsRz AbsThrottle AbsRudderAbsWheelAbsGasAbsBrakeAbsHat0xAbsHat0yAbsHat1xAbsHat1yAbsHat2xAbsHat2yAbsHat3xAbsHat3y AbsPressure AbsDistanceAbsTiltXAbsTiltY AbsToolWidth AbsVolumeAbsMisc AbsReserved AbsMtSlotAbsMtTouchMajorAbsMtTouchMinorAbsMtWidthMajorAbsMtWidthMinorAbsMtOrientationAbsMtPositionXAbsMtPositionY AbsMtToolType AbsMtBlobIdAbsMtTrackingId AbsMtPressure AbsMtDistance AbsMtToolX AbsMtToolY RelativeAxisRelXRelYRelZRelRxRelRyRelRz RelHwheelRelDialRelWheelRelMisc RelReserved RelWheelHiResRelHWheelHiResKey KeyReservedKeyEscKey1Key2Key3Key4Key5Key6Key7Key8Key9Key0KeyMinusKeyEqual KeyBackspaceKeyTabKeyQKeyWKeyEKeyRKeyTKeyYKeyUKeyIKeyOKeyP KeyLeftbrace KeyRightbraceKeyEnter KeyLeftctrlKeyAKeySKeyDKeyFKeyGKeyHKeyJKeyKKeyL KeySemicolon KeyApostropheKeyGrave KeyLeftshift KeyBackslashKeyZKeyXKeyCKeyVKeyBKeyNKeyMKeyCommaKeyDotKeySlash KeyRightshift KeyKpasterisk KeyLeftaltKeySpace KeyCapslockKeyF1KeyF2KeyF3KeyF4KeyF5KeyF6KeyF7KeyF8KeyF9KeyF10 KeyNumlock KeyScrolllockKeyKp7KeyKp8KeyKp9 KeyKpminusKeyKp4KeyKp5KeyKp6 KeyKpplusKeyKp1KeyKp2KeyKp3KeyKp0KeyKpdotKeyZenkakuhankakuKey102ndKeyF11KeyF12KeyRo KeyKatakana KeyHiragana KeyHenkanKeyKatakanahiragana KeyMuhenkan KeyKpjpcomma KeyKpenter KeyRightctrl KeyKpslashKeySysrq KeyRightalt KeyLinefeedKeyHomeKeyUp KeyPageupKeyLeftKeyRightKeyEndKeyDown KeyPagedown KeyInsert KeyDeleteKeyMacroKeyMute KeyVolumedown KeyVolumeupKeyPower KeyKpequalKeyKpplusminusKeyPauseKeyScale KeyKpcomma KeyHangeul KeyHanguelKeyHanjaKeyYen KeyLeftmeta KeyRightmeta KeyComposeKeyStopKeyAgainKeyPropsKeyUndoKeyFrontKeyCopyKeyOpenKeyPasteKeyFindKeyCutKeyHelpKeyMenuKeyCalcKeySetupKeySleep KeyWakeupKeyFile KeySendfile KeyDeletefileKeyXferKeyProg1KeyProg2KeyWwwKeyMsdos KeyCoffee KeyScreenlockKeyRotateDisplay KeyDirectionKeyCyclewindowsKeyMail KeyBookmarks KeyComputerKeyBack KeyForward KeyClosecd KeyEjectcdKeyEjectclosecd KeyNextsong KeyPlaypauseKeyPrevioussong KeyStopcd KeyRecord KeyRewindKeyPhoneKeyIso KeyConfig KeyHomepage KeyRefreshKeyExitKeyMoveKeyEdit KeyScrollup KeyScrolldownKeyKpleftparenKeyKprightparenKeyNewKeyRedoKeyF13KeyF14KeyF15KeyF16KeyF17KeyF18KeyF19KeyF20KeyF21KeyF22KeyF23KeyF24 KeyPlaycd KeyPausecdKeyProg3KeyProg4 KeyDashboard KeySuspendKeyCloseKeyPlayKeyFastforward KeyBassboostKeyPrintKeyHp KeyCameraKeySound KeyQuestionKeyEmailKeyChat KeySearch KeyConnect KeyFinanceKeySportKeyShop KeyAlterase KeyCancelKeyBrightnessdownKeyBrightnessupKeyMediaKeySwitchvideomodeKeyKbdillumtoggleKeyKbdillumdown KeyKbdillumupKeySendKeyReplyKeyForwardmailKeySave KeyDocuments KeyBattery KeyBluetoothKeyWlanKeyUwb KeyUnknown KeyVideoNext KeyVideoPrevKeyBrightnessCycleKeyBrightnessAutoKeyBrightnessZero KeyDisplayOffKeyWwanKeyWimax KeyRfkill KeyMicmuteBtnMiscBtn0Btn1Btn2Btn3Btn4Btn5Btn6Btn7Btn8Btn9BtnMouseBtnLeftBtnRight BtnMiddleBtnSideBtnExtra BtnForwardBtnBackBtnTask BtnJoystick BtnTriggerBtnThumb BtnThumb2BtnTopBtnTop2 BtnPinkieBtnBaseBtnBase2BtnBase3BtnBase4BtnBase5BtnBase6BtnDead BtnGamepadBtnSouthBtnABtnEastBtnBBtnCBtnNorthBtnXBtnWestBtnYBtnZBtnTlBtnTrBtnTl2BtnTr2 BtnSelectBtnStartBtnMode BtnThumbl BtnThumbrBtnDigi BtnToolPen BtnToolRubber BtnToolBrush BtnToolPencilBtnToolAirbrush BtnToolFinger BtnToolMouse BtnToolLensBtnToolQuinttapBtnTouch BtnStylus BtnStylus2BtnToolDoubletapBtnToolTripletapBtnToolQuadtapBtnWheel BtnGearDown BtnGearUpKeyOk KeySelectKeyGotoKeyClear KeyPower2 KeyOptionKeyInfoKeyTime KeyVendor KeyArchive KeyProgram KeyChannel KeyFavoritesKeyEpgKeyPvrKeyMhp KeyLanguageKeyTitle KeySubtitleKeyAngleKeyZoomKeyMode KeyKeyboard KeyScreenKeyPcKeyTvKeyTv2KeyVcrKeyVcr2KeySatKeySat2KeyCdKeyTapeKeyRadioKeyTuner KeyPlayerKeyTextKeyDvdKeyAuxKeyMp3KeyAudioKeyVideo KeyDirectoryKeyListKeyMemo KeyCalendarKeyRedKeyGreen KeyYellowKeyBlue KeyChannelupKeyChanneldownKeyFirstKeyLastKeyAbKeyNext KeyRestartKeySlow KeyShuffleKeyBreak KeyPrevious KeyDigitsKeyTeenKeyTwen KeyVideophoneKeyGames KeyZoomin KeyZoomout KeyZoomresetKeyWordprocessor KeyEditorKeySpreadsheetKeyGraphicseditorKeyPresentation KeyDatabaseKeyNews KeyVoicemailKeyAddressbook KeyMessengerKeyDisplaytoggleKeyBrightnessToggle KeySpellcheck KeyLogoff KeyDollarKeyEuro KeyFramebackKeyFrameforwardKeyContextMenuKeyMediaRepeatKey10channelsupKey10channelsdown KeyImages KeyDelEol KeyDelEos KeyInsLine KeyDelLineKeyFnKeyFnEscKeyFnF1KeyFnF2KeyFnF3KeyFnF4KeyFnF5KeyFnF6KeyFnF7KeyFnF8KeyFnF9KeyFnF10KeyFnF11KeyFnF12KeyFn1KeyFn2KeyFnDKeyFnEKeyFnFKeyFnSKeyFnB KeyBrlDot1 KeyBrlDot2 KeyBrlDot3 KeyBrlDot4 KeyBrlDot5 KeyBrlDot6 KeyBrlDot7 KeyBrlDot8 KeyBrlDot9 KeyBrlDot10 KeyNumeric0 KeyNumeric1 KeyNumeric2 KeyNumeric3 KeyNumeric4 KeyNumeric5 KeyNumeric6 KeyNumeric7 KeyNumeric8 KeyNumeric9KeyNumericStarKeyNumericPound KeyNumericA KeyNumericB KeyNumericC KeyNumericDKeyCameraFocus KeyWpsButtonKeyTouchpadToggle KeyTouchpadOnKeyTouchpadOffKeyCameraZoominKeyCameraZoomout KeyCameraUp KeyCameraDown KeyCameraLeftKeyCameraRightKeyAttendantOnKeyAttendantOffKeyAttendantToggleKeyLightsToggle BtnDpadUp BtnDpadDown BtnDpadLeft BtnDpadRight KeyAlsToggleKeyButtonconfigKeyTaskmanager KeyJournalKeyControlpanel KeyAppselectKeyScreensaverKeyVoicecommandKeyBrightnessMinKeyBrightnessMaxKeyKbdinputassistPrevKeyKbdinputassistNextKeyKbdinputassistPrevgroupKeyKbdinputassistNextgroupKeyKbdinputassistAcceptKeyKbdinputassistCancelBtnTriggerHappyBtnTriggerHappy1BtnTriggerHappy2BtnTriggerHappy3BtnTriggerHappy4BtnTriggerHappy5BtnTriggerHappy6BtnTriggerHappy7BtnTriggerHappy8BtnTriggerHappy9BtnTriggerHappy10BtnTriggerHappy11BtnTriggerHappy12BtnTriggerHappy13BtnTriggerHappy14BtnTriggerHappy15BtnTriggerHappy16BtnTriggerHappy17BtnTriggerHappy18BtnTriggerHappy19BtnTriggerHappy20BtnTriggerHappy21BtnTriggerHappy22BtnTriggerHappy23BtnTriggerHappy24BtnTriggerHappy25BtnTriggerHappy26BtnTriggerHappy27BtnTriggerHappy28BtnTriggerHappy29BtnTriggerHappy30BtnTriggerHappy31BtnTriggerHappy32BtnTriggerHappy33BtnTriggerHappy34BtnTriggerHappy35BtnTriggerHappy36BtnTriggerHappy37BtnTriggerHappy38BtnTriggerHappy39BtnTriggerHappy40 SyncEvent SynReport SynConfig SynMtReport SynDropped EventTypeEvSynEvKeyEvRelEvAbsEvMscEvSwEvLedEvSndEvRepEvFfEvPwr EvFfStatus$fEnumEventType$fEnumSyncEvent $fEnumKey$fEnumRelativeAxis$fEnumAbsoluteAxis$fEnumSwitchEvent$fEnumMiscEvent$fEnumLEDEvent$fEnumRepeatEvent$fEnumSoundEvent$fEnumDeviceProperty$fBoundedDeviceProperty$fEqDeviceProperty$fOrdDeviceProperty$fReadDeviceProperty$fShowDeviceProperty$fBoundedSoundEvent$fEqSoundEvent$fOrdSoundEvent$fReadSoundEvent$fShowSoundEvent$fBoundedRepeatEvent$fEqRepeatEvent$fOrdRepeatEvent$fReadRepeatEvent$fShowRepeatEvent$fBoundedLEDEvent $fEqLEDEvent $fOrdLEDEvent$fReadLEDEvent$fShowLEDEvent$fBoundedMiscEvent $fEqMiscEvent$fOrdMiscEvent$fReadMiscEvent$fShowMiscEvent$fBoundedSwitchEvent$fEqSwitchEvent$fOrdSwitchEvent$fReadSwitchEvent$fShowSwitchEvent$fBoundedAbsoluteAxis$fEqAbsoluteAxis$fOrdAbsoluteAxis$fReadAbsoluteAxis$fShowAbsoluteAxis$fBoundedRelativeAxis$fEqRelativeAxis$fOrdRelativeAxis$fReadRelativeAxis$fShowRelativeAxis $fBoundedKey$fEqKey$fOrdKey $fReadKey $fShowKey$fBoundedSyncEvent $fEqSyncEvent$fOrdSyncEvent$fReadSyncEvent$fShowSyncEvent$fBoundedEventType $fEqEventType$fOrdEventType$fReadEventType$fShowEventTypeLEDValueLedOnLedOffAbsInfoabsValue absMinimum absMaximumabsFuzzabsFlat absResolutionCTimeValtvSectvUsecCEvent cEventType cEventCode cEventValue cEventTimeKeyEventReleasedPressedRepeated EventValue EventCode RelativeEvent AbsoluteEventForceFeedbackEvent PowerEventForceFeedbackStatusEvent UnknownEventEvent eventData eventTimeDevice devicePath grabDevice ungrabDevice nextEvent nextEventMay fromCEventfromCEventDatatoCEvent toCEventData fromCTimeVal toCTimeVal newDevicenewDeviceFromFdevdevDir deviceNamedeviceFd devicePhys deviceUniq deviceProduct deviceVendor deviceBustype deviceVersiondevicePropertiesdeviceEventTypesdeviceHasEvent deviceAbsAxis setDeviceLED$fCErrInfoDevice $fShowDevice $fEqEvent $fOrdEvent $fShowEvent $fEqEventData$fOrdEventData$fShowEventData$fBoundedKeyEvent$fEnumKeyEvent $fEqKeyEvent $fOrdKeyEvent$fReadKeyEvent$fShowKeyEvent$fEqEventValue$fOrdEventValue$fShowEventValue$fEnumEventValue $fEqEventCode$fOrdEventCode$fShowEventCode$fEnumEventCode DeviceOptsphysuniq idProductidVendor idBustype idVersionkeysrelAxesabsAxesmiscsswitchsledssoundsrepsffspowersffStatsdefaultDeviceOpts writeEvent writeBatch deviceSyspath deviceDevnodeUInputOpenMode UOMManagedUDeviceGrabModeLibevdevUngrab LibevdevGrabReadFlagBlocking ForceSyncNormalSynclibevdev_kernel_set_led_value'_ writeEvent'_ enableCode'_ enableType'_libevdev_set_id_version'_libevdev_set_id_bustype'_libevdev_set_id_vendor'_libevdev_set_id_product'_deviceVersion'_deviceBustype'_deviceVendor'_deviceProduct'_ deviceUniq'_ devicePhys'_ deviceName'_ deviceFd'_hasEventCode'_hasEventType'_ hasProperty'_libevdev_uinput_get_devnode'_libevdev_uinput_get_syspath'_libevdev_set_uniq'_libevdev_set_phys'_libevdev_set_name'_libevdev_set_fd'_libevdev_new'_libevdev_grab'_libevdev_next_event'_libevdev_uinput_destroylibevdev_hs_closelibevdev_get_abs_info"libevdev_uinput_create_from_device withDevice withUDevicelibevdev_next_eventgetEvent libevdev_grab libevdev_newlibevdev_set_fdlibevdev_set_name setDeviceNamelibevdev_set_phys setDevicePhyslibevdev_set_uniq setDeviceUniqcreateFromDevicelibevdev_uinput_get_syspath getSyspathlibevdev_uinput_get_devnode getDevnode withAbsInfo getAbsInfo hasProperty hasEventType hasEventCodelibevdev_set_id_productlibevdev_set_id_vendorlibevdev_set_id_bustypelibevdev_set_id_version enableType enableCodelibevdev_kernel_set_led_value convertEnum.:unFd handleNull packCString' negateErrnoCErrCallcErrCall CErrCallResCErrInfocErrInfo fromEnum'baseSystem.Posix.TypesFd