[Pkg-xfce-devel] Bug#765077: Extensive testing and updated workaround

Vladimir K pzs-fs at yandex.ru
Sun Nov 30 13:19:33 UTC 2014


I removed lightdm cache and .dmrc and did some testing.

Disposition:

$ cat /etc/default/locale 
#  File generated by update-locale
LANG=en_US.UTF-8 at ISO
LANGUAGE="en_US:en"

There are 4 locales in the system:
en_US.UTF-8
en_US.UTF-8 at ISO #custom with ISO dates
ru_RU.UTF-8
ru_RU.UTF-8 at ISO #custom with ISO dates

First login with locale en_US.utf8 (in lightdm syntax)

$ locale
LANG=en_US.UTF-8 at ISO
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8 at ISO"
LC_NUMERIC="en_US.UTF-8 at ISO"
LC_TIME="en_US.UTF-8 at ISO"
LC_COLLATE="en_US.UTF-8 at ISO"
LC_MONETARY="en_US.UTF-8 at ISO"
LC_MESSAGES="en_US.UTF-8 at ISO"
LC_PAPER="en_US.UTF-8 at ISO"
LC_NAME="en_US.UTF-8 at ISO"
LC_ADDRESS="en_US.UTF-8 at ISO"
LC_TELEPHONE="en_US.UTF-8 at ISO"
LC_MEASUREMENT="en_US.UTF-8 at ISO"
LC_IDENTIFICATION="en_US.UTF-8 at ISO"
LC_ALL=

$ echo $GDM_LANG 
[NULL] 
(where dit that var came in previous attempts?)

$ cat .dmrc
[Desktop]
Language=en_US.utf8
Session=lightdm-xsession

Second login with locale en_US.utf8 at ISO

$ locale
LANG=en_US.UTF-8 at ISO
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8 at ISO"
LC_NUMERIC="en_US.UTF-8 at ISO"
LC_TIME="en_US.UTF-8 at ISO"
LC_COLLATE="en_US.UTF-8 at ISO"
LC_MONETARY="en_US.UTF-8 at ISO"
LC_MESSAGES="en_US.UTF-8 at ISO"
LC_PAPER="en_US.UTF-8 at ISO"
LC_NAME="en_US.UTF-8 at ISO"
LC_ADDRESS="en_US.UTF-8 at ISO"
LC_TELEPHONE="en_US.UTF-8 at ISO"
LC_MEASUREMENT="en_US.UTF-8 at ISO"
LC_IDENTIFICATION="en_US.UTF-8 at ISO"
LC_ALL=

$ echo $GDM_LANG

$ cat .dmrc 
[Desktop]
Language=en_US.utf8 at ISO
Session=lightdm-xsession

Third login with locale ru_RU.utf8

$ locale
LANG=en_US.UTF-8 at ISO
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8 at ISO"
LC_NUMERIC="en_US.UTF-8 at ISO"
LC_TIME="en_US.UTF-8 at ISO"
LC_COLLATE="en_US.UTF-8 at ISO"
LC_MONETARY="en_US.UTF-8 at ISO"
LC_MESSAGES="en_US.UTF-8 at ISO"
LC_PAPER="en_US.UTF-8 at ISO"
LC_NAME="en_US.UTF-8 at ISO"
LC_ADDRESS="en_US.UTF-8 at ISO"
LC_TELEPHONE="en_US.UTF-8 at ISO"
LC_MEASUREMENT="en_US.UTF-8 at ISO"
LC_IDENTIFICATION="en_US.UTF-8 at ISO"
LC_ALL=

$ echo $GDM_LANG

$ cat .dmrc
[Desktop]
Language=ru_RU.utf8
Session=lightdm-xsession

Fourth login with locale ru_RU.utf8 at ISO

$ locale
LANG=en_US.UTF-8 at ISO
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8 at ISO"
LC_NUMERIC="en_US.UTF-8 at ISO"
LC_TIME="en_US.UTF-8 at ISO"
LC_COLLATE="en_US.UTF-8 at ISO"
LC_MONETARY="en_US.UTF-8 at ISO"
LC_MESSAGES="en_US.UTF-8 at ISO"
LC_PAPER="en_US.UTF-8 at ISO"
LC_NAME="en_US.UTF-8 at ISO"
LC_ADDRESS="en_US.UTF-8 at ISO"
LC_TELEPHONE="en_US.UTF-8 at ISO"
LC_MEASUREMENT="en_US.UTF-8 at ISO"
LC_IDENTIFICATION="en_US.UTF-8 at ISO"
LC_ALL=

$ echo $GDM_LANG

$ cat .dmrc
[Desktop]
Language=ru_RU.utf8 at ISO
Session=lightdm-xsession

Restarted lightdm. It started creating $GDM_LANG again

First login with locale ru_RU.utf8 at ISO

