# Changing keyboard layout



## bbzz (Dec 1, 2010)

Greetings,

Can anyone help with this; I need to change my standard US layout to support Serbian (Latin only would suffice) letters. Does anyone know how can i do that, and how to switch back and forth between the two without restarting the system. 
Much obliged.


----------



## graudeejs (Dec 1, 2010)

I use: setxkbmap(1) Comes with Xorg.
To switch to my native lang I run
`$ setxkbmap lv`
Be aware, that If you switch to lang, that doesn't have latin characters, then you won't be able to type setxkbmap again to switch back...

I eliminated this problem by making custom fvwm menu for language switching. Also to switch languages faster, I assigned fvwm key bindings to switch between latvian and russian languages


----------



## jotawski (Dec 2, 2010)

Hi,

Just for your informations, I used to ask here about thai keyboard layout switching too.  But I forgot where it is now.  Please have a look at hal and fdi for keywords.

Another way is using xorg.conf.  Also I got suggestion from this forum.  I have attched my xorg.conf for switching from thai to english with this post too.

Sorry, I can not attach file but here it is


```
Section "ServerLayout"
	Identifier     "X.org Configured"
	Screen      0  "Screen0" 0 0
	Screen      1  "Screen1" RightOf "Screen0"
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
	ModulePath   "/usr/local/lib/xorg/modules"
	FontPath     "/usr/local/lib/X11/fonts/misc/"
	FontPath     "/usr/local/lib/X11/fonts/TTF/"
	FontPath     "/usr/local/lib/X11/fonts/OTF"
	FontPath     "/usr/local/lib/X11/fonts/Thai/"
	FontPath     "/usr/local/lib/X11/fonts/local/"
	FontPath     "/usr/local/lib/X11/fonts/util/"
	FontPath     "/usr/local/lib/X11/fonts/bitstream-vera/"
	FontPath     "/usr/local/lib/X11/fonts/texcm-ttf/"
	FontPath     "/usr/local/lib/X11/fonts/Type1/"
	FontPath     "/usr/local/lib/X11/fonts/100dpi/"
	FontPath     "/usr/local/lib/X11/fonts/75dpi/"
	FontPath     "/usr/local/lib/X11/fonts/TrueType/"
	FontPath     "/usr/local/lib/X11/fonts/webfonts/"
	FontPath     "/usr/local/lib/X11/fonts/urwfonts-ttf/"
	FontPath     "/usr/local/lib/X11/fonts/URW/"
	FontPath     "/usr/local/share/fonts/amspsfont/type1/"
	FontPath     "/usr/local/share/fonts/cmpsfont/type1/"
	FontPath     "unix/:7101"
EndSection

Section "Module"
	Load  "extmod"
	Load  "record"
	Load  "dbe"
	Load  "glx"
	Load  "dri"
	Load  "dri2"
	Load  "freetype"
	Load  "type1"
EndSection

Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "kbd"
#	Option	"XkbRules" "xorg"
#	Option	"XkbModel"	"pc105"
#	Option	"XkbLayout"	"us,th"
#	Option	"XkbOptions"	"grp:ctrl_shift_toggle"
###
	Option	"XkbRules" "xorg"
	Option	"XkbModel"	"pc105"
	Option	"XkbLayout"	"us,th"
	Option	"XkbVariant"	"tis"
	Option	"XkbOptions"	"grp:alt_shift_toggle"
EndSection

Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "mouse"
	Option	    "Protocol" "auto"
	Option	    "Device" "/dev/sysmouse"
	Option	    "ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
	Identifier   "Monitor0"
	VendorName   "Monitor Vendor"
	ModelName    "Monitor Model"
EndSection

Section "Monitor"
	Identifier   "Monitor1"
	VendorName   "Monitor Vendor"
	ModelName    "Monitor Model"
EndSection

Section "Device"
        ### Available Driver options are:-
        ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
        ### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
        ### [arg]: arg optional
        #Option     "NoAccel"            	# [<bool>]
        #Option     "SWcursor"           	# [<bool>]
        #Option     "ColorKey"           	# <i>
        #Option     "CacheLines"         	# <i>
        #Option     "Dac6Bit"            	# [<bool>]
        #Option     "DRI"                	# [<bool>]
        #Option     "NoDDC"              	# [<bool>]
        #Option     "ShowCache"          	# [<bool>]
        #Option     "XvMCSurfaces"       	# <i>
        #Option     "PageFlip"           	# [<bool>]
	Identifier  "Card0"
	Driver      "intel"
	VendorName  "Intel Corporation"
	BoardName   "82852/855GM Integrated Graphics Device"
	BusID       "PCI:0:2:0"
EndSection

Section "Device"
        ### Available Driver options are:-
        ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
        ### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
        ### [arg]: arg optional
        #Option     "NoAccel"            	# [<bool>]
        #Option     "SWcursor"           	# [<bool>]
        #Option     "ColorKey"           	# <i>
        #Option     "CacheLines"         	# <i>
        #Option     "Dac6Bit"            	# [<bool>]
        #Option     "DRI"                	# [<bool>]
        #Option     "NoDDC"              	# [<bool>]
        #Option     "ShowCache"          	# [<bool>]
        #Option     "XvMCSurfaces"       	# <i>
        #Option     "PageFlip"           	# [<bool>]
	Identifier  "Card1"
	Driver      "intel"
	VendorName  "Intel Corporation"
	BoardName   "82852/855GM Integrated Graphics Device"
	BusID       "PCI:0:2:1"
EndSection

Section "Screen"
	Identifier "Screen0"
	Device     "Card0"
	Monitor    "Monitor0"
	SubSection "Display"
		Viewport   0 0
		Depth     1
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     4
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     8
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     15
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     16
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     24
	EndSubSection
EndSection

Section "Screen"
	Identifier "Screen1"
	Device     "Card1"
	Monitor    "Monitor1"
	SubSection "Display"
		Viewport   0 0
		Depth     1
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     4
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     8
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     15
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     16
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     24
	EndSubSection
EndSection
```

