You are not logged in.

#1 2014-09-03 11:35:17

danfossi
Member
Registered: 2013-06-05
Posts: 21

[SOLVED] systemd language selector

Hi Archers,
is there any way to prompt the language selection during the boot through systemd ?

Something like this:

SystemRescueCD language selection

Thanks in advance

Last edited by danfossi (2014-09-22 12:09:44)

Offline

#2 2014-09-03 11:45:41

teateawhy
Member
From: GER
Registered: 2012-03-05
Posts: 1,138
Website

Re: [SOLVED] systemd language selector

The screenshot is taken from where?
Do you want to select the language (as indicated by your text), or the keymap (as indicated by the screenshot)?
You have to take into account that languages must be uncommented in /etc/locale.gen and generated before they can be used, unlike keymaps.

Offline

#3 2014-09-03 12:55:59

danfossi
Member
Registered: 2013-06-05
Posts: 21

Re: [SOLVED] systemd language selector

Hi teateawhy smile
The screenshot is taken from the selector SystemRescueCD, it would be sufficient to make the load of the keymap.
It does not matter if the locale.gen is changed after the user's choice and then run "locale-gen" or if all items were first uncomment and the user should only select the appropriate keymap.

Offline

#4 2014-09-03 21:01:43

karol
Archivist
Registered: 2009-05-06
Posts: 25,440

Re: [SOLVED] systemd language selector

You can't use a locale unless it's been enabled (generated) first.

Offline

#5 2014-09-04 08:36:08

danfossi
Member
Registered: 2013-06-05
Posts: 21

Re: [SOLVED] systemd language selector

karol wrote:

You can't use a locale unless it's been enabled (generated) first.

Yes, I know this! In fact, as I said before, there would be no problem to generate all the locales and then let the user choose the correct one.
In any case, you might still choose to use the local via script, and then generate it based on your selection using the local-gen.

Offline

#6 2014-09-04 10:12:25

danfossi
Member
Registered: 2013-06-05
Posts: 21

Re: [SOLVED] systemd language selector

Some little progress:

#!/bin/bash
arr=($(localectl list-x11-keymap-layouts | sed 's#nec_vndr/jp##g'))

for value in "${arr[@]}"; do 
    printf "$((++i)): %-8s\n" "${value}"
done | column

for (( i=30; i>0; i--)); do
    printf "\rPlease select a keymap in $i seconds and hit Enter to continue: "

read -s -n 2 -t 1 key
if [ $? -eq 0 ]
	then
 	      	break
    	fi
done

echo
echo $key

Any ideas on how to generate then load keymap from this list ?

Offline

#7 2014-09-11 13:52:31

danfossi
Member
Registered: 2013-06-05
Posts: 21

Re: [SOLVED] systemd language selector

Hi Archers,
with the help of keyboardctl from Manjaro's Team I've almost found a solution:

* Install keyboardctl
* Create this script: keymap_selection.sh

#!/bin/bash
arr=($(localectl list-x11-keymap-layouts | sed 's#nec_vndr/jp##g'))

echo "Keymap selection.."
echo

for value in "${arr[@]}"; do 
    printf "$((++i)): %-8s\n" "${value}"
done | column

echo

for (( i=10; i>0; i--)); do
    printf "\rEnter keymap or number in $i second(s) and hit Enter to continue: "

read -s -n 5 -t 2 keymap
if [ $? -eq 0 ]
	then
 	      	break
    	fi
done

echo

if [ -z $keymap ]; then
	echo "Keymap not selected.. setting Italian as default!"
	keymap="it"
	sed -i '/^XKBLAYOUT/d' /etc/keyboard.conf
	echo XKBLAYOUT="it" >> /etc/keyboard.conf
	keyboardctl -s
else
	echo "Your choice is: $keymap"
	sed -i '/^XKBLAYOUT/d' /etc/keyboard.conf
