Snaps cannot access IBus when $XDG_CACHE_HOME is set

Bug #1890905 reported by Rüdiger Kupper
22
This bug affects 3 people
Affects Status Importance Assigned to Milestone
snapd (Ubuntu)
Confirmed
Medium
Unassigned

Bug Description

This is a follow-up to #1580463. (Note: I am not an expert in snap or apparmor related things, please correct me in anything I say below, thank you ;-).)

Bug #1580463 dealt with a problem in snaps achieving a correct path for accessing IBus and has since been closed as fixed. Here, I describe a problem which is most probably related and appears when user caches are stored in non-standard locations (i.e., not in ~/.cache).

Background:
- IBus is an input method for graphical Desktops like GNOME, allowing easy keyboard input for some languages (like Asian languages).
- It is the standard input method on GNOME, which is the standard desktop environment in Ubuntu.
- When the user logs into the desktop session, the IBus interface is created and sockets stored in the user's cache directory, the default being ~/.cache/ibus/ and ~/.config/ibus/.
- Applications need access to these data to consume keyboard input.

Regarding snaps:
- Snaps are confined, meaning they have access to only the smallest possible subset of file paths – including strictly defined paths in the users's home directory.
- In the process of resolving #1580463, it has been ensured that snaps can safely access ~/.cache/ibus/, so they can consume keyboard input.

Issue at hand:
- There is a well-documented and perfectly valid way of moving a user's cache directory away from the default location:
- It is defined by the freedesktop.org specification (see https://specifications.freedesktop.org/basedir-spec/latest/ar01s03.html) which GNOME adheres to.
- That specifies that all applications shall expect user specific cache data to be located below $XDG_CACHE_HOME, where this environment variable shall default to ~/.cache if unset or empty.
- I here report that snaps currently do not follow this specification, causing them to *refuse any keyboard input when IBus is selected as input method and $XDG_CACHE_HOME is set*.

Typical use case:
- $XDG_CACHE_HOME is typically set to a local file path when the users' home directories are located on a network share.
- This is a typical setup for mid- to larger scale applications of Ubuntu, such as schools or universities.
- Meaning this will affect *a lot of users* at institutions using Ubuntu (but not the average home user).

Test case:
- Chromium snap in Ubuntu 20.04[.1]
- Upon upgrade from 18.04 LTS to 20.04 LTS, the chromium-browser deb package (unconfined) will forcefully be replaced by the (confined) chromium snap, which manifests above described problem.

Impact:
- Chromium (and presumably other snaps) stop accepting keyboard input after LTS upgrade to Ubuntu 20.04 when $XDG_CACHE_HOME is set.

This is a severe problem.

Steps to reproduce:
- Set $XDG_CACHE_HOME to a location different from ~/.cache, such as /tmp/<something> or /var/<something>. (Both are paths very likely be used by installs with network located homes. Note this must be done before the graphical session starts, like in the user's ~/.profile.)
- Log the user out from and in again to the graphical session.
- Confirm (from a terminal) that IBus data is now located below $XDG_CACHE_HOME/ibus/bus.
- (rm -r ~/snap/chromium/current/.config/ if you had formerly started the chromium snap)
- Start the chromium snap.
- Observe that *it refuses to read any keyboard input*.

description: updated
description: updated
description: updated
Revision history for this message
Rüdiger Kupper (ruediger.kupper) wrote :

Cross references:
- https://bugs.launchpad.net/ubuntu/+source/snapd/+bug/1580463/comments/39 indicating that /home/* may be hard coded for snap access (breaking the freedesktop.org specs)
- https://bugs.launchpad.net/ubuntu/+source/snapd/+bug/1580463/comments/40 stating that this *should* have been changed to $XDG_CACHE_HOME/ibus – but apparently this did not work.

description: updated
description: updated
description: updated
description: updated
description: updated
description: updated
Revision history for this message
Rüdiger Kupper (ruediger.kupper) wrote :

Attaching relevant portions from journalctl: Once with and without XDG_CACHE_HOME set. Each time I launched the chrome snap, typed some keys, and quit.

Revision history for this message
Rüdiger Kupper (ruediger.kupper) wrote :
Revision history for this message
Rüdiger Kupper (ruediger.kupper) wrote :
Changed in snapd (Ubuntu):
importance: Undecided → Medium
description: updated
Revision history for this message
Rüdiger Kupper (ruediger.kupper) wrote :

Sorry, I mixed up `.cache` and `.config` in the bug description (corrected).

I originally found this problem referring to the users CACHE directory. But as ibus needs both, .cache and .config, it is to be expected that the same problem appears when users' CONFIG is relocated (wich is as easily possible as CACHE).

The relevant environment variables from the freedesktop specification are (see https://specifications.freedesktop.org/basedir-spec/latest/ar01s03.html):

- $XDG_CACHE_HOME (defaults to ~/.cache)
- $XDG_CONFIG_HOME (defaults to ~/.config)

Both must be taken care of, as there are valid reasons for setting them to non-standard locations, esp. in networking environments.

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

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in snapd (Ubuntu):
status: New → Confirmed
Revision history for this message
Gunnar Hjalmarsson (gunnarhj) wrote :

Bug #1856738 seems to be related.

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

Or bug #1423890, which includes a link to a mailing list discussion.

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

I could reproduce this issue in Ubuntu impish by simply adding:

export XDG_CACHE_HOME=/tmp/mycache

to ~/.profile and relogin.

Then, as James Henstridge suggested, I tried starting it like this:

IBUS_USE_PORTAL=1 chromium

Unfortunately that did not help.

I made one observation, though, which might be useful as a workaround: If I set the XDG_CACHE_HOME variable to "/tmp" (instead of "/tmp/mycache"), typing within the Chromium snap, including inputting with an IBus engine, worked as expected. Possibly the explanation is that /tmp is used as a fallback, sort of, to deal with BSD systems.

https://github.com/ibus/ibus/blob/master/bus/server.c

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.