diff --git a/src/backend/common.rs b/src/backend/common.rs index 888fdc5..51422c9 100644 --- a/src/backend/common.rs +++ b/src/backend/common.rs @@ -68,10 +68,14 @@ where app.screens.clear(); let data = if let Some(wl) = wl.as_mut() { - keymap = get_keymap_wl().ok(); + keymap = get_keymap_wl() + .map_err(|f| log::warn!("Could not load keyboard layout: {}", f)) + .ok(); crate::overlays::screen::create_screens_wayland(wl, app)? } else { - keymap = get_keymap_x11().ok(); + keymap = get_keymap_x11() + .map_err(|f| log::warn!("Could not load keyboard layout: {}", f)) + .ok(); match crate::overlays::screen::create_screens_x11pw(app) { Ok(data) => data, Err(e) => { diff --git a/src/hid/x11.rs b/src/hid/x11.rs index c6d9a63..a5bb4dc 100644 --- a/src/hid/x11.rs +++ b/src/hid/x11.rs @@ -10,6 +10,11 @@ pub fn get_keymap_x11() -> anyhow::Result { let (conn, _) = xcb::Connection::connect(None)?; let device_id = get_core_keyboard_device_id(&conn); + if device_id == -1 { + return Err(anyhow::anyhow!( + "get_core_keyboard_device_id returned -1. Check your XKB installation." + )); + } let keymap = keymap_new_from_device(&context, &conn, device_id, xkb::KEYMAP_COMPILE_NO_FLAGS); Ok(XkbKeymap { context, keymap }) diff --git a/src/res/keyboard.yaml b/src/res/keyboard.yaml index 992cca3..80e27e3 100644 --- a/src/res/keyboard.yaml +++ b/src/res/keyboard.yaml @@ -62,29 +62,51 @@ macros: # Value: Array of strings. 0th element is the upper row, 1st element is lower row. # For empty labels, use [] (do not use ~) labels: - "Escape": ["Esc"] - "Prior": ["PgUp"] - "Next": ["PgDn"] - "NumLock": ["Num"] - "Space": [] - "LAlt": ["Alt"] - "LCtrl": ["Ctrl"] - "RCtrl": ["Ctrl"] - "LSuper": ["Super"] - "RSuper": ["Super"] - "LShift": ["Shift"] - "RShift": ["Shift"] - "Insert": ["Ins"] - "Delete": ["Del"] - "BackSpace": ["<<"] - "KP_Divide": [" /"] - "KP_Add": [" +"] - "KP_Multiply": [" *"] - "KP_Decimal": [" ."] - "KP_Subtract": [" -"] - "KP_Enter": ["Ent"] - "Print": ["Prn"] - "Scroll": ["Scr"] - "Pause": ["Brk"] - "XF86Favorites": ["Rofi"] + "Escape": ["Esc"] + "Prior": ["PgUp"] + "Next": ["PgDn"] + "NumLock": ["Num"] + "Space": [] + "LAlt": ["Alt"] + "LCtrl": ["Ctrl"] + "RCtrl": ["Ctrl"] + "LSuper": ["Super"] + "RSuper": ["Super"] + "LShift": ["Shift"] + "RShift": ["Shift"] + "Insert": ["Ins"] + "Delete": ["Del"] + "BackSpace": ["<<"] + "KP_Divide": [" /"] + "KP_Add": [" +"] + "KP_Multiply": [" *"] + "KP_Decimal": [" ."] + "KP_Subtract": [" -"] + "KP_Enter": ["Ent"] + "Print": ["Prn"] + "Scroll": ["Scr"] + "Pause": ["Brk"] + "XF86Favorites": ["Menu"] # fallback labels below + "N1": ["1", "!"] + "N2": ["2", "@"] + "N3": ["3", "#"] + "N4": ["4", "$"] + "N5": ["5", "%"] + "N6": ["6", "^"] + "N7": ["7", "&"] + "N8": ["8", "*"] + "N9": ["9", "("] + "N0": ["0", ")"] + "Minus": ["-", "_"] + "Plus": ["=", "+"] + "Comma": [" ,", "<"] + "Period": [" .", ">"] + "Oem1": [" ;", ":"] + "Oem2": [" /", "?"] + "Oem3": ["`", "~"] + "Oem4": [" [", "{"] + "Oem5": [" \\", "|"] + "Oem6": [" ]", "}"] + "Oem7": [" '", "\""] + "Oem102": [" \\", "|"]