sed -i '/^XKBLAYOUT/d' /etc/keyboard.conf
case "${keymap}" in
	af|1)
		echo XKBLAYOUT="af" >> /etc/keyboard.conf
		;;
	al|2)
		echo XKBLAYOUT="al" >> /etc/keyboard.conf
		;;
	am|3)
		echo XKBLAYOUT="am" >> /etc/keyboard.conf
		;;
	ara|4)
		echo XKBLAYOUT="ara" >> /etc/keyboard.conf
		;;
	at|5)
		echo XKBLAYOUT="at" >> /etc/keyboard.conf
		;;
	az|6)
		echo XKBLAYOUT="az" >> /etc/keyboard.conf
		;;
	ba|7)
		echo XKBLAYOUT="ba" >> /etc/keyboard.conf
		;;
	bd|8)
		echo XKBLAYOUT="bd" >> /etc/keyboard.conf
		;;
	be|9)
		echo XKBLAYOUT="be" >> /etc/keyboard.conf
		;;
	bg|10)
		echo XKBLAYOUT="bg" >> /etc/keyboard.conf
		;;
	br|11)
		echo XKBLAYOUT="br" >> /etc/keyboard.conf
		;;
	brai|12)
		echo XKBLAYOUT="brai" >> /etc/keyboard.conf
		;;
	bt|13)
		echo XKBLAYOUT="bt" >> /etc/keyboard.conf
		;;
	bw|14)
		echo XKBLAYOUT="bw" >> /etc/keyboard.conf
		;;
	by|15)
		echo XKBLAYOUT="by" >> /etc/keyboard.conf
		;;
	ca|16)
		echo XKBLAYOUT="ca" >> /etc/keyboard.conf
		;;
	cd|17)
		echo XKBLAYOUT="cd" >> /etc/keyboard.conf
		;;
	ch|18)
		echo XKBLAYOUT="ch" >> /etc/keyboard.conf
		;;
	cm|19)
		echo XKBLAYOUT="cm" >> /etc/keyboard.conf
		;;
	cn|20)
		echo XKBLAYOUT="cn" >> /etc/keyboard.conf
		;;
	cz|21)
		echo XKBLAYOUT="cz" >> /etc/keyboard.conf
		;;
	de|22)
		echo XKBLAYOUT="de" >> /etc/keyboard.conf
		;;
	dk|23)
		echo XKBLAYOUT="dk" >> /etc/keyboard.conf
		;;
	ee|24)
		echo XKBLAYOUT="ee" >> /etc/keyboard.conf
		;;
	epo|25)
		echo XKBLAYOUT="epo" >> /etc/keyboard.conf
		;;
	es|26)
		echo XKBLAYOUT="es" >> /etc/keyboard.conf
		;;
	et|27)
		echo XKBLAYOUT="et" >> /etc/keyboard.conf
		;;
	fi|28)
		echo XKBLAYOUT="fi" >> /etc/keyboard.conf
		;;
	fo|29)
		echo XKBLAYOUT="fo" >> /etc/keyboard.conf
		;;
	fr|30)
		echo XKBLAYOUT="fr" >> /etc/keyboard.conf
		;;
	gb|31)
		echo XKBLAYOUT="gb" >> /etc/keyboard.conf
		;;
	ge|32)
		echo XKBLAYOUT="ge" >> /etc/keyboard.conf
		;;
	gh|33)
		echo XKBLAYOUT="gh" >> /etc/keyboard.conf
		;;
	gn|34)
		echo XKBLAYOUT="gn" >> /etc/keyboard.conf
		;;
	gr|35)
		echo XKBLAYOUT="gr" >> /etc/keyboard.conf
		;;
	hr|36)
		echo XKBLAYOUT="hr" >> /etc/keyboard.conf
		;;
	hu|37)
		echo XKBLAYOUT="hu" >> /etc/keyboard.conf
		;;
	ie|38)
		echo XKBLAYOUT="ie" >> /etc/keyboard.conf
		;;
	il|39)
		echo XKBLAYOUT="il" >> /etc/keyboard.conf
		;;
	in|40)
		echo XKBLAYOUT="in" >> /etc/keyboard.conf
		;;
	iq|41)
		echo XKBLAYOUT="iq" >> /etc/keyboard.conf
		;;
	ir|42)
		echo XKBLAYOUT="ir" >> /etc/keyboard.conf
		;;
	is|43)
		echo XKBLAYOUT="is" >> /etc/keyboard.conf
		;;
	it|44)
		echo XKBLAYOUT="it" >> /etc/keyboard.conf
		;;
	jp|45)
		echo XKBLAYOUT="jp" >> /etc/keyboard.conf
		;;
	ke|46)
		echo XKBLAYOUT="ke" >> /etc/keyboard.conf
		;;
	kg|47)
		echo XKBLAYOUT="kg" >> /etc/keyboard.conf
		;;
	kh|48)
		echo XKBLAYOUT="kh" >> /etc/keyboard.conf
		;;
	kr|49)
		echo XKBLAYOUT="kr" >> /etc/keyboard.conf
		;;
	kz|50)
		echo XKBLAYOUT="kz" >> /etc/keyboard.conf
		;;
	la|51)
		echo XKBLAYOUT="la" >> /etc/keyboard.conf
		;;
	latam|52)
		echo XKBLAYOUT="latam" >> /etc/keyboard.conf
		;;
	lk|53)
		echo XKBLAYOUT="lk" >> /etc/keyboard.conf
		;;
	lt|54)
		echo XKBLAYOUT="lt" >> /etc/keyboard.conf
		;;
	lv|55)
		echo XKBLAYOUT="lv" >> /etc/keyboard.conf
		;;
	ma|56)
		echo XKBLAYOUT="ma" >> /etc/keyboard.conf
		;;
	mao|57)
		echo XKBLAYOUT="mao" >> /etc/keyboard.conf
		;;
	md|58)
		echo XKBLAYOUT="md" >> /etc/keyboard.conf
		;;
	me|59)
		echo XKBLAYOUT="me" >> /etc/keyboard.conf
		;;
	mk|60)
		echo XKBLAYOUT="mk" >> /etc/keyboard.conf
		;;
	ml|61)
		echo XKBLAYOUT="ml" >> /etc/keyboard.conf
		;;
	mm|62)
		echo XKBLAYOUT="mm" >> /etc/keyboard.conf
		;;
	mn|63)
		echo XKBLAYOUT="mn" >> /etc/keyboard.conf
		;;
	mt|64)
		echo XKBLAYOUT="mt" >> /etc/keyboard.conf
		;;
	mv|65)
		echo XKBLAYOUT="mv" >> /etc/keyboard.conf
		;;
	ng|66)
		echo XKBLAYOUT="ng" >> /etc/keyboard.conf
		;;
	nl|67)
		echo XKBLAYOUT="nl" >> /etc/keyboard.conf
		;;
	no|68)
		echo XKBLAYOUT="no" >> /etc/keyboard.conf
		;;
	np|69)
		echo XKBLAYOUT="np" >> /etc/keyboard.conf
		;;
	ph|70)
		echo XKBLAYOUT="ph" >> /etc/keyboard.conf
		;;
	pk|71)
		echo XKBLAYOUT="pk" >> /etc/keyboard.conf
		;;
	pl|72)
		echo XKBLAYOUT="pl" >> /etc/keyboard.conf
		;;
	pt|73)
		echo XKBLAYOUT="pt" >> /etc/keyboard.conf
		;;
	ro|74)
		echo XKBLAYOUT="ro" >> /etc/keyboard.conf
		;;
	rs|75)
		echo XKBLAYOUT="rs" >> /etc/keyboard.conf
		;;
	ru|76)
		echo XKBLAYOUT="ru" >> /etc/keyboard.conf
		;;
	se|77)
		echo XKBLAYOUT="se" >> /etc/keyboard.conf
		;;
	si|78)
		echo XKBLAYOUT="si" >> /etc/keyboard.conf
		;;
	sk|79)
		echo XKBLAYOUT="sk" >> /etc/keyboard.conf
		;;
	sn|80)
		echo XKBLAYOUT="sn" >> /etc/keyboard.conf
		;;
	sy|81)
		echo XKBLAYOUT="sy" >> /etc/keyboard.conf
		;;
	th|82)
		echo XKBLAYOUT="th" >> /etc/keyboard.conf
		;;
	tj|83)
		echo XKBLAYOUT="tj" >> /etc/keyboard.conf
		;;
	tm|84)
		echo XKBLAYOUT="tm" >> /etc/keyboard.conf
		;;
	tr|85)
		echo XKBLAYOUT="tr" >> /etc/keyboard.conf
		;;
	tw|86)
		echo XKBLAYOUT="tw" >> /etc/keyboard.conf
		;;
	tz|87)
		echo XKBLAYOUT="tz" >> /etc/keyboard.conf
		;;
	ua|88)
		echo XKBLAYOUT="ua" >> /etc/keyboard.conf
		;;
	us|89)
		echo XKBLAYOUT="us" >> /etc/keyboard.conf
		;;
	uz|90)
		echo XKBLAYOUT="uz" >> /etc/keyboard.conf
		;;
	vn|91)
		echo XKBLAYOUT="vn" >> /etc/keyboard.conf
		;;
	za|92)
		echo XKBLAYOUT="za" >> /etc/keyboard.conf
		;;
	*)
		echo XKBLAYOUT="it" >> /etc/keyboard.conf
		;;
