i3 上的绑定小键盘键不起作用

i3 上的绑定小键盘键不起作用

我一直在尝试在 i3 上绑定小键盘数字键,但没有成功。这看起来是一件很简单的事情,但它不起作用。我不明白为什么。

键盘布局:美国英语默认

例如:

bindsym $mod+KP_1 workspace $ws1

不做任何事情。

bindcode $mod+$KP_1 workspace $ws1

错误提示我的 i3 配置存在以下错误:

ERROR: Could not parse "$mod+$KP_1" as an input code, ignoring this binding.

$mod并在运行绑定代码之前设置$KP_113387

有评论在GitHub说数字键盘无法使用钥匙。真的吗 ?

没有人有类似的绑定$mod + KP_2吗?

答案1

解决了。他们确实应该将其添加到文档中。感谢 IRC 频道上的人为我提供的帮助。

好的,因为KP_0和键位于数字键盘上,打开KP_1时它们只能以数字方式工作,否则它们是、等。现在对于普通人来说这很好,但这不起作用的原因numlockKP_ENDKP_HOMEi3是因为i3需要告诉numlock是开的。 它本身还不够聪明,无法弄清楚这一点。

因此需要相应地编写键绑定。所以正确的键绑定是:

bindsym $mod+mod2+KP_1 workspace $ws1
bindsym $mod+mod2+KP_2 workspace $ws2
bindsym $mod+mod2+KP_3 workspace $ws3
bindsym $mod+mod2+KP_4 workspace $ws4
bindsym $mod+mod2+KP_5 workspace $ws5
bindsym $mod+mod2+KP_6 workspace $ws6
bindsym $mod+mod2+KP_7 workspace $ws7
bindsym $mod+mod2+KP_8 workspace $ws8

显而易见的问题是什么mod2?好吧,只要跑xmodmap,你就会发现。大多数时候都是如此NumLock

现在看看这个配置,它可能看起来像是我在绑定中添加了另一个按键,但事实并非如此。既然numlock已经是,ON我只需按第一个修饰符和数字键盘键即可。我不必mod2因为它“已经按下”,可以这么说

所以我只需按键盘上的 Super(mod) 和 KP_1 将工作区切换到 1。

建议使用诸如numlockx始终打开登录之类的程序。

答案2

如果您还想通过添加 Shift 修饰符将窗口移动到工作区,请记住数字键盘数字会转换为数字键盘命令(例如KP_1-> KP_End)。您可以使用xmodmap -pke | grep KP_来找出哪个数字对应于哪个命令。奇怪的是,您仍然需要在 i3 中显式指定 mumlock (mod2) 和 shift 。这对我有用:

bindsym $mod+mod2+KP_1 workspace $ws1
bindsym $mod+mod2+Shift+KP_End move container to workspace $ws1

编辑:刚刚在提到的内容中找到了这个确切的解决方法吉图布问题。太晚了,但是哦,好吧:D

答案3

嗯..我花了大约6个小时才完成。因此,我将制作一份简单的简历,说明我是如何做到的:

我有两个显示器,所以我做了以下操作:

我创建了一个文件workspaces.conf,并在其中执行了以下操作:

# assign workspaces to screens
workspace 1  output $Monitor_left
workspace 2  output $Monitor_left
...
workspace 9  output $Monitor_left
workspace 10 output $Monitor_left

workspace 11 output $Monitor_right
workspace 12 output $Monitor_right
...
workspace 19 output $Monitor_right
workspace 20 output $Monitor_right

# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws01 "1"
set $ws02 "2"
....
set $ws09 "9"
set $ws00 "10"

set $ws11 "11"
...
set $ws19 "19"
set $ws20 "20"

如果您有 2 个或更多显示器,请将名称命名WSws01, ws02, ws03,... 而不是ws1, ws2, ws3。 (稍后我会告诉你原因;D)。

完成后,您可以将此文件包含在您的 i3config 中

配置

include $HOME/.config/i3/workspaces.conf