And here is my /usr/local/etc/hal/fdi/policy/x11-input.fdi for additional informations.


```
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.keyboard">
<merge key="input.x11_options.XkbModel" type="string">pc105</merge>
<merge key="input.x11_options.XkbLayout" type="string">us,th</merge>
<merge key="input.x11_options.XkbOptions" type="string">grp:alt_shift_toggle</merge>
<!--
<append key="input.x11_options.XkbOptions" type="string">terminate:ctrl_alt_bksp</append>
-->
</match>
</device>
</deviceinfo>
```

hope this helps.


----------



## bbzz (Dec 7, 2010)

I finally got to try this (was stuck on win machine for a few days)...
$ setxkbmap rs

Which gives me ?????? no matter what i type.
After little bit of search i found that i need to do something with sr_YU.ISO8859-2 in order to see those letters. I see those files in /usr/local/share/nls, /usr/local/lib/X11/fonts/..., etc. What do i do with it, and how I do it in most painless way so I can revert back to US keymap without restarting Xorg?

Thanks again


----------



## Beastie (Dec 7, 2010)

bbzz said:
			
		

> $ setxkbmap rs
> 
> Which gives me ?????? no matter what i type.


Where are you trying?
The application must support the fonts. If I open Leafpad, for example, I'm able to type the Serbian alphabet:

```
Ñ™ÑšÐµÑ€Ñ‚Ð·ÑƒÐ¸Ð¾Ð¿ÑˆÑ’Ð°ÑÐ´Ñ„Ð³Ñ…Ñ˜ÐºÐ»Ñ‡Ñ›Ð¶ÑŸÑ†Ð²Ð±Ð½Ð¼
```



			
				bbzz said:
			
		

> how I do it in most painless way so I can revert back to US keymap without restarting Xorg?


In the same way, by running
`% setxkbmap us`
But that would be quite difficult with your current keymap hehe. So, like killasmurf86 already said, you add both to your window manager's root menu.


----------



## graudeejs (Dec 7, 2010)