esac

#Load Selected Keymap
sleep 1
keyboardctl -s

fi

* Load script via systemd  (currently working on)
* Run keyboardctl.service after the execution of keymap_selection.sh

Offline

#8 2014-09-22 12:09:26

danfossi
Member
Registered: 2013-06-05
Posts: 21

Re: [SOLVED] systemd language selector

Solution Found:

* Install keyboardctl

* Create /bin/keymap_selection.sh

#!/bin/bash
arr=($(localectl list-x11-keymap-layouts | sed 's#nec_vndr/jp##g'))

echo "Keymap selection.."
echo

for value in "${arr[@]}"; do 
    printf "$((++i)): %-8s\n" "${value}"
done | column

echo

for (( i=10; i>0; i--)); do
    printf "\rEnter keymap or number in $i second(s) and hit Enter to continue: "

read -s -n 5 -t 2 keymap
if [ $? -eq 0 ]
	then
 	      	break
    	fi
done

echo

if [ -z $keymap ]; then
	echo "Keymap not selected.. setting Italian as default!"
	keymap="it"
	sed -i '/^XKBLAYOUT/d' /etc/keyboard.conf
	echo XKBLAYOUT="it" >> /etc/keyboard.conf
	keyboardctl -s
else
	echo "Your choice is: $keymap"
	sed -i '/^XKBLAYOUT/d' /etc/keyboard.conf
