"Language for menus and windows" is not saved if .profile is missing

Bug #1018621 reported by Martin Thøgersen
38
This bug affects 8 people
Affects Status Importance Assigned to Milestone
accountsservice (Ubuntu)
Fix Released
Medium
Gunnar Hjalmarsson
Precise
Fix Released
Undecided
Gunnar Hjalmarsson

Bug Description

[SRU test case]
Currently, to test if HOME is available, accountsservice in precise tests for the existence of ~/.profile, and if ~/.profile isn't found, no changes of the language settings are made.

To reproduce the bug you can
1. rename your ~/.profile (temporarily)
2. try to change the user language

This will fail with the misplaced message "not access to HOME yet so language not saved".

The attached patch 0010-set-language.patch_precise-SRU.diff changes the behavior, so as soon as the resulting branch is available in precise-proposed, you'll be able to verify that the HOME availability test is no longer dependent of the existence of ~/.profile.

[Original description]
I had problems with changing language from english (to danish). It's not being applied, even after re-login/reboot.

1) Open gnome-language-selector
2) Install wanted language (if not already installed, in my case Danish)
3) Drag the wanted language to top of list (above english)
4) Push close
5) Logout/login
6) Menus and windows are still english (e.g. gnome-panel, firefox menus).
7) Re-open gnome-language-selector > Changes not applied (english on top as original).

Even tried reboot under 5), still didn't work.

The problem can also be reproduced just by reopening gnome-language-selector just after closing it, and verify changes are not applied, i.e. 1)+3)+4) + 7).

# Here's the root cause:
In step 3) when "slipping" the dragged language, following message occurs:
===============================================
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/LanguageSelector/gtk/GtkLanguageSelector.py", line 62, in wrapper
    res = f(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/LanguageSelector/gtk/GtkLanguageSelector.py", line 1047, in on_treeview_locales_drag_end
    self.writeUserLanguage(envLanguage)
  File "/usr/lib/python2.7/dist-packages/LanguageSelector/gtk/GtkLanguageSelector.py", line 800, in writeUserLanguage
    self.writeUserLanguageSetting(userLanguage=languageString)
  File "/usr/lib/python2.7/dist-packages/LanguageSelector/LanguageSelector.py", line 83, in writeUserLanguageSetting
    iface.SetLanguage(userLanguage)
  File "/usr/lib/python2.7/dist-packages/dbus/proxies.py", line 70, in __call__
    return self._proxy_method(*args, **keywords)
  File "/usr/lib/python2.7/dist-packages/dbus/proxies.py", line 145, in __call__
    **keywords)
  File "/usr/lib/python2.7/dist-packages/dbus/connection.py", line 651, in call_blocking
    message, timeout)
dbus.exceptions.DBusException: org.freedesktop.Accounts.Error.Failed: not access to HOME yet so language not saved
===============================================

The last line " not access to HOME yet so language not saved" made me investigate conf files in my homedir. I noticed that ~/.profile did not exist (my system has been upgraded many times and home conf files have long history).
This fixed the problem:
$ echo "" > ~/.profile
No errors at all, configuration stored on reopen, and re-login applies language change to menus.
However, nothing seems to be written to .profile, neither before/after re-login! It's still empty!

If I remove ~/.profile the bug re-appears completely. I.e.
bug appears if and only if ~.profile is missing.

ProblemType: Bug
DistroRelease: Ubuntu 12.04
Package: language-selector-gnome 0.79
ProcVersionSignature: Ubuntu 3.2.0-26.41-generic 3.2.19
Uname: Linux 3.2.0-26-generic i686
ApportVersion: 2.0.1-0ubuntu10
Architecture: i386
CheckboxSubmission: 7a947f7b03ad4cd4dfd27d0dc7c36d60
CheckboxSystem: daed2f3d6643b4a84b4520a2427f8c2b
Date: Wed Jun 27 23:22:50 2012
ExecutablePath: /usr/bin/gnome-language-selector
InterpreterPath: /usr/bin/python2.7
PackageArchitecture: all
SourcePackage: language-selector
UpgradeStatus: Upgraded to precise on 2012-06-17 (10 days ago)

Revision history for this message
Martin Thøgersen (martint) wrote :
Revision history for this message
Nils Rennebarth (nils-rennebarth) wrote :

Yes, I can confirm the bug as well as the solution.

Please: Can someone who knows the package can look into it. With this information it should be easy to fix.

Revision history for this message
Steve Langasek (vorlon) wrote :

This error message comes from the accountsservice package. Reassigning.

affects: language-selector (Ubuntu) → accountsservice (Ubuntu)
Changed in accountsservice (Ubuntu):
importance: Undecided → Medium
status: New → Triaged
Revision history for this message
Vasil Yakauleu (vasilbelarus) wrote :

Yesterday I installed Ubuntu 12.04 and latest updates, changing language work fine now!

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

Thanks for taking the time to report this issue!

