Keyboard layout switch

I’ve been running Openbox/i3wm on Antergos with this command in i3 config file to switch the keyboard layout:

exec --no-startup-id "setxkbmap -model pc105 -layout us,ru -variant ,phonetic_winkeys -option grp:alt_shift_toggle,compose:ralt"

Installed Archlabs today, running i3 and that command doesn’t seem to work anymore.

Any ideas why?

Do you mean that the setxkbmap command doesn’t work or do you mean that the command itself works but it is not executed by i3 when the desktop loads?

Not executed by i3 when I reload it with mod+shft+r or mod+shift+c

Which “i3 config file” did you use and what are the full contents please?

I use config file in ~/.config/i3 (trying to repost for better formatting but don’t know how)

# ArchLabs i3 config

Xresources var value fallback

set_from_resource $bg background #19043C
set_from_resource $fg foreground #F1F1F1
set_from_resource $black color0 #19043C
set_from_resource $red color1 #EE79A9
set_from_resource $green color2 #8C9440
set_from_resource $yellow color3 #DE935F
set_from_resource $blue color4 #05C6F1
set_from_resource $purple color5 #85678F
set_from_resource $cyan color6 #5E8D87
set_from_resource $grey color7 #969CD3

class bd bg txt ind child_bd

client.focused $grey $bg $fg $blue $grey
client.unfocused $grey $bg $black $bg $bg
client.focused_inactive $grey $bg $black $bg $bg
client.urgent $red $bg $red $red $red
client.placeholder $grey $bg $bg $bg $bg
client.background $bg

border & title… Must be set to border pixel for gaps to work

for_window [class="^.*"] border pixel 2, title_format " %class >> %title "

gaps

gaps inner 5
gaps outer 5

font

font pango:DejaVu Sans Mono 10

$Mod = Super or Alt?

set $Mod Mod4
#set $Mod Mod1

Keyboard switch

exec --no-startup-id “setxkbmap -model pc105 -layout us,ru -variant ,phonetic_winkeys -option grp:alt_shift_toggle,compose:ralt”

direction keys

set $up l
set $down k
set $left j
set $right semicolon

set $WS1 “1: ”
set $WS2 “2: ”
set $WS3 “3: ”
set $WS4 “4: ”
set $WS5 “5: ”
set $WS6 “6: ”
set $WS7 “7: ”
set $WS8 “8: ”

monitors

set $Mon1 HDMI1
set $Mon2 HDMI2

#####################################################
############### Autostart ##################
#####################################################

run with reload

exec_always --no-startup-id al-polybar-session
exec_always --no-startup-id nitrogen --restore
exec_always --no-startup-id xrdb -load ~/.Xresources

Trayer

exec_always --no-startup-id pkill trayer; trayer --edge bottom
–align left --heighttype pixel --height 18 --widthtype request
–SetDockType false --expand true --transparent true --alpha 255

If you have a numpad you may want to enable this

exec_always --no-startup-id numlockx on

Start megasync

exec --no-startup-id megasync

exec_always --no-startup-id megasync

run once

exec --no-startup-id ksuperkey -e ‘Super_L=Alt_L|F1’
exec --no-startup-id al-compositor --start
exec --no-startup-id nitrogen --restore
exec --no-startup-id xfsettingsd
exec --no-startup-id lxpolkit

###########################################################
############# Bindings ##################
###########################################################

kill focused window

bindsym $Mod+Shift+q kill
bindsym Mod1+q kill

launchers

bindsym Control+space exec --no-startup-id rofr.sh -r

this is needed for super key to launch rofi

bindsym Mod1+F1 exec --no-startup-id rofr.sh -r

core

bindsym $Mod+e exec --no-startup-id geany
bindsym $Mod+t exec exo-open --launch TerminalEmulator
bindsym $Mod+w exec exo-open --launch WebBrowser
bindsym $Mod+f exec exo-open --launch FileManager

start a terminal

bindsym $mod+Return exec termite

logout script

bindsym $Mod+x exec --no-startup-id rofr.sh -l

Screenshot

bindsym Print exec --no-startup-id “scrot ‘%S.png’
-e ‘mv $f $$(xdg-user-dir PICTURES)/ArchLabs-%S-$wx$h.png
; gpicview $$(xdg-user-dir PICTURES)/ArchLabs-%S-$wx$h.png’”

audio

bindsym XF86AudioPlay exec --no-startup-id playerctl play-pause
bindsym XF86AudioNext exec --no-startup-id playerctl next
bindsym XF86AudioPrev exec --no-startup-id playerctl previous
bindsym XF86AudioStop exec --no-startup-id playerctl stop
bindsym XF86AudioRaiseVolume exec --no-startup-id pamixer -i 5
bindsym XF86AudioLowerVolume exec --no-startup-id pamixer -d 5
bindsym XF86AudioMute exec --no-startup-id pamixer -t

backlight

bindsym XF86MonBrightnessUp exec --no-startup-id xbacklight -inc 10
bindsym XF86MonBrightnessDown exec --no-startup-id xbacklight -dec 10

################################################################
########### Workspace Bindings ###############
################################################################

workspace assignment

workspace $WS1 output $Mon1
workspace $WS2 output $Mon1
workspace $WS3 output $Mon1
workspace $WS4 output $Mon1
workspace $WS5 output $Mon2
workspace $WS6 output $Mon2
workspace $WS7 output $Mon2
workspace $WS8 output $Mon2

switch to workspace