try *sr_YU.UTF-8*
Everyone and everything should use Unicode by Now... even stupid Windows (Don't know if it actually supports uft-8)


----------



## bbzz (Dec 7, 2010)

Hi!
See, that's the thing, I probably don't have fonts installed. I see squares instead of those letter you typed i this Opera browser :e
So how do I go about installing those fonts? Seems that's the culprit of the problem.


----------



## bbzz (Dec 7, 2010)

killasmurf86 said:
			
		

> try *sr_YU.UTF-8*
> Everyone and everything should use Unicode by Now... even stupid Windows (Don't know if it actually supports uft-8)



Where do I input that exactly?


----------



## graudeejs (Dec 7, 2010)

Depends on your desktop environment.... for lightweigth desktop It's easy
add to your ~/.xinitrc

```
LANG="lv_LV.UTF-8"
LC_ALL="lv_LV.UTF-8"
LC_COLLATE="lv_LV.UTF-8"
LC_CTYPE="lv_LV.UTF-8"
LC_MESSAGES="lv_LV.UTF-8"
LC_MONETARY="lv_LV.UTF-8"
LC_NUMERIC="lv_LV.UTF-8"
LC_TIME="lv_LV.UTF-8"
export LANG LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME XDG_CONFIG_HOME LC_ALL
```
For Real desktop environments search forum about "*localization*", there have been many threads about it, I'm tired searching and posting links regarding this....

About fonts. I install these (pasted part of my desktop metaport)

```
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/local/unifont.ttf:${PORTSDIR}/x11-fonts/gnu-unifont-ttf
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/junicode:${PORTSDIR}/x11-fonts/junicode
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/terminus-font:${PORTSDIR}/x11-fonts/terminus-font
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/Droid:${PORTSDIR}/x11-fonts/droid-fonts-ttf
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/ecofont:${PORTSDIR}/x11-fonts/ecofont
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/code2001:${PORTSDIR}/x11-fonts/code2001
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/dejavu:${PORTSDIR}/x11-fonts/dejavu
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/freefont-ttf:${PORTSDIR}/x11-fonts/freefont-ttf
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/gentium:${PORTSDIR}/x11-fonts/gentium
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/Khmer:${PORTSDIR}/x11-fonts/khmeros
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/lfpfonts-fix:${PORTSDIR}/x11-fonts/lfpfonts-fix
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/lfpfonts-var:${PORTSDIR}/x11-fonts/lfpfonts-var
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/mgopen:${PORTSDIR}/x11-fonts/mgopen
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/mozilla:${PORTSDIR}/x11-fonts/mozilla-fonts
# restricted fonts
RUN_DEPENDS+=    ${LOCALBASE}/lib/X11/fonts/webfonts:${PORTSDIR}/x11-fonts/webfonts
```


----------



## bbzz (Dec 7, 2010)

Nevermind! Got it. 
Still no luck with Latin letters. What Beastie typed are cyrilic.


----------



## graudeejs (Dec 7, 2010)

Probably most important fonts are *junicode*, *webfonts*, *gnu-unifont-ttf*


----------



## bbzz (Dec 7, 2010)

killasmurf86 said:
			
		

> Depends on your desktop environment.... for light-width desktop It's easy
> add to your ~/.xinitrc
> 
> ```
> ...



I will try that! Thanks.

I simply want to be able to type Serbian Latin when I work in, say OpenOffice. When I'm done I want to switch back to US. Don't want to localize my whole system. Sorry, should've been more precise.


----------



## graudeejs (Dec 7, 2010)

You can set environment before starting OOO (you can write small sh wrapper script)


UTF-8 is still a way to go


----------



## Beastie (Dec 7, 2010)

bbzz said:
			
		

> Still no luck with Latin letters. What Beastie typed are cyrilic.


For the latinica maybe the easiest way is to setup a "compose" key by adding 
	
	



```
setxkbmap -option compose:rwin
```
 (before the WM of course) to ~/.xinitrc. This will set the right "Windows" key as a "compose" key. E.g.:

```
rwin > - > D = Ä
rwin > v > z = Å¾
```
 N.B. none of the three keys are held down.


----------



## Aleš Butara (Dec 10, 2014)

I'm new to FreeBSD. I have _a_ similar problem. When _I_ enter my WM (_F_luxbox) the default keyboard is changed from _S_lovenian to US. Could someone pl_ea_se help me? In noob language


----------

