all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Meiyo Peng <meiyo@riseup.net>
To: Giovanni Biscuolo <g@xelera.eu>
Cc: guix-devel@gnu.org
Subject: Re: XDG_DATA_DIRS issue in execution environment on LTSP
Date: Thu, 28 Mar 2019 09:55:13 +0800	[thread overview]
Message-ID: <878swz930e.fsf@riseup.net> (raw)
In-Reply-To: <87r2asweu1.fsf@roquette.mug.biscuolo.net>

Hi Giovanni,

Giovanni Biscuolo writes:

> I want to share this issue and show my "workaround" to fix it, please
> send your comments on alternative ways or other caveats you may find in
> my reasoning

Thank you for sharing you experience with us.

> I'm running Guix on top of Debian/stretch, recently I made Guix
> environment the default execution one for my console and graphical
> applications (bad idea?) and now I have to fix env every time I want to
> run a Debian installed application

I have a similar experience.  I run Guix on top of Debian Sid.

> Since I'm connecting to my machine via an LTSP terminal, I followed this
> guide https://wiki.debian.org/EnvironmentVariables#Quick_guide to have
> the Guix profile automatically set up when I login via LDM; so now I
> have this in my .profile:
>
> --8<---------------cut here---------------start------------->8---
> ### Guix settings
> #
> # add Guix current path
> export PATH="$HOME/.config/guix/current/bin${PATH:+:}$PATH"
> # add Guix infopath
> export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
> # set default Guix profile
> export GUIX_PROFILE="$HOME/.guix-profile"
> # source default Guix profile
> . $GUIX_PROFILE/etc/profile
> # set Guix locale path
> export GUIX_LOCPATH="$GUIX_PROFILE/lib/locale"
> ### end Guix
> --8<---------------cut here---------------end--------------->8---
>
> and this in my .bash_profile *and* .xsessionrc:
>
> --8<---------------cut here---------------start------------->8---
> if [ -f ~/.profile ]; then
>     . ~/.profile
> fi
> --8<---------------cut here---------------end--------------->8---
>
> and lastly this in $GUIX_PROFILE/etc/profile:
>
> --8<---------------cut here---------------start------------->8---
> # Source this file to define all the relevant environment variables in Bash
> # for this profile.  You may want to define the 'GUIX_PROFILE' environment
> # variable to point to the "visible" name of the profile, like this:
> #
> #  GUIX_PROFILE=/path/to/profile ; \
> #  source /path/to/profile/etc/profile
> #
> # When GUIX_PROFILE is undefined, the various environment variables refer
> # to this specific profile generation.
>
> export PATH="${GUIX_PROFILE:-/gnu/store/gvfl5wxrgalxjjmyp7cwgfj48bdd34n4-profile}/bin:${GUIX_PROFILE:-/gnu/store/gvfl5wxrgalxjjmyp7cwgfj48bdd34n4-profile}/sbin${PATH:+:}$PATH"
> export GST_PLUGIN_SYSTEM_PATH="${GUIX_PROFILE:-/gnu/store/gvfl5wxrgalxjjmyp7cwgfj48bdd34n4-profile}/lib/gstreamer-1.0${GST_PLUGIN_SYSTEM_PATH:+:}$GST_PLUGIN_SYSTEM_PATH"
> export XDG_DATA_DIRS="${GUIX_PROFILE:-/gnu/store/gvfl5wxrgalxjjmyp7cwgfj48bdd34n4-profile}/share${XDG_DATA_DIRS:+:}$XDG_DATA_DIRS"
> export GIO_EXTRA_MODULES="${GUIX_PROFILE:-/gnu/store/gvfl5wxrgalxjjmyp7cwgfj48bdd34n4-profile}/lib/gio/modules${GIO_EXTRA_MODULES:+:}$GIO_EXTRA_MODULES"
> --8<---------------cut here---------------end--------------->8---
>
> AFAIU it conforms to the suggested way to setup a working user profile:
> right?
>
> The problem here is I'm getting this env when I login and open a
> terminal emulator:
>
> --8<---------------cut here---------------start------------->8---
> ~ $ env | grep -i guix
> GIO_EXTRA_MODULES=/home/giovanni/.guix-profile/lib/gio/modules
> GST_PLUGIN_SYSTEM_PATH=/home/giovanni/.guix-profile/lib/gstreamer-1.0
> GUIX_LOCPATH=/home/giovanni/.guix-profile/lib/locale
> GUIX_PROFILE=/home/giovanni/.guix-profile
> INFOPATH=/home/giovanni/.config/guix/current/share/info:
> PATH=/home/giovanni/.guix-profile/bin:/home/giovanni/.guix-profile/sbin:/home/giovanni/.config/guix/current/bin:/usr/local/bin/Zotero_linux-x86_64:/home/giovanni/.local/bin:/home/giovanni/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/home/giovanni/bin:/home/giovanni/.local/bin:/home/giovanni/go/bin:/home/giovanni/bin:/home/giovanni/.local/bin
> XDG_DATA_DIRS=/home/giovanni/.guix-profile/share
> --8<---------------cut here---------------end--------------->8---
>
> This causes some Debian installed GUI applications to chrash with a
> GLib-GIO-ERROR like this (evince in this case, I also tried eom from
> Mate and gnome-character-map):
>
> --8<---------------cut here---------------start------------->8---
> ~ $ evince
>
> (evince:26326): GLib-GIO-ERROR **: Settings schema 'org.gnome.Evince' is not installed
>
> rilevato trace/breakpoint
> --8<---------------cut here---------------end--------------->8---
>
> At first I did not ralized it was an env problem, then looking at an
> strace log it tunrs out that it reads gschema.compiled from my user Guix
> profile and not from Debian standard folder [2]:
>
> --8<---------------cut here---------------start------------->8---
> openat(AT_FDCWD, "/home/giovanni/.guix-profile/share/glib-2.0/schemas/gschemas.compiled", O_RDONLY) = 12
> --8<---------------cut here---------------end--------------->8---
>
> [1] /usr/share/gnome:/usr/local/share/:/usr/share/ as documented here
> https://www.debian.org/doc/manuals/debian-reference/ch09.en.html#_starting_a_program_from_gui
>
> To fix this issue now I do (in a terminal emulator):
>
> --8<---------------cut here---------------start------------->8---
> unset XDG_DATA_DIRS
> export XDG_DATA_DIRS="${GUIX_PROFILE:-/gnu/store/gvfl5wxrgalxjjmyp7cwgfj48bdd34n4-profile}/share:/usr/share/gnome:/usr/local/share/:/usr/share/"
> --8<---------------cut here---------------end--------------->8---
>
> Now I should just "backport" this fix in my ~/.profile so it will be
> applied to my graphical login session, too
>
> WDYT? Thanks, Gio'

