首页 > 解决方案 > 在 xmonad 中,有些键绑定有效,有些则无效?

问题描述

我正在尝试 Xmonad 并正在构建一个配置文件。但是我对键绑定有疑问。我的一些键绑定正在工作,而有些则没有。这对我来说毫无意义。它编译得很好,没有错误。对我来说,要么全部工作,要么都不工作。为什么只是一些?

例如,我可以启动终端、锁定屏幕、启动文件管理器,但我无法启动 firefox 或 vscode。下一节也一样。我可以启动 rofi 启动器、rofi 窗口查找器,但 dmenu 和 rofi 退出菜单在我的配置中无法使用:

terminalCmd         = "alacritty"
browserCmd          = "firefox"
editorCmd           = "code"
fileManagerCmd      = "nautilus --new-window"
dmenuCmd            = "dmenu_run"
rofiCmd             = "rofi -show drun -theme clean"
rofiWinCmd          = "rofi -show window -theme clean_window"
rofiExitCmd         = "~/.config/rofi/launch.sh powermenu"
screenLockCmd       = "slock"
myFocusFollowsMouse = True

myKeybindings conf@XConfig {modMask = modMask} = M.fromList $
    --Launch programs
    [ ((modMask, xK_Return), spawn terminalCmd)              --Launch terminal
    , ((modMask, xK_w), spawn browserCmd)                    --Launch browser
    , ((modMask, xK_e), spawn editorCmd)                     --Launch editor
    , ((modMask, xK_a), spawn fileManagerCmd)                --Launch file manager
    , ((modMask, xK_l), spawn screenLockCmd)                 --Lock the screen

    --Launchers and menus
    , ((modMask, xK_r), spawn dmenuCmd)                      --Launch dmenu launcher
    , ((modMask, xK_p), spawn rofiCmd)                       --Launch rofi launcher
    , ((modMask .|. shiftMask, xK_p), spawn rofiWinCmd)      --Launch rofi window finder
    , ((modMask .|. shiftMask, xK_e), spawn rofiExitCmd)     --Launch rofi exit menu

main = xmonad $ def
    { modMask             = mod4Mask
    , focusFollowsMouse   = myFocusFollowsMouse
    , borderWidth         = 1
    , terminal            = terminalCmd
    , normalBorderColor   = "#cccccc"
    , focusedBorderColor  = "#cd8b00"
    , workspaces          = myWorkspaces 
    , keys                = myKeybindings
    , startupHook         = myStartupHook }

标签: xmonad

解决方案


这是我将如何调试问题。

  1. 尝试在终端中输入原始命令。如果这不起作用,您知道问题不在于您的 XMonad 配置或 XMonad,而在于命令本身。

  2. 如果该命令在终端中有效,请尝试将其绑定到 XMonad 中的其他键。如果可行,那么问题出在键绑定上。启动xev,按您要使用的键,然后仔细检查触发事件的名称。

  3. 当您使用 XMonad 启动它们时,获取当前正在运行的命令之一,并尝试其绑定到您遇到问题的键之一。

  • 如果它有效,那么您的原始命令有问题。如果第 1 步有效,那么问题可能与直接在 XWindows 而不是终端中启动命令有关。

  • 如果它不起作用,则更多的是确认您没有使用正确的键绑定。

此外,要排除PATHXMonad 看到的环境变量值与终端看到的值之间的任何差异,请尝试在配置中提供命令的完整路径。


推荐阅读