This is the code in accountsservice (user_change_language_authorized_cb() in src/user.c):

        gchar *profile_path = g_build_path ("/", user->home_dir, ".profile", NULL);
        if (!g_file_test (profile_path, G_FILE_TEST_IS_REGULAR)) {

                /* SetLanguage was probably called from a login greeter,
                   and HOME not mounted and/or not decrypted.
                   Hence don't save anything, or else accountsservice
                   and ~/.pam_environment would become out of sync. */
                throw_error (context, ERROR_FAILED, "not access to HOME yet so language not saved");
                goto out2;
        }

As you can see, the purpose of the test whether ~/.profile exists is to find out whether HOME is available (please note that /etc/skel includes the file .profile, at least in the latest Ubuntu releases). If there is a safer way to test for the availability of HOME, please let me know, and I'll be happy to submit a suitable merge proposal.

Changed in accountsservice (Ubuntu):
assignee: nobody → Gunnar Hjalmarsson (gunnarhj)
status: Triaged → In Progress
Revision history for this message
Eric Rasche (rasche-eric) wrote :

Gunnar, I've this bug affects me too. It took a long time to actually track down this "bug" as being the cause of the problem. Given that there are very few items in /etc/skel (.profile, .bash_logout, .bashrc); .profile makes the most sense as a decent test since many people change default shell and there's no guarantee on .bashrc/.bash_logout existing.

That said, I would think that users would benefit from simply changing the error message here. Instead of seeing "no access to HOME", maybe something more descriptive like

"No access to ~/.profile or ~/.profile does not exist, so language not saved."

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

Instead of changing the error message I propose a code change so that the availability of HOME is tested independently of the existence of ~/.profile. Since lp:ubuntu/accountsservice doesn't give me the latest accountsservice branch (which it should), I added an attachment which is a diff that can be applied to the latest version of 0010-set-language.patch.

A quantal build of accountsservice, with the proposed code change, is available in my PPA at https://launchpad.net/~gunnarhj/+archive/misc

tags: added: patch
Revision history for this message
Ubuntu Foundations Team Bug Bot (crichton) wrote :

The attachment "0010-set-language.patch.diff" of this bug report has been identified as being a patch. The ubuntu-reviewers team has been subscribed to the bug report so that they can review the patch. In the event that this is in fact not a patch you can resolve this situation by removing the tag 'patch' from the bug report and editing the attachment so that it is not flagged as a patch. Additionally, if you are member of the ubuntu-reviewers team please also unsubscribe the team from this bug report.

[This is an automated message performed by a Launchpad user owned by Brian Murray. Please contact him regarding any issues with the action taken in this bug report.]

Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package accountsservice - 0.6.21-6ubuntu4

---------------
accountsservice (0.6.21-6ubuntu4) quantal; urgency=low

  * 0010-set-language.patch: Fix saving of language selection if ~/.profile
    does not exist. (LP: #1018621)
 -- Gunnar Hjalmarsson <email address hidden> Mon, 17 Sep 2012 14:26:29 +0200

Changed in accountsservice (Ubuntu):
status: In Progress → Fix Released
Revision history for this message
Gunnar Hjalmarsson (gunnarhj) wrote :
description: updated
Changed in accountsservice (Ubuntu Precise):
assignee: nobody → Gunnar Hjalmarsson (gunnarhj)
status: New → In Progress
description: updated
Revision history for this message
Clint Byrum (clint-fewbar) wrote : Please test proposed package

Hello Martin, or anyone else affected,

Accepted accountsservice into precise-proposed. The package will build now and be available at http://launchpad.net/ubuntu/+source/accountsservice/0.6.15-2ubuntu9.4 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation how to enable and use -proposed. Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please change the bug tag from verification-needed to verification-done. If it does not, change the tag to verification-failed. In either case, details of your testing will help us make a better decision.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance!

Changed in accountsservice (Ubuntu Precise):
status: In Progress → Fix Committed
tags: added: verification-needed
Revision history for this message
Gunnar Hjalmarsson (gunnarhj) wrote :

I have successfully installed and run the amd64 build of accountsservice 0.6.15-2ubuntu9.4. It allows me to change the language settings even if ~/.profile does not exist.

tags: added: verification-done
removed: verification-needed
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package accountsservice - 0.6.15-2ubuntu9.4

---------------
accountsservice (0.6.15-2ubuntu9.4) precise-proposed; urgency=low

  * 0010-set-language.patch: Fix saving of language selection if ~/.profile
    does not exist. (LP: #1018621)
 -- Gunnar Hjalmarsson <email address hidden> Tue, 25 Sep 2012 12:14:17 +0200

Changed in accountsservice (Ubuntu Precise):
status: Fix Committed → Fix Released
Revision history for this message
Scott Kitterman (kitterman) wrote : Update Released

The verification of this Stable Release Update has completed successfully and the package has now been released to -updates. Subsequently, the Ubuntu Stable Release Updates Team is being unsubscribed and will not receive messages about this bug report. In the event that you encounter a regression using the package from -updates please report a new bug using ubuntu-bug and tag the bug report regression-update so we can easily find any regresssions.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

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