← Back to team overview

touch-packages team mailing list archive

[Bug 1443178] Re: Accounts Service always relies on language fallback if never set by the user

 

I wrote a patch which makes accountsservice set the Language and
FormatsLocale properties automatically as soon as possible and updates
~/.pam_environment accordingly. I built a test version of
accountsservice in my PPA at

https://launchpad.net/~gunnarhj/+archive/ubuntu/accountsservice-test

@Ricardo:
Can you possibly test this version on the phone, and confirm that the fix addresses the issue?

@Sebastien:
This means that the behaviour (behind the scenes) changes for everyone. Language and regional formats are set for every user, based on /etc/default/locale, before the users have touched a GUI for the purpose. I made some code rearrangement to achieve it, and the most 'hackish' part is that it happens in the user_get_property() function.

I'd appreciate your eyes on it before uploading. Especially:
1. Do you see any drawback with enforcing user settings of language and
   regional formats?
2. Is this an acceptable way to do it?

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to accountsservice in Ubuntu.
https://bugs.launchpad.net/bugs/1443178

Title:
  Accounts Service always relies on language fallback if never set by
  the user

Status in the base for Ubuntu mobile products:
  New
Status in accountsservice package in Ubuntu:
  In Progress
Status in ubuntu-system-settings package in Ubuntu:
  New
Status in unity8 package in Ubuntu:
  New

Bug description:
  current build number: 169
  device name: mako
  channel: ubuntu-touch/devel-proposed
  alias: ubuntu-touch/vivid-proposed
  last update: 2015-04-12 20:38:14
  version version: 169
  version ubuntu: 20150412
  version device: 20150210
  version custom: 20150412

  This causes a bad side effect when changing volume via indicator-
  sound, as that will cause a sync to accountsservice in order to sync
  the volume. Once that sync happens, it will request the user
  properties, and in case the user doesn't have a valid language at
  /var/lib/AccountsService/users/<user>, it will always rely on the
  fallback, which would be fine if calculating the fallback wasn't 't so
  cpu or i/o intensive (and that happens multiple times).

  As a test, just flash latest vivid image on mako, don't set any
  language when the wizard shows up, run top and then change the volume
  by pressing volume up/down. This is what I see with mako:

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  2609 phablet   20   0  499660 121220  52688 S   7.6  6.5   0:41.69 unity8
  5600 phablet   20   0    3676   1760   1288 R   6.0  0.1   0:00.19 language-option
  1312 root      20   0  211532  15572  11344 S   1.9  0.8   0:07.25 unity-system-co
  1316 phablet   20   0   36532   3792   2928 S   1.3  0.2   0:01.66 accounts-daemon

  And the reason why:
  src/user.c
  ...
  static void
  user_get_property (GObject    *object,
                     guint       param_id,
                     GValue     *value,
                     GParamSpec *pspec)
  {
          User *user = USER (object);
  ...
          case PROP_LANGUAGE:
                  if (user->language)
                          g_value_set_string (value, user->language);
                  else 
                          g_value_set_string (value, user_get_fallback_value (user, "Language"));
                  break;
          case PROP_FORMATS_LOCALE:
                  if (user->formats_locale)
                          g_value_set_string (value, user->formats_locale);
                  else 
                          g_value_set_string (value, user_get_fallback_value (user, "FormatsLocale"));
                  break;

  user_set_property never gets called unless the user changes the system
  language from system-settings or wizard.

  Once you change the language, it will set a valid language at
  /var/lib/AccountsService/users/<user>, causing this behavior to stop.

  Another bad side effect of this issue is that it takes quite a while
  for accountsservice to reply back to indicator-sound when the sync
  happens, possibly causing sync aborts (as indicator-sound only waits 1
  second before triggering another sync).

  Some possible ways to fix this issue:
  1) Make wizard to set language even when the selected language is already the default one;
  2) Change accountsservice to save the fallback value at the first time it gets that from the system;

To manage notifications about this bug go to:
https://bugs.launchpad.net/canonical-devices-system-image/+bug/1443178/+subscriptions


References