2022-06-14 09:14:00 +09:00
#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -eux
set -o pipefail
2023-05-22 12:39:25 +02:00
# shellcheck source=test/units/test-control.sh
. " $( dirname " $0 " ) " /test-control.sh
2023-05-16 19:09:13 +02:00
# shellcheck source=test/units/util.sh
. " $( dirname " $0 " ) " /util.sh
2022-06-14 09:14:00 +09:00
enable_debug( ) {
mkdir -p /run/systemd/system/systemd-localed.service.d
cat >>/run/systemd/system/systemd-localed.service.d/override.conf <<EOF
[ Service]
Environment = SYSTEMD_LOG_LEVEL = debug
EOF
mkdir -p /run/systemd/system/systemd-vconsole-setup.service.d
cat >>/run/systemd/system/systemd-vconsole-setup.service.d/override.conf <<EOF
[ Unit]
StartLimitIntervalSec = 0
[ Service]
Environment = SYSTEMD_LOG_LEVEL = debug
EOF
systemctl daemon-reload
}
2023-05-19 18:48:07 +02:00
testcase_locale( ) {
2022-06-14 09:14:00 +09:00
local i output
if [ [ -f /etc/locale.conf ] ] ; then
cp /etc/locale.conf /tmp/locale.conf.bak
fi
# Debian/Ubuntu specific file
if [ [ -f /etc/default/locale ] ] ; then
cp /etc/default/locale /tmp/default-locale.bak
fi
if [ [ -f /etc/locale.gen ] ] ; then
cp /etc/locale.gen /tmp/locale.gen.bak
fi
# remove locale.conf to make /etc/default/locale used by Debian/Ubuntu
rm -f /etc/locale.conf
# also remove /etc/default/locale
rm -f /etc/default/locale
# and create /etc/default to make /etc/default/locale created by localed
mkdir -p /etc/default
trap restore_locale RETURN
2024-05-02 09:16:28 +02:00
# Ensure at least one UTF-8 locale exists.
generate_locale en_US.UTF-8
2022-06-14 09:14:00 +09:00
# create invalid locale
mkdir -p /usr/lib/locale/xx_XX.UTF-8
assert_not_in "xx_XX.UTF-8" " $( localectl list-locales) "
if [ [ -z " $( localectl list-locales) " ] ] ; then
echo "No locale installed, skipping test."
return
fi
2022-12-02 12:12:07 +01:00
# start with a known default environment and make sure to also give a
# default value to LC_CTYPE= since we're about to also set/unset it. We
# also reload PID1 configuration to make sure that PID1 environment itself
# is updated as it's not always been the case.
assert_rc 0 localectl set-locale "LANG=en_US.UTF-8" "LC_CTYPE=C"
systemctl daemon-reload
output = $( localectl)
assert_in "System Locale: LANG=en_US.UTF-8" " $output "
assert_in "LC_CTYPE=C" " $output "
output = $( systemctl show-environment)
assert_in "LANG=en_US.UTF-8" " $output "
assert_in "LC_CTYPE=C" " $output "
2022-06-14 09:14:00 +09:00
# warn when kernel command line has locale settings
output = $( SYSTEMD_PROC_CMDLINE = "locale.LANG=C.UTF-8 locale.LC_CTYPE=ja_JP.UTF-8" localectl 2>& 1)
assert_in "Warning:" " $output "
assert_in "Command Line: LANG=C.UTF-8" " $output "
assert_in "LC_CTYPE=ja_JP.UTF-8" " $output "
assert_in "System Locale:" " $output "
# change locale
for i in $( localectl list-locales) ; do
assert_rc 0 localectl set-locale "LANG=C" " LC_CTYPE= $i "
if [ [ -f /etc/default/locale ] ] ; then
assert_eq " $( cat /etc/default/locale) " " LANG=C
LC_CTYPE = $i "
else
assert_eq " $( cat /etc/locale.conf) " " LANG=C
LC_CTYPE = $i "
fi
output = $( localectl)
assert_in "System Locale: LANG=C" " $output "
assert_in " LC_CTYPE= $i " " $output "
output = $( systemctl show-environment)
assert_in "LANG=C" " $output "
assert_in " LC_CTYPE= $i " " $output "
assert_rc 0 localectl set-locale " $i "
if [ [ -f /etc/default/locale ] ] ; then
2023-01-22 22:49:06 +01:00
assert_eq " $( cat /etc/default/locale) " " LANG= $i "
2022-06-14 09:14:00 +09:00
else
assert_eq " $( cat /etc/locale.conf) " " LANG= $i "
fi
output = $( localectl)
assert_in " System Locale: LANG= $i " " $output "
assert_not_in "LC_CTYPE=" " $output "
output = $( systemctl show-environment)
assert_in " LANG= $i " " $output "
assert_not_in "LC_CTYPE=" " $output "
done
# test if localed auto-runs locale-gen
if command -v locale-gen >/dev/null 2>& 1 &&
! localectl list-locales | grep -F "de_DE.UTF-8" ; then
# clear previous locale
systemctl stop systemd-localed.service
rm -f /etc/locale.conf /etc/default/locale
# change locale
assert_rc 0 localectl set-locale de_DE.UTF-8
if [ [ -f /etc/default/locale ] ] ; then
assert_eq " $( cat /etc/default/locale) " "LANG=de_DE.UTF-8"
else
assert_eq " $( cat /etc/locale.conf) " "LANG=de_DE.UTF-8"
fi
assert_in "System Locale: LANG=de_DE.UTF-8" " $( localectl) "
assert_in "LANG=de_DE.UTF-8" " $( systemctl show-environment) "
# ensure tested locale exists and works now
assert_in "de_DE.UTF-8" " $( localectl list-locales) "
fi
}
backup_keymap( ) {
if [ [ -f /etc/vconsole.conf ] ] ; then
cp /etc/vconsole.conf /tmp/vconsole.conf.bak
fi
if [ [ -f /etc/X11/xorg.conf.d/00-keyboard.conf ] ] ; then
cp /etc/X11/xorg.conf.d/00-keyboard.conf /tmp/00-keyboard.conf.bak
fi
# Debian/Ubuntu specific file
if [ [ -f /etc/default/keyboard ] ] ; then
cp /etc/default/keyboard /tmp/default-keyboard.bak
fi
mkdir -p /etc/default
}
restore_keymap( ) {
if [ [ -f /tmp/vconsole.conf.bak ] ] ; then
mv /tmp/vconsole.conf.bak /etc/vconsole.conf
else
rm -f /etc/vconsole.conf
fi
if [ [ -f /tmp/00-keyboard.conf.bak ] ] ; then
mv /tmp/00-keyboard.conf.bak /etc/X11/xorg.conf.d/00-keyboard.conf
else
rm -f /etc/X11/xorg.conf.d/00-keyboard.conf
fi
if [ [ -f /tmp/default-keyboard.bak ] ] ; then
mv /tmp/default-keyboard.bak /etc/default/keyboard
else
rm -f /etc/default/keyboard
rmdir --ignore-fail-on-non-empty /etc/default
fi
}
wait_vconsole_setup( ) {
local i ss
2023-04-07 10:17:15 +02:00
for i in { 1..20} ; do
( ( i > 1 ) ) && sleep 0.5
2022-06-14 09:14:00 +09:00
ss = " $( systemctl --property SubState --value show systemd-vconsole-setup.service) "
if [ [ " $ss " = = "exited" || " $ss " = = "dead" || " $ss " = = "condition" ] ] ; then
return 0
elif [ [ " $ss " = = "failed" ] ] ; then
echo "WARNING: systemd-vconsole-setup.service failed, ignoring." >& 2
systemctl reset-failed systemd-vconsole-setup.service
return 0
fi
done
systemctl status systemd-vconsole-setup.service
return 1
}
2023-05-19 18:48:07 +02:00
testcase_vc_keymap( ) {
2022-12-21 03:09:58 +09:00
local i output vc
2022-06-14 09:14:00 +09:00
if [ [ -z " $( localectl list-keymaps) " ] ] ; then
echo "No vconsole keymap installed, skipping test."
return
fi
backup_keymap
trap restore_keymap RETURN
# should activate daemon and work
assert_in "VC Keymap:" " $( localectl) "
for i in $( localectl list-keymaps) ; do
# clear previous conversion from VC -> X11 keymap
systemctl stop systemd-localed.service
wait_vconsole_setup
2022-12-21 03:09:58 +09:00
rm -f /etc/vconsole.conf /etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard
2022-06-14 09:14:00 +09:00
# set VC keymap
assert_rc 0 localectl set-keymap " $i "
output = $( localectl)
# check VC keymap
2022-12-21 03:09:58 +09:00
vc = $( cat /etc/vconsole.conf)
assert_in " KEYMAP= $i " " $vc "
2022-06-14 09:14:00 +09:00
assert_in " VC Keymap: $i " " $output "
# check VC -> X11 keymap conversion
if [ [ " $i " = = "us" ] ] ; then
assert_in "X11 Layout: us" " $output "
assert_in "X11 Model: pc105\+inet" " $output "
assert_not_in "X11 Variant:" " $output "
assert_in "X11 Options: terminate:ctrl_alt_bksp" " $output "
2022-12-21 03:09:58 +09:00
2023-01-24 17:18:31 +00:00
assert_in "XKBLAYOUT=us" " $vc "
assert_in "XKBMODEL=pc105\+inet" " $vc "
assert_not_in "XKBVARIANT" " $vc "
assert_in "XKBOPTIONS=terminate:ctrl_alt_bksp" " $vc "
2022-06-14 09:14:00 +09:00
elif [ [ " $i " = = "us-acentos" ] ] ; then
assert_in "X11 Layout: us" " $output "
2023-04-27 09:04:00 +02:00
assert_in "X11 Model: pc105" " $output "
2022-06-14 09:14:00 +09:00
assert_in "X11 Variant: intl" " $output "
assert_in "X11 Options: terminate:ctrl_alt_bksp" " $output "
2022-12-21 03:09:58 +09:00
2023-01-24 17:18:31 +00:00
assert_in "XKBLAYOUT=us" " $vc "
2023-04-27 09:04:00 +02:00
assert_in "XKBMODEL=pc105" " $vc "
2023-01-24 17:18:31 +00:00
assert_in "XKBVARIANT=intl" " $vc "
assert_in "XKBOPTIONS=terminate:ctrl_alt_bksp" " $vc "
2022-06-14 09:14:00 +09:00
elif [ [ " $i " = ~ ^us-.* ] ] ; then
2023-04-20 09:47:35 +02:00
assert_in "X11 Layout: us" " $output "
assert_in "X11 Model: microsoftpro" " $output "
assert_in "X11 Variant:" " $output "
assert_in "X11 Options: terminate:ctrl_alt_bksp" " $output "
2022-12-21 03:09:58 +09:00
2023-04-20 09:47:35 +02:00
assert_in "XKBLAYOUT=us" " $vc "
assert_in "XKBMODEL=microsoftpro" " $vc "
assert_in "XKBVARIANT=" " $vc "
assert_in "XKBOPTIONS=terminate:ctrl_alt_bksp" " $vc "
2022-06-14 09:14:00 +09:00
fi
done
# gets along without config file
systemctl stop systemd-localed.service
wait_vconsole_setup
rm -f /etc/vconsole.conf
2022-09-20 20:12:50 +02:00
assert_in "VC Keymap: .unset." " $( localectl) "
2022-06-14 09:14:00 +09:00
}
2023-05-19 18:48:07 +02:00
testcase_x11_keymap( ) {
2022-06-14 09:14:00 +09:00
local output
if [ [ -z " $( localectl list-x11-keymap-layouts) " ] ] ; then
echo "No x11 keymap installed, skipping test."
return
fi
backup_keymap
trap restore_keymap RETURN
# should activate daemon and work
assert_in "X11 Layout:" " $( localectl) "
# set x11 keymap (layout, model, variant, options)
assert_rc 0 localectl set-x11-keymap us pc105+inet intl terminate:ctrl_alt_bksp
if [ [ -f /etc/default/keyboard ] ] ; then
assert_eq " $( cat /etc/default/keyboard) " " XKBLAYOUT=us
XKBMODEL = pc105+inet
XKBVARIANT = intl
XKBOPTIONS = terminate:ctrl_alt_bksp"
else
output = $( cat /etc/X11/xorg.conf.d/00-keyboard.conf)
assert_in 'Option "XkbLayout" "us"' " $output "
assert_in 'Option "XkbModel" "pc105\+inet"' " $output "
assert_in 'Option "XkbVariant" "intl"' " $output "
assert_in 'Option "XkbOptions" "terminate:ctrl_alt_bksp"' " $output "
2022-12-21 03:09:58 +09:00
output = $( cat /etc/vconsole.conf)
2023-01-24 17:18:31 +00:00
assert_in 'XKBLAYOUT=us' " $output "
assert_in 'XKBMODEL=pc105\+inet' " $output "
assert_in 'XKBVARIANT=intl' " $output "
assert_in 'XKBOPTIONS=terminate:ctrl_alt_bksp' " $output "
2022-06-14 09:14:00 +09:00
fi
output = $( localectl)
assert_in "X11 Layout: us" " $output "
assert_in "X11 Model: pc105\+inet" " $output "
assert_in "X11 Variant: intl" " $output "
assert_in "X11 Options: terminate:ctrl_alt_bksp" " $output "
# Debian/Ubuntu patch is buggy, unspecified settings are not cleared
rm -f /etc/default/keyboard
# set x11 keymap (layout, model, variant)
assert_rc 0 localectl set-x11-keymap us pc105+inet intl
if [ [ -f /etc/default/keyboard ] ] ; then
assert_eq " $( cat /etc/default/keyboard) " " XKBLAYOUT=us
XKBMODEL = pc105+inet
XKBVARIANT = intl"
else
output = $( cat /etc/X11/xorg.conf.d/00-keyboard.conf)
assert_in 'Option "XkbLayout" "us"' " $output "
assert_in 'Option "XkbModel" "pc105\+inet"' " $output "
assert_in 'Option "XkbVariant" "intl"' " $output "
assert_not_in 'Option "XkbOptions"' " $output "
2022-12-21 03:09:58 +09:00
output = $( cat /etc/vconsole.conf)
2023-01-24 17:18:31 +00:00
assert_in 'XKBLAYOUT=us' " $output "
assert_in 'XKBMODEL=pc105\+inet' " $output "
assert_in 'XKBVARIANT=intl' " $output "
assert_not_in 'XKBOPTIONS' " $output "
2022-06-14 09:14:00 +09:00
fi
output = $( localectl)
assert_in "X11 Layout: us" " $output "
assert_in "X11 Model: pc105\+inet" " $output "
assert_in "X11 Variant: intl" " $output "
assert_not_in "X11 Options:" " $output "
# Debian/Ubuntu patch is buggy, unspecified settings are not cleared
rm -f /etc/default/keyboard
# set x11 keymap (layout, model)
assert_rc 0 localectl set-x11-keymap us pc105+inet
if [ [ -f /etc/default/keyboard ] ] ; then
assert_eq " $( cat /etc/default/keyboard) " " XKBLAYOUT=us
XKBMODEL = pc105+inet"
else
output = $( cat /etc/X11/xorg.conf.d/00-keyboard.conf)
assert_in 'Option "XkbLayout" "us"' " $output "
assert_in 'Option "XkbModel" "pc105\+inet"' " $output "
assert_not_in 'Option "XkbVariant"' " $output "
assert_not_in 'Option "XkbOptions"' " $output "
2022-12-21 03:09:58 +09:00
output = $( cat /etc/vconsole.conf)
2023-01-24 17:18:31 +00:00
assert_in 'XKBLAYOUT=us' " $output "
assert_in 'XKBMODEL=pc105\+inet' " $output "
assert_not_in 'XKBVARIANT' " $output "
assert_not_in 'XKBOPTIONS' " $output "
2022-06-14 09:14:00 +09:00
fi
output = $( localectl)
assert_in "X11 Layout: us" " $output "
assert_in "X11 Model: pc105\+inet" " $output "
assert_not_in "X11 Variant:" " $output "
assert_not_in "X11 Options:" " $output "
# Debian/Ubuntu patch is buggy, unspecified settings are not cleared
rm -f /etc/default/keyboard
# set x11 keymap (layout)
assert_rc 0 localectl set-x11-keymap us
if [ [ -f /etc/default/keyboard ] ] ; then
assert_eq " $( cat /etc/default/keyboard) " "XKBLAYOUT=us"
else
output = $( cat /etc/X11/xorg.conf.d/00-keyboard.conf)
assert_in 'Option "XkbLayout" "us"' " $output "
assert_not_in 'Option "XkbModel"' " $output "
assert_not_in 'Option "XkbVariant"' " $output "
assert_not_in 'Option "XkbOptions"' " $output "
2022-12-21 03:09:58 +09:00
output = $( cat /etc/vconsole.conf)
2023-01-24 17:18:31 +00:00
assert_in 'XKBLAYOUT=us' " $output "
assert_not_in 'XKBMODEL' " $output "
assert_not_in 'XKBVARIANT' " $output "
assert_not_in 'XKBOPTIONS' " $output "
2022-06-14 09:14:00 +09:00
fi
output = $( localectl)
assert_in "X11 Layout: us" " $output "
assert_not_in "X11 Model:" " $output "
assert_not_in "X11 Variant:" " $output "
assert_not_in "X11 Options:" " $output "
# gets along without config file
systemctl stop systemd-localed.service
2022-12-21 03:09:58 +09:00
rm -f /etc/vconsole.conf /etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard
2022-06-14 09:14:00 +09:00
output = $( localectl)
2022-09-20 20:12:50 +02:00
assert_in "X11 Layout: .unset." " $output "
2022-06-14 09:14:00 +09:00
assert_not_in "X11 Model:" " $output "
assert_not_in "X11 Variant:" " $output "
assert_not_in "X11 Options:" " $output "
}
2023-05-19 18:48:07 +02:00
testcase_convert( ) {
2023-01-26 23:09:08 +09:00
if [ [ -z " $( localectl list-keymaps) " ] ] ; then
echo "No vconsole keymap installed, skipping test."
return
fi
if [ [ -z " $( localectl list-x11-keymap-layouts) " ] ] ; then
echo "No x11 keymap installed, skipping test."
return
fi
backup_keymap
trap restore_keymap RETURN
# clear previous settings
systemctl stop systemd-localed.service
wait_vconsole_setup
rm -f /etc/vconsole.conf /etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard
# set VC keymap without conversion
assert_rc 0 localectl --no-convert set-keymap us
output = $( localectl)
# check VC keymap
vc = $( cat /etc/vconsole.conf)
assert_in "KEYMAP=us" " $vc "
assert_in "VC Keymap: us" " $output "
# check VC -> X11 keymap conversion (nothing set)
assert_in "X11 Layout: .unset." " $output "
assert_not_in "X11 Model:" " $output "
assert_not_in "X11 Variant:" " $output "
assert_not_in "X11 Options:" " $output "
assert_not_in "XKBLAYOUT=" " $vc "
assert_not_in "XKBMODEL=" " $vc "
assert_not_in "XKBVARIANT=" " $vc "
assert_not_in "XKBOPTIONS=" " $vc "
# set VC keymap with conversion
assert_rc 0 localectl set-keymap us
output = $( localectl)
# check VC keymap
vc = $( cat /etc/vconsole.conf)
assert_in "KEYMAP=us" " $vc "
assert_in "VC Keymap: us" " $output "
# check VC -> X11 keymap conversion
assert_in "X11 Layout: us" " $output "
assert_in "X11 Model: pc105\+inet" " $output "
assert_not_in "X11 Variant:" " $output "
assert_in "X11 Options: terminate:ctrl_alt_bksp" " $output "
assert_in "XKBLAYOUT=us" " $vc "
assert_in "XKBMODEL=pc105\+inet" " $vc "
assert_not_in "XKBVARIANT" " $vc "
assert_in "XKBOPTIONS=terminate:ctrl_alt_bksp" " $vc "
# clear previous settings
systemctl stop systemd-localed.service
wait_vconsole_setup
rm -f /etc/vconsole.conf /etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard
# set x11 keymap (layout) without conversion
assert_rc 0 localectl --no-convert set-x11-keymap us
assert_not_in "KEYMAP=" " $( cat /etc/vconsole.conf) "
assert_in "VC Keymap: .unset." " $( localectl) "
if [ [ -f /etc/default/keyboard ] ] ; then
assert_eq " $( cat /etc/default/keyboard) " "XKBLAYOUT=us"
else
output = $( cat /etc/X11/xorg.conf.d/00-keyboard.conf)
assert_in 'Option "XkbLayout" "us"' " $output "
assert_not_in 'Option "XkbModel"' " $output "
assert_not_in 'Option "XkbVariant"' " $output "
assert_not_in 'Option "XkbOptions"' " $output "
output = $( cat /etc/vconsole.conf)
assert_in 'XKBLAYOUT=us' " $output "
assert_not_in 'XKBMODEL=' " $output "
assert_not_in 'XKBVARIANT=' " $output "
assert_not_in 'XKBOPTIONS=' " $output "
fi
output = $( localectl)
assert_in "X11 Layout: us" " $output "
assert_not_in "X11 Model:" " $output "
assert_not_in "X11 Variant:" " $output "
assert_not_in "X11 Options:" " $output "
# set x11 keymap (layout, model) with conversion
assert_rc 0 localectl set-x11-keymap us
assert_in "KEYMAP=us" " $( cat /etc/vconsole.conf) "
assert_in "VC Keymap: us" " $( localectl) "
if [ [ -f /etc/default/keyboard ] ] ; then
assert_eq " $( cat /etc/default/keyboard) " "XKBLAYOUT=us"
else
output = $( cat /etc/X11/xorg.conf.d/00-keyboard.conf)
assert_in 'Option "XkbLayout" "us"' " $output "
assert_not_in 'Option "XkbModel"' " $output "
assert_not_in 'Option "XkbVariant"' " $output "
assert_not_in 'Option "XkbOptions"' " $output "
output = $( cat /etc/vconsole.conf)
assert_in 'XKBLAYOUT=us' " $output "
assert_not_in 'XKBMODEL=' " $output "
assert_not_in 'XKBVARIANT=' " $output "
assert_not_in 'XKBOPTIONS=' " $output "
fi
output = $( localectl)
assert_in "X11 Layout: us" " $output "
assert_not_in "X11 Model:" " $output "
assert_not_in "X11 Variant:" " $output "
assert_not_in "X11 Options:" " $output "
}
2023-05-19 18:48:07 +02:00
testcase_validate( ) {
2023-02-02 04:29:43 +09:00
if [ [ -z " $( localectl list-keymaps) " ] ] ; then
echo "No vconsole keymap installed, skipping test."
return
fi
if [ [ -z " $( localectl list-x11-keymap-layouts) " ] ] ; then
echo "No x11 keymap installed, skipping test."
return
fi
backup_keymap
trap restore_keymap RETURN
# clear previous settings
systemctl stop systemd-localed.service
wait_vconsole_setup
rm -f /etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard
# create invalid configs
cat >/etc/vconsole.conf <<EOF
KEYMAP = foobar
XKBLAYOUT = hogehoge
EOF
# confirm that the invalid settings are not shown
output = $( localectl)
assert_in "VC Keymap: .unset." " $output "
if [ [ " $output " = ~ "X11 Layout: hogehoge" ] ] ; then
# Debian/Ubuntu build systemd without xkbcommon.
echo "systemd built without xkbcommon, skipping test."
return
fi
assert_in "X11 Layout: .unset." " $output "
# only update the virtual console keymap
assert_rc 0 localectl --no-convert set-keymap us
output = $( localectl)
assert_in "VC Keymap: us" " $output "
assert_in "X11 Layout: .unset." " $output "
output = $( cat /etc/vconsole.conf)
assert_in "KEYMAP=us" " $output "
assert_not_in "XKBLAYOUT=" " $output "
# clear previous settings
systemctl stop systemd-localed.service
wait_vconsole_setup
rm -f /etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard
# create invalid configs
cat >/etc/vconsole.conf <<EOF
KEYMAP = foobar
XKBLAYOUT = hogehoge
EOF
# confirm that the invalid settings are not shown
output = $( localectl)
assert_in "VC Keymap: .unset." " $output "
assert_in "X11 Layout: .unset." " $output "
# only update the X11 keyboard layout
assert_rc 0 localectl --no-convert set-x11-keymap us
output = $( localectl)
assert_in "VC Keymap: .unset." " $output "
assert_in "X11 Layout: us" " $output "
output = $( cat /etc/vconsole.conf)
assert_not_in "KEYMAP=" " $output "
assert_in "XKBLAYOUT=us" " $output "
# clear previous settings
systemctl stop systemd-localed.service
wait_vconsole_setup
rm -f /etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard
# create invalid configs
cat >/etc/vconsole.conf <<EOF
KEYMAP = foobar
XKBLAYOUT = hogehoge
EOF
# update the virtual console keymap with conversion
assert_rc 0 localectl set-keymap us
output = $( localectl)
assert_in "VC Keymap: us" " $output "
assert_in "X11 Layout: us" " $output "
output = $( cat /etc/vconsole.conf)
assert_in "KEYMAP=us" " $output "
assert_in "XKBLAYOUT=us" " $output "
}
2023-05-19 19:53:55 +02:00
locale_gen_cleanup( ) {
# Some running apps might keep the mount point busy, hence the lazy unmount
mountpoint -q /usr/lib/locale && umount --lazy /usr/lib/locale
[ [ -e /tmp/locale.gen.bak ] ] && mv -f /tmp/locale.gen.bak /etc/locale.gen
return 0
}
# Issue: https://github.com/systemd/systemd/pull/27179
testcase_locale_gen_leading_space( ) {
if ! command -v locale-gen >/dev/null; then
echo "No locale-gen support, skipping test."
return 0
fi
[ [ -e /etc/locale.gen ] ] && cp -f /etc/locale.gen /tmp/locale.gen.bak
trap locale_gen_cleanup RETURN
# Overmount the existing locale-gen database with an empty directory
# to force it to regenerate locales
mount -t tmpfs tmpfs /usr/lib/locale
{
echo -e "en_US.UTF-8 UTF-8"
echo -e " en_US.UTF-8 UTF-8"
echo -e "\ten_US.UTF-8 UTF-8"
echo -e " \t en_US.UTF-8 UTF-8 \t"
} >/etc/locale.gen
localectl set-locale de_DE.UTF-8
localectl set-locale en_US.UTF-8
}
2023-04-05 13:37:48 +02:00
# Make sure the content of kbd-model-map is the one that the tests expect
2023-04-20 21:54:59 +02:00
# regardless of the version installed on the distro where the testsuite is
2023-04-05 13:37:48 +02:00
# running on.
export SYSTEMD_KBD_MODEL_MAP = /usr/lib/systemd/tests/testdata/test-keymap-util/kbd-model-map
2024-07-20 11:34:51 +01:00
# On Debian and derivatives writing calls to localed are blocked as other tools are used to change settings,
# override that policy
mkdir -p /etc/dbus-1/system.d/
cat >/etc/dbus-1/system.d/systemd-localed-read-only.conf <<EOF
<?xml version = "1.0" ?>
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"https://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd" >
<busconfig>
<policy user = "root" >
2024-07-25 10:43:48 +01:00
<allow send_destination = "org.freedesktop.locale1" send_interface = "org.freedesktop.locale1" send_member = "SetLocale" />
<allow send_destination = "org.freedesktop.locale1" send_interface = "org.freedesktop.locale1" send_member = "SetVConsoleKeyboard" />
<allow send_destination = "org.freedesktop.locale1" send_interface = "org.freedesktop.locale1" send_member = "SetX11Keyboard" />
2024-07-20 11:34:51 +01:00
</policy>
</busconfig>
EOF
trap 'rm -f /etc/dbus-1/system.d/systemd-localed-read-only.conf' EXIT
systemctl reload dbus.service
2022-06-14 09:14:00 +09:00
enable_debug
2023-05-22 12:39:25 +02:00
run_testcases
2022-06-14 09:14:00 +09:00
touch /testok