According to the XDG Base Directory Specification [1]:

#+begin_quote
  If $XDG_DATA_DIRS is either not set or empty, a value equal to /usr/local/share/:/usr/share/ should be used.
  If $XDG_CONFIG_DIRS is either not set or empty, a value equal to /etc/xdg should be used.
#+end_quote

And according to my experience, $XDG_DATA_DIRS and $XDG_CONFIG_DIRS are
not set by default on Debian.  So they should be set to their default
values before adding extra paths to them.

Thus I have this code snippet in my login shell's config (fish rather
than bash).  Fish script is very easy to understand.  I think you can
translate it into bash.

#+begin_src fish
  if status is-login || status is-interactive
      set -gx MY_PROFILE "$HOME/.guix-profile"

      # Guix on foreign distros.
      # This test is a dirty hack.
      if test -d /var/guix && ! test -L /run/current-system
          # Environment
          set -gx ROOT_PROFILE "/var/guix/profiles/per-user/root/guix-profile"
          set -gx GUIX_LOCPATH "$ROOT_PROFILE/lib/locale"
          set -gx SSL_CERT_DIR "$ROOT_PROFILE/etc/ssl/certs"
          set -gx SSL_CERT_FILE "$ROOT_PROFILE/etc/ssl/certs/ca-certificates.crt"

          # XDG
          # ==========> Look at here! <=========
          # Set $XDG_CONFIG_DIRS and $XDG_DATA_DIRS to their default
          # values if they are not set.
          test "$XDG_CONFIG_DIRS" = "" && set -gx XDG_CONFIG_DIRS "/etc/xdg"
          test "$XDG_DATA_DIRS" = "" && set -gx XDG_DATA_DIRS "/usr/local/share:/usr/share"
          set -gx XDG_CONFIG_DIRS "$MY_PROFILE/etc/xdg:$XDG_CONFIG_DIRS"
          set -gx XDG_DATA_DIRS "$MY_PROFILE/share:$XDG_DATA_DIRS"
          # ==========> Look at here! <=========

          # Source my etc/profile
          set -gx GUIX_PROFILE $MY_PROFILE
          fenv source $MY_PROFILE/etc/profile
          set -eu GUIX_PROFILE

          # $PATH
          # add_path is a function defined by me.  It adds the argument
          # into $PATH
          add_path $MY_PROFILE/sbin
          add_path $MY_PROFILE/bin
          add_path $XDG_CONFIG_HOME/guix/current/bin
      end
  end
#+end_src


[1]. XDG Base Directory Specification
https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html


--
Meiyo Peng
https://www.pengmeiyu.com/

  reply	other threads:[~2019-03-28  1:59 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-27 14:51 XDG_DATA_DIRS issue in execution environment on LTSP Giovanni Biscuolo
2019-03-28  1:55 ` Meiyo Peng [this message]
2019-03-28  2:35   ` Meiyo Peng
2019-03-28 11:22   ` Giovanni Biscuolo
2019-03-28 11:51     ` Meiyo Peng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=878swz930e.fsf@riseup.net \
    --to=meiyo@riseup.net \
    --cc=g@xelera.eu \
    --cc=guix-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.