Ok, yet another try, this one will do the trick I hope... ;)
Credits are due to reverendj1, who described a way of assigning a Custom key to toggle keyboard layout, using setxkbmap, which featured in the workaround alluded to in Edit 2 of my previous answer...
Here is the slightly more involved way, but will give you more
flexibility for the key combination. First, copy and paste this script
I wrote and name it something like kb_toggle.sh. Make sure to edit
LANG1 and LANG2 to be the keyboard layout codes you need.
#!/bin/bash
LANG1="us"
LANG2="de"
CURRENT_LANG=$(setxkbmap -query | tail -n 1 | cut -f6 -d ' ')
if [ "$CURRENT_LANG" = $LANG1 ]; then
setxkbmap $LANG2
else
setxkbmap $LANG1
fi
make the file by right-clicking on it -> "Properties" -> "Permissions"
tab, then select "Allow executing file as program.
Now, open "System Settings" -> "Keyboard" -> "Shortcuts" tab and
select "Custom Shortcuts". Click the + button on the bottom and name
the shortcut "Keyboard Toggle" or whatever you want, really. Then give
the full path to the script you made earlier in the command box. Hit
Apply. Click where it says "Disabled" then you can set the shortcut to
whatever you want by clicking your key combination!
I think you'd need to change "de"
to "ir"
.
Again, good luck!
Edit
You may even get away with a one-liner, if you prefer:
setxkbmap us,ir -option "grp:alt_shift_toggle"
Now you can switch by pressing alt+shift
See also http://wiki.lxde.org/en/Change_keyboard_layouts and http://www.x.org/releases/X11R7.7/doc/man/man1/setxkbmap.1.xhtml
Edit 2
Depending on how you decide to achieve your goal, you may want to include lv3:ralt_alt
in your command, resulting in
setxkbmap us,ir -option "lv3:ralt_alt,grp:alt_shift_toggle"
See man xkeyboard-config | grep lv3
for details:
lv3:ralt_alt
Right Alt key never chooses 3rd level
xkeyboard-config provides the description files for the X Keyboard Extension (XKB). The configuration options below are
usually applied with setxkbmap(1).
Best Answer
There are many shortcuts to choose to switch between keyboard layouts, but none fits with what you want.
Anyway, it can be done using a bash scripts and two custom shortcuts.
First, create the script, let's call it
change_layouts
:Save the script in your
~/bin
directory and don't forget to make it executable:Now you can test the script in terminal. Run it more times to see how it works.
Second, add your custom shortcuts. Go to System Setting → Keyboard → Shortcuts → Custom Shortcuts and follow the instructions from the below image: