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_1.13387

에 대한 의견이 있습니다.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로 전환합니다.

numlockxAlways On Login 등의 프로그램 사용을 권장합니다 .

답변2

Shift 수정자를 추가하여 창을 작업 공간으로 이동하려면 숫자 키패드 숫자가 숫자 키패드 명령(예: KP_1-> KP_End)으로 변환된다는 점을 기억하세요. xmodmap -pke | grep KP_를 사용하면 어떤 숫자가 어떤 명령에 해당하는지 확인할 수 있습니다 . 이상하게도 mumlock(mod2)을 명시적으로 지정하고 i3에서 Shift를 지정해야 합니다. 이것은 나에게 효과적입니다.

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

편집: 언급된 내용에서 정확한 해결 방법을 찾았습니다.지텁질문. 너무 늦었지만, 글쎄요 :D

답변3

음..완성하는데 6시간정도 걸렸네요. 그래서 제가 어떻게 했는지 간단한 이력서를 작성하겠습니다.

모니터가 2개 있어서 다음과 같이 했습니다.

파일을 만들고 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... 로 이름 을 지정 하세요 . (이유는 나중에 말씀드리겠습니다 ;D).ws01ws02ws03ws1ws2ws3

완료되면 이 파일을 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

이제 아래와 같이 conf가 작업 공간으로 전환되도록 합니다.

# 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에 전화를 걸면 번호 11과 ws-icon-1 = "1;I"충돌 하므로 주의하세요.ws

시스템 시작 버그

$mod+1시스템을 부팅할 때마다 i3가 워크플로 01( ) 대신 워크플로 1( ) 에서 시작되는 것을 확인했습니다 $mod+mod2+KP_1. 그래서 저는 이 문제를 해결하기 위해 Python으로 미니 스크립트를 만들었습니다.

Workflow.py 구성

import pyautogui

p=pyautogui

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

물론 i3가 부팅될 때마다(i3 자동 시작) 스크립트를 시작하는데 더 좋은 방법이 있는지는 모르겠지만 이것이 제가 찾은 유일한 방법입니다.

관련 정보