sed -i '/^XKBLAYOUT/d' /etc/keyboard.conf
case "${keymap}" in
	af|1)
		echo XKBLAYOUT="af" >> /etc/keyboard.conf
		;;
	al|2)
		echo XKBLAYOUT="al" >> /etc/keyboard.conf
		;;
	am|3)
		echo XKBLAYOUT="am" >> /etc/keyboard.conf
		;;
	ara|4)
		echo XKBLAYOUT="ara" >> /etc/keyboard.conf
		;;
	at|5)
		echo XKBLAYOUT="at" >> /etc/keyboard.conf
		;;
	az|6)
		echo XKBLAYOUT="az" >> /etc/keyboard.conf
		;;
	ba|7)
		echo XKBLAYOUT="ba" >> /etc/keyboard.conf
		;;
	bd|8)
		echo XKBLAYOUT="bd" >> /etc/keyboard.conf
		;;
	be|9)
		echo XKBLAYOUT="be" >> /etc/keyboard.conf
		;;
	bg|10)
		echo XKBLAYOUT="bg" >> /etc/keyboard.conf
		;;
	br|11)
		echo XKBLAYOUT="br" >> /etc/keyboard.conf
		;;
	brai|12)
		echo XKBLAYOUT="brai" >> /etc/keyboard.conf
		;;
	bt|13)
		echo XKBLAYOUT="bt" >> /etc/keyboard.conf
		;;
	bw|14)
		echo XKBLAYOUT="bw" >> /etc/keyboard.conf
		;;
	by|15)
		echo XKBLAYOUT="by" >> /etc/keyboard.conf
		;;
	ca|16)
		echo XKBLAYOUT="ca" >> /etc/keyboard.conf
		;;
	cd|17)
		echo XKBLAYOUT="cd" >> /etc/keyboard.conf
		;;
	ch|18)
		echo XKBLAYOUT="ch" >> /etc/keyboard.conf
		;;
	cm|19)
		echo XKBLAYOUT="cm" >> /etc/keyboard.conf
		;;
	cn|20)
		echo XKBLAYOUT="cn" >> /etc/keyboard.conf
		;;
	cz|21)
		echo XKBLAYOUT="cz" >> /etc/keyboard.conf
		;;
	de|22)
		echo XKBLAYOUT="de" >> /etc/keyboard.conf
		;;
	dk|23)
		echo XKBLAYOUT="dk" >> /etc/keyboard.conf
		;;
	ee|24)
		echo XKBLAYOUT="ee" >> /etc/keyboard.conf
		;;
	epo|25)
		echo XKBLAYOUT="epo" >> /etc/keyboard.conf
		;;
	es|26)
		echo XKBLAYOUT="es" >> /etc/keyboard.conf
		;;
	et|27)
		echo XKBLAYOUT="et" >> /etc/keyboard.conf
		;;
	fi|28)
		echo XKBLAYOUT="fi" >> /etc/keyboard.conf
		;;
	fo|29)
		echo XKBLAYOUT="fo" >> /etc/keyboard.conf
		;;
	fr|30)
		echo XKBLAYOUT="fr" >> /etc/keyboard.conf
		;;
	gb|31)
		echo XKBLAYOUT="gb" >> /etc/keyboard.conf
		;;
	ge|32)
		echo XKBLAYOUT="ge" >> /etc/keyboard.conf
		;;
	gh|33)
		echo XKBLAYOUT="gh" >> /etc/keyboard.conf
		;;
	gn|34)
		echo XKBLAYOUT="gn" >> /etc/keyboard.conf
		;;
	gr|35)
		echo XKBLAYOUT="gr" >> /etc/keyboard.conf
		;;
	hr|36)
		echo XKBLAYOUT="hr" >> /etc/keyboard.conf
		;;
	hu|37)
		echo XKBLAYOUT="hu" >> /etc/keyboard.conf
		;;
	ie|38)
		echo XKBLAYOUT="ie" >> /etc/keyboard.conf
		;;
	il|39)
		echo XKBLAYOUT="il" >> /etc/keyboard.conf
		;;
	in|40)
		echo XKBLAYOUT="in" >> /etc/keyboard.conf
		;;
	iq|41)
		echo XKBLAYOUT="iq" >> /etc/keyboard.conf
		;;
	ir|42)
		echo XKBLAYOUT="ir" >> /etc/keyboard.conf
		;;
	is|43)
		echo XKBLAYOUT="is" >> /etc/keyboard.conf
		;;
	it|44)
		echo XKBLAYOUT="it" >> /etc/keyboard.conf
		;;
	jp|45)
		echo XKBLAYOUT="jp" >> /etc/keyboard.conf
		;;
	ke|46)
		echo XKBLAYOUT="ke" >> /etc/keyboard.conf
		;;
	kg|47)
		echo XKBLAYOUT="kg" >> /etc/keyboard.conf
		;;
	kh|48)
		echo XKBLAYOUT="kh" >> /etc/keyboard.conf
		;;
	kr|49)
		echo XKBLAYOUT="kr" >> /etc/keyboard.conf
		;;
	kz|50)
		echo XKBLAYOUT="kz" >> /etc/keyboard.conf
		;;
	la|51)
		echo XKBLAYOUT="la" >> /etc/keyboard.conf
		;;
	latam|52)
		echo XKBLAYOUT="latam" >> /etc/keyboard.conf
		;;
	lk|53)
		echo XKBLAYOUT="lk" >> /etc/keyboard.conf
		;;
	lt|54)
		echo XKBLAYOUT="lt" >> /etc/keyboard.conf
		;;
	lv|55)
		echo XKBLAYOUT="lv" >> /etc/keyboard.conf
		;;
	ma|56)
		echo XKBLAYOUT="ma" >> /etc/keyboard.conf
		;;
	mao|57)
		echo XKBLAYOUT="mao" >> /etc/keyboard.conf
		;;
	md|58)
		echo XKBLAYOUT="md" >> /etc/keyboard.conf
		;;
	me|59)
		echo XKBLAYOUT="me" >> /etc/keyboard.conf
		;;
	mk|60)
		echo XKBLAYOUT="mk" >> /etc/keyboard.conf
		;;
	ml|61)
		echo XKBLAYOUT="ml" >> /etc/keyboard.conf
		;;
	mm|62)
		echo XKBLAYOUT="mm" >> /etc/keyboard.conf
		;;
	mn|63)
		echo XKBLAYOUT="mn" >> /etc/keyboard.conf
		;;
	mt|64)
		echo XKBLAYOUT="mt" >> /etc/keyboard.conf
		;;
	mv|65)
		echo XKBLAYOUT="mv" >> /etc/keyboard.conf
		;;
	ng|66)
		echo XKBLAYOUT="ng" >> /etc/keyboard.conf
		;;
	nl|67)
		echo XKBLAYOUT="nl" >> /etc/keyboard.conf
		;;
	no|68)
		echo XKBLAYOUT="no" >> /etc/keyboard.conf
		;;
	np|69)
		echo XKBLAYOUT="np" >> /etc/keyboard.conf
		;;
	ph|70)
		echo XKBLAYOUT="ph" >> /etc/keyboard.conf
		;;
	pk|71)
		echo XKBLAYOUT="pk" >> /etc/keyboard.conf
		;;
	pl|72)
		echo XKBLAYOUT="pl" >> /etc/keyboard.conf
		;;
	pt|73)
		echo XKBLAYOUT="pt" >> /etc/keyboard.conf
		;;
	ro|74)
		echo XKBLAYOUT="ro" >> /etc/keyboard.conf
		;;
	rs|75)
		echo XKBLAYOUT="rs" >> /etc/keyboard.conf
		;;
	ru|76)
		echo XKBLAYOUT="ru" >> /etc/keyboard.conf
		;;
	se|77)
		echo XKBLAYOUT="se" >> /etc/keyboard.conf
		;;
	si|78)
		echo XKBLAYOUT="si" >> /etc/keyboard.conf
		;;
	sk|79)
		echo XKBLAYOUT="sk" >> /etc/keyboard.conf
		;;
	sn|80)
		echo XKBLAYOUT="sn" >> /etc/keyboard.conf
		;;
	sy|81)
		echo XKBLAYOUT="sy" >> /etc/keyboard.conf
		;;
	th|82)
		echo XKBLAYOUT="th" >> /etc/keyboard.conf
		;;
	tj|83)
		echo XKBLAYOUT="tj" >> /etc/keyboard.conf
		;;
	tm|84)
		echo XKBLAYOUT="tm" >> /etc/keyboard.conf
		;;
	tr|85)
		echo XKBLAYOUT="tr" >> /etc/keyboard.conf
		;;
	tw|86)
		echo XKBLAYOUT="tw" >> /etc/keyboard.conf
		;;
	tz|87)
		echo XKBLAYOUT="tz" >> /etc/keyboard.conf
		;;
	ua|88)
		echo XKBLAYOUT="ua" >> /etc/keyboard.conf
		;;
	us|89)
		echo XKBLAYOUT="us" >> /etc/keyboard.conf
		;;
	uz|90)
		echo XKBLAYOUT="uz" >> /etc/keyboard.conf
		;;
	vn|91)
		echo XKBLAYOUT="vn" >> /etc/keyboard.conf
		;;
	za|92)
		echo XKBLAYOUT="za" >> /etc/keyboard.conf
		;;
	*)
		echo XKBLAYOUT="it" >> /etc/keyboard.conf
		;;
esac

#Load Selected Keymap
sleep 1
keyboardctl -s

fi

* Create /etc/systemd/system/keymap_selection.service

[Unit]
Description=Keymap Selection
ConditionPathExists=/bin/keymap_selection.sh
JobTimeoutSec=30
Before=getty@tty1.service
After=sshd.service

[Timer]
OnActiveSec=30

[Service]
Type=forking
ExecStart=/bin/keymap_selection.sh
StandardInput=tty
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
KillMode=none

[Install]
WantedBy=multi-user.target

* Enable with systemctl enable keymap_selection.service

Last edited by danfossi (2014-09-22 12:10:27)

Offline

Board footer

Powered by FluxBB