[Feature request]: Command line option

Bug #2035212 reported by David Hedlund
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
language-selector (Ubuntu)
New
Wishlist
Unassigned

Bug Description

The settings for gnome-language-selector -> Regional Formats in the "Display numbers, dates and currency in the usual format for" list, are stored in ~/.pam_environment

# How is it possible to make the DE reload the new values from ~/.pam_environment
So it's possible to modify ~/.pam_environment with a script. But how do you update the system to use the changes? Not even reboot worked. This issue can manually be evaluated in order to make sure that the file content is correct:

############
Step 1, identify how to load ~/.pam_environment to `locale`

* Default Ubuntu MATE 23.04:

~/.pam_environment does not exist

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

* Open gnome-language-selector, click on the "Regional Formats" tab, and click on the "Display numbers, dates and currency in the usual format for" list and select "English (Canada)"
* Press on the Close button

$ cat .pam_environment
LC_NUMERIC DEFAULT=en_CA.UTF-8
LC_TIME DEFAULT=en_CA.UTF-8
LC_MONETARY DEFAULT=en_CA.UTF-8
LC_PAPER DEFAULT=en_CA.UTF-8
LC_NAME DEFAULT=en_CA.UTF-8
LC_ADDRESS DEFAULT=en_CA.UTF-8
LC_TELEPHONE DEFAULT=en_CA.UTF-8
LC_MEASUREMENT DEFAULT=en_CA.UTF-8
LC_IDENTIFICATION DEFAULT=en_CA.UTF-8
PAPERSIZE DEFAULT=letter

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

* Sign out, and sign in

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

############
Step 2, demonstrate that ~/.pam_environment can be scripted

Run this in terminal:

sudo tee ~/.pam_environment > /dev/null << 'EOF'
LC_NUMERIC DEFAULT=en_DK.UTF-8
LC_TIME DEFAULT=en_DK.UTF-8
LC_MONETARY DEFAULT=en_DK.UTF-8
LC_PAPER DEFAULT=en_DK.UTF-8
LC_NAME DEFAULT=en_DK.UTF-8
LC_ADDRESS DEFAULT=en_DK.UTF-8
LC_TELEPHONE DEFAULT=en_DK.UTF-8
LC_MEASUREMENT DEFAULT=en_DK.UTF-8
LC_IDENTIFICATION DEFAULT=en_DK.UTF-8
PAPERSIZE DEFAULT=a4
EOF

* Sign out, and sign in to the desktop environment.
* $ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=en_DK.UTF-8
LC_TIME=en_DK.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_DK.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=en_DK.UTF-8
LC_NAME=en_DK.UTF-8
LC_ADDRESS=en_DK.UTF-8
LC_TELEPHONE=en_DK.UTF-8
LC_MEASUREMENT=en_DK.UTF-8
LC_IDENTIFICATION=en_DK.UTF-8
LC_ALL=

Issue:
* Open gnome-language-selector, click on the "Regional Formats" tab, check the "Display numbers, dates and currency in the usual format for" list, it is not set to "English (Denmark)"

# [Feature request]: Implement command line option
Implemented command line options, for both user and system-wide settings, would be useful.

Revision history for this message
David Hedlund (g-public) wrote (last edit ):

"It doesn't. PAM loads ~/.pam_environment at login." - Gunnar Hjalmarsson

As I described in the steps above for the sake of demonstration to understand how it can be done with commands: If I modify ~/.pam_environment manually (by using a copy that has been generated), and then logged out and login, the new values are not reloaded.

Gunnar has contributed to https://github.com/Vanilla-OS/gnome-language-selector/blob/main/LanguageSelector/ImConfig.py

Revision history for this message
Gunnar Hjalmarsson (gunnarhj) wrote :

Right, they are not loaded by Language Support because it grabs the old value from something called accountsservice. So you kind of mess it up if you change those variables in ~/.pam_environment manually.

But if you check it with the locale command, you'll find that the Canadian locales are in effect.

I have to ask: What is it you try to actually achieve?

Changed in language-selector (Ubuntu):
status: New → Incomplete
Revision history for this message
David Hedlund (g-public) wrote (last edit ):

> Right, they are not loaded by Language Support because it grabs the old value from something called accountsservice. So you kind of mess it up if you change those variables in ~/.pam_environment manually.

Do you know how to do that with terminal commands so it can be scripted?

> But if you check it with the locale command, you'll find that the Canadian locales are in effect.

Thanks, it is working! I wrote exactly how to do this in the top post. We're a step closer to add user defined locales from the terminal. However, you don't know 100% what is added by the gnome-language-selector -> Regional Formats, the "Display numbers, dates and currency in the usual format for" list. Therefore a command line option to change the user locale would be useful.

> I have to ask: What is it you try to actually achieve?

I'm trying to change the locale from the command line so distros can be configured with scripts, because GUIs are inconvenient when you are evaluating a lot of distros in virt-manager.

description: updated
David Hedlund (g-public)
description: updated
David Hedlund (g-public)
description: updated
David Hedlund (g-public)
description: updated
Revision history for this message
Gunnar Hjalmarsson (gunnarhj) wrote :

The description looks right to me now.

The thing is that the regional formats value you set is *also* represented by a line in a user file in the /var/lib/AccountsService/users directory. There is quite some code which tries to keep that line in sync with ~/.pam_environment, and by changing those variables in ~/.pam_environment only they got out of sync. :/

If you want to use a script in connection with preparing a distro, one way is to change it in both places.

Or probably better: Let the script edit only /etc/default/locale to your liking and don't create ~/.pam_environment in advance.

A few years ago I figured out a terminal command to change the user's regional format value the 'right' way:

https://askubuntu.com/a/754519

It's pretty long...

Changed in language-selector (Ubuntu):
importance: Undecided → Wishlist
status: Incomplete → New
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.