之后,确保添加超级键(只需使用命令xmodmap

#Master key Super "Windows" and Alt Left "alt"
(soon you will understand why 2 mod keys)

    set $mod Mod4
    set $mod_alt Mod1

现在将监视器设置在变量内(您可以使用命令xrand并找出输出是什么)

set $Monitor_left DP-0
set $Monitor_right HDMI-0

现在让confs切换到工作区,如下所示:

# switch to workspace
# Monitor1
bindsym $mod+mod2+KP_1  workspace $ws01 ; move workspace to output $Monitor_left
bindsym $mod+mod2+KP_2  workspace $ws02 ; move workspace to output $Monitor_left
 ......
bindsym $mod+mod2+KP_9  workspace $ws09 ; move workspace to output $Monitor_left
bindsym $mod+mod2+KP_0  workspace $ws00 ; move workspace to output $Monitor_left

# Monitor2
bindsym $mod_alt+mod2+KP_1   workspace $ws11 ; move workspace to output $Monitor_right
bindsym $mod_alt+mod2+KP_2   workspace $ws12 ; move workspace to output $Monitor_right
.....
bindsym $mod_alt+mod2+KP_9   workspace $ws19 ; move workspace to output $Monitor_right
bindsym $mod_alt+mod2+KP_0   workspace $ws20 ; move workspace to output $Monitor_right

它几乎是完美的:)从现在开始,您可以使用superkey+number(windows_key) /superkey+numpad_number切换到左侧显示器上的所有工作区 (1-10) 并alt_left+numpad_number切换到右侧显示器上的所有工作区 (11-20)

将容器移动到其他工作空间!为此,您只需在此处复制此行或使用命令xmodmap -pke | grep KP_查找正确的键

# move focused container to workspace 
# (monitor1 numpad)
bindsym $mod+Mod2+Shift+KP_End move container to workspace    $ws01 
bindsym $mod+Mod2+Shift+KP_Down move container to workspace   $ws02 
bindsym $mod+Mod2+Shift+KP_Next move container to workspace   $ws03 
bindsym $mod+Mod2+Shift+KP_Left move container to workspace   $ws04 
bindsym $mod+Mod2+Shift+KP_Begin move container to workspace  $ws05 
bindsym $mod+Mod2+Shift+KP_Right move container to workspace  $ws06 
bindsym $mod+Mod2+Shift+KP_Home move container to workspace   $ws07 
bindsym $mod+Mod2+Shift+KP_Up move container to workspace     $ws08 
bindsym $mod+Mod2+Shift+KP_Prior move container to workspace  $ws09
bindsym $mod+Mod2+Shift+KP_Insert move container to workspace $ws00

# (Monitor2 numpad)
bindsym $mod_alt+Mod2+Shift+KP_End move container to workspace    $ws11 
bindsym $mod_alt+Mod2+Shift+KP_Down move container to workspace   $ws12 
bindsym $mod_alt+Mod2+Shift+KP_Next move container to workspace   $ws13 
bindsym $mod_alt+Mod2+Shift+KP_Left move container to workspace   $ws14 
bindsym $mod_alt+Mod2+Shift+KP_Begin move container to workspace  $ws15 
bindsym $mod_alt+Mod2+Shift+KP_Right move container to workspace  $ws16 
bindsym $mod_alt+Mod2+Shift+KP_Home move container to workspace   $ws17 
bindsym $mod_alt+Mod2+Shift+KP_Up move container to workspace     $ws18 
bindsym $mod_alt+Mod2+Shift+KP_Prior move container to workspace  $ws19
bindsym $mod_alt+Mod2+Shift+KP_Insert move container to workspace $ws20

我从未使用过 i3bar,也不知道如何配置它。但如果你使用的是 Polybar 那么你需要像这样配置:

[模块/i3] ...

ws-icon-0 = "00;X"
ws-icon-1 = "01;I"
ws-icon-2 = "02;II"
ws-icon-3 = "03;III"
ws-icon-4 = "04;IV"
ws-icon-5 = "05;V"
ws-icon-6 = "06;VI"
ws-icon-7 = "07;VII"
ws-icon-8 = "08;VIII"
ws-icon-9 = "09;IX"

请注意,如果您尝试像这样调用 WS:它将与数字 11ws-icon-1 = "1;I"发生冲突ws

系统启动BUG

我注意到每次启动系统时,我的 i3 都会在工作流 1 ( $mod+1) 而不是工作流 01 ( $mod+mod2+KP_1) 中启动。所以我用 python 创建了一个迷你脚本来解决这个问题

配置工作流.py

import pyautogui

p=pyautogui

p.hotkey('win', 'right')
p.hotkey('altleft', 'num1')
p.hotkey('win', 'left')
p.hotkey('win', 'num1')

当然,每次我的 i3 启动(i3 自动启动)时我都会启动脚本,我不知道是否有更好的方法来解决它,但这是我找到的唯一方法。

相关内容