From 0801fb7d86a4b89b60aff0b9ae182595d6f0884a Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Thu, 14 May 2026 18:50:52 +0200 Subject: [PATCH] wl_backend: handle Ctrl+Alt+Fn for VT switching in standalone mode Intercept XF86Switch_VT_N keysyms and call wlr_session_change_vt() to switch virtual terminals when running on DRM/KMS. --- src/backend/wayland/wl_backend.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/backend/wayland/wl_backend.c b/src/backend/wayland/wl_backend.c index 8647c22..8509029 100644 --- a/src/backend/wayland/wl_backend.c +++ b/src/backend/wayland/wl_backend.c @@ -1667,6 +1667,17 @@ handle_keyboard_key(struct wl_listener *listener, void *data) uint32_t keycode = event->keycode + 8; /* evdev → XKB keycode */ uint32_t modifiers = wlr_keyboard_get_modifiers(kb); + /* VT switching: Ctrl+Alt+Fn */ + if (wl_state.session && event->state == WL_KEYBOARD_KEY_STATE_PRESSED && + (modifiers & (WLR_MODIFIER_CTRL | WLR_MODIFIER_ALT)) == + (WLR_MODIFIER_CTRL | WLR_MODIFIER_ALT)) { + xkb_keysym_t sym = xkb_state_key_get_one_sym(kb->xkb_state, keycode); + if (sym >= XKB_KEY_XF86Switch_VT_1 && sym <= XKB_KEY_XF86Switch_VT_12) { + wlr_session_change_vt(wl_state.session, sym - XKB_KEY_XF86Switch_VT_1 + 1); + return; + } + } + if (event->state == WL_KEYBOARD_KEY_STATE_PRESSED) { /* Try WM shortcut dispatch first */ if (wWaylandKeyPress((unsigned int)keycode, (unsigned int)modifiers))