$ locale
LANG=en_US.UTF-8 at ISO
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8 at ISO"
LC_NUMERIC="en_US.UTF-8 at ISO"
LC_TIME="en_US.UTF-8 at ISO"
LC_COLLATE="en_US.UTF-8 at ISO"
LC_MONETARY="en_US.UTF-8 at ISO"
LC_MESSAGES="en_US.UTF-8 at ISO"
LC_PAPER="en_US.UTF-8 at ISO"
LC_NAME="en_US.UTF-8 at ISO"
LC_ADDRESS="en_US.UTF-8 at ISO"
LC_TELEPHONE="en_US.UTF-8 at ISO"
LC_MEASUREMENT="en_US.UTF-8 at ISO"
LC_IDENTIFICATION="en_US.UTF-8 at ISO"
LC_ALL=

$ echo $GDM_LANG 
ru_RU.utf8 at ISO

$ cat .dmrc 
[Desktop]
Language=ru_RU.utf8 at ISO
Session=lightdm-xsession

Second login with locale en_US.utf8

$ locale
LANG=en_US.UTF-8 at ISO
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8 at ISO"
LC_NUMERIC="en_US.UTF-8 at ISO"
LC_TIME="en_US.UTF-8 at ISO"
LC_COLLATE="en_US.UTF-8 at ISO"
LC_MONETARY="en_US.UTF-8 at ISO"
LC_MESSAGES="en_US.UTF-8 at ISO"
LC_PAPER="en_US.UTF-8 at ISO"
LC_NAME="en_US.UTF-8 at ISO"
LC_ADDRESS="en_US.UTF-8 at ISO"
LC_TELEPHONE="en_US.UTF-8 at ISO"
LC_MEASUREMENT="en_US.UTF-8 at ISO"
LC_IDENTIFICATION="en_US.UTF-8 at ISO"
LC_ALL=

$ echo $GDM_LANG 
ru_RU.utf8 at ISO

$ cat .dmrc 
[Desktop]
Language=en_US.utf8
Session=lightdm-xsession


Third login with locale en_US.utf8 at ISO

$ locale
LANG=en_US.UTF-8 at ISO
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8 at ISO"
LC_NUMERIC="en_US.UTF-8 at ISO"
LC_TIME="en_US.UTF-8 at ISO"
LC_COLLATE="en_US.UTF-8 at ISO"
LC_MONETARY="en_US.UTF-8 at ISO"
LC_MESSAGES="en_US.UTF-8 at ISO"
LC_PAPER="en_US.UTF-8 at ISO"
LC_NAME="en_US.UTF-8 at ISO"
LC_ADDRESS="en_US.UTF-8 at ISO"
LC_TELEPHONE="en_US.UTF-8 at ISO"
LC_MEASUREMENT="en_US.UTF-8 at ISO"
LC_IDENTIFICATION="en_US.UTF-8 at ISO"
LC_ALL=

$ echo $GDM_LANG 
ru_RU.utf8 at ISO

$ cat .dmrc
[Desktop]
Language=en_US.utf8 at ISO
Session=lightdm-xsession

Stopped lightdm, removed .dmrc, started lightdm

Login with locale en_US.utf8

$ locale
LANG=en_US.UTF-8 at ISO
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8 at ISO"
LC_NUMERIC="en_US.UTF-8 at ISO"
LC_TIME="en_US.UTF-8 at ISO"
LC_COLLATE="en_US.UTF-8 at ISO"
LC_MONETARY="en_US.UTF-8 at ISO"
LC_MESSAGES="en_US.UTF-8 at ISO"
LC_PAPER="en_US.UTF-8 at ISO"
LC_NAME="en_US.UTF-8 at ISO"
LC_ADDRESS="en_US.UTF-8 at ISO"
LC_TELEPHONE="en_US.UTF-8 at ISO"
LC_MEASUREMENT="en_US.UTF-8 at ISO"
LC_IDENTIFICATION="en_US.UTF-8 at ISO"
LC_ALL=

$ echo $GDM_LANG 
en_US.utf8 at ISO

$ cat .dmrc 
[Desktop]
Language=en_US.utf8
Session=lightdm-xsession


#######################################
Summary:
1. $GDM_LANG is produced only when lightdm is started with some cache present.
2. $GDM_LANG does not always contain correct locale. Usually, it contains locale
chosen first after lighdm is started, or sometimes system default.
3. $LANG and $LANGUAGE are completely untouched by lightdm.
4. ~/.dmrc is always written with correct settings on login

Based on all that, I`ve updated the workaround script

/etc/X11/Xsession.d/21-lightdm-locale-fix
----------------------------------------------------------
# workaround for session language selection in lightdm greeter
# we need this only if lightdm is being used
if pidof lightdm
then
	# use Language setting from ~/.dmrc
	export LANG=`cat "$HOME/.dmrc" | grep '^Language=' | cut -d '=' -f 2- | sed 's/utf8/UTF-8/'`

	# if $LANGUAGE is set, sync it with chosen locale
	[ -n "$LANGUAGE" ] && export LANGUAGE=`echo $LANG | cut -d '.' -f 1`:`echo -n $LANG | cut -d '.' -f 1 | cut -d '_' -f 1`

	# remove untrustworthy $GDM_LANG
	[ -n "$GDM_LANG" ] && unset GDM_LANG
fi
----------------------------------------------------------



More information about the Pkg-xfce-devel mailing list