我一直在尝试在 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_1
。133
87
有评论在GitHub说数字键盘无法使用钥匙。真的吗 ?
没有人有类似的绑定$mod + KP_2
吗?
答案1
解决了。他们确实应该将其添加到文档中。感谢 IRC 频道上的人为我提供的帮助。
好的,因为KP_0
和键位于数字键盘上,打开KP_1
时它们只能以数字方式工作,否则它们是、等。现在对于普通人来说这很好,但这不起作用的原因numlock
KP_END
KP_HOME
i3
是因为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 个或更多显示器,请将名称命名WS
为ws01
, 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 自动启动)时我都会启动脚本,我不知道是否有更好的方法来解决它,但这是我找到的唯一方法。