bindsym $Mod+1 workspace $WS1
bindsym $Mod+2 workspace $WS2
bindsym $Mod+3 workspace $WS3
bindsym $Mod+4 workspace $WS4
bindsym $Mod+5 workspace $WS5
bindsym $Mod+6 workspace $WS6
bindsym $Mod+7 workspace $WS7
bindsym $Mod+8 workspace $WS8

move focused container to workspace

bindsym $Mod+Shift+1 move container to workspace $WS1; workspace $WS1
bindsym $Mod+Shift+2 move container to workspace $WS2; workspace $WS2
bindsym $Mod+Shift+3 move container to workspace $WS3; workspace $WS3
bindsym $Mod+Shift+4 move container to workspace $WS4; workspace $WS4
bindsym $Mod+Shift+5 move container to workspace $WS5; workspace $WS5
bindsym $Mod+Shift+6 move container to workspace $WS6; workspace $WS6
bindsym $Mod+Shift+7 move container to workspace $WS7; workspace $WS7
bindsym $Mod+Shift+8 move container to workspace $WS8; workspace $WS8

############################################################
############## Reload configs ################
############################################################

restart i3 inplace (preserves your layout/session, can be used to upgrade i3)

bindsym $Mod+Shift+r restart

reload the configuration file

bindsym $Mod+Shift+c reload

########################################################
############ Container/Window control ############
########################################################

Scratchpad, Floating

bindsym $Mod+Shift+space floating toggle
floating_modifier Mod1

bindsym $Mod+Shift+z move scratchpad
bindsym $Mod+z scratchpad show

change focus

bindsym $Mod+$left focus left
bindsym $Mod+$down focus down
bindsym $Mod+$up focus up
bindsym $Mod+$right focus right

alternatively, you can use the cursor keys:

bindsym $Mod+Left focus left
bindsym $Mod+Down focus down
bindsym $Mod+Up focus up
bindsym $Mod+Right focus right

bindsym $Mod+p focus parent
bindsym $Mod+c focus child

move focused window

bindsym $Mod+Shift+$left move left 10px
bindsym $Mod+Shift+$down move down 10px
bindsym $Mod+Shift+$up move up 10px
bindsym $Mod+Shift+$right move right 10px

alternatively, you can use the cursor keys:

bindsym $Mod+Shift+Up move up 10px
bindsym $Mod+Shift+Down move down 10px
bindsym $Mod+Shift+Left move left 10px
bindsym $Mod+Shift+Right move right 10px

Size

bindsym Mod1+Up resize shrink height 10 px or 1 ppt
bindsym Mod1+Down resize grow height 10 px or 1 ppt
bindsym Mod1+Left resize shrink width 10 px or 1 ppt
bindsym Mod1+Right resize grow width 10 px or 1 ppt

layout toggle, keycode 23 is Tab

bindcode Mod1+23 layout toggle tabbed split
bindcode $Mod+23 layout toggle splitv splith

switch to workspace with urgent window

for_window [urgent=“latest”] focus
focus_on_window_activation focus

container layout

bindsym $Mod+h split h
bindsym $Mod+v split v
bindsym $Mod+Shift+t layout tabbed
bindsym $Mod+Shift+s layout stacking
bindsym $Mod+Shift+h layout toggle split
default_orientation horizontal

######################################################
############### Border & Gaps ###############
######################################################

new_window normal
new_float normal
hide_edge_borders both
popup_during_fullscreen smart
bindsym $Mod+shift+b border toggle

changing border style

bindsym $Mod+n border normal
bindsym $Mod+y border 1pixel
bindsym $Mod+u border none

change gaps

bindsym $Mod+plus gaps inner current plus 5
bindsym $Mod+minus gaps inner current minus 5
bindsym $Mod+Shift+plus gaps outer current plus 5
bindsym $Mod+Shift+minus gaps outer current minus 5
bindsym $Mod+Control+plus gaps inner all plus 5
bindsym $Mod+Control+minus gaps inner all minus 5
bindsym $Mod+Control+Shift+plus gaps outer all plus 5
bindsym $Mod+Control+Shift+minus gaps outer all minus 5

###################################################
############ application settings ############
###################################################

for_window [class="(?i)(?:qt5ct|pinentry)"] floating enable, focus
for_window [class="(?i)(?:termite|thunar)"] focus
for_window [class="(?i)(?:geany|firefox)"] focus

Assign Applications to specific workspace

get class with xprop

assign [class="(?i)(?:chromium)"] → $WS2

assign [class="(?i)(?:geany)"] → $WS2

assign [class="(?i)(?:thunar)"] → $WS3

focus, floating, & sticky

for_window [title="(?i)(?:copying|deleting|moving)"] floating enable
for_window [window_role="(?i)(?:pop-up|setup)"] floating enable

set trayer to be borderless

for_window [class="(?i)trayer"] border pixel 0

To start a code block, use a line containing only three backticks (```), end the block in the same way.

Your file looks fine to me (unless I’ve missed something) but perhaps try moving the keyboard line to the very end of the file to eliminate any conflicts.

It could be that ArchLabs configures the keyboard after launching the window manager so please await a reply from someone more familiar with the configuration minutiae.

Thanks for your help.

All good with the keyboard, I put the command at the end of the file and rebooted (as opposed to reload the config file) and it’s working.

Nice! Glad you got it working.

In your i3 config, did you try that command with “exec_always” instead of just “exec”?

exec_always --no-startup-id "setxkbmap -model pc105 -layout us,ru -variant ,phonetic_winkeys -option 
grp:alt_shift_toggle,compose:ralt"

that should run the command whenever you restart/reload i3.

1 Like

Great, thank you.

1 Like