From Fedora Project Wiki

< KDE
Revision as of 13:09, 24 July 2018 by Tuju (talk | contribs)

Home directory on NFS (Network File System) with KDE might cause problems while desktop's IPC (Inter Process Communication) socket's are stored on networked disk and I/O-speed of network and storage itself doesn't match speeds that today's desktop systems can provide with local disk. This might appear as sluggishness and occasional hangups on desktop.

Following user's environment variables can be used to change where these different IPC-files are stored and point them into local disk. To make them system-wide for every user, each setting can be put into own file and dropped into /etc/profile.d directory to get included into user's login process.

XDG_CONFIG_HOME

XDG_CONFIG_HOME

File: /etc/profile.d/xdg.config.sh

if [ -d /srv/home/$USER/.config ]; then
  XDG_CONFIG_HOME=/srv/home/$USER/.config
  export XDG_CONFIG_HOME
fi

XDG_CACHE_HOME

XDG_CACHE_HOME


File: /etc/profile.d/xdg.cache.sh

# could be more paranoid, and not accept any previously defined XDG_CACHE_HOME
if [ -z "${XDG_CACHE_HOME}" ] ; then
  XDG_CACHE_HOME="/var/tmp/xdgcache-${USER}"
  export XDG_CACHE_HOME
fi

if [ -d "${XDG_CACHE_HOME}" ]; then
  # verify existing dir is suitable
  if ! `test -G "${XDG_CACHE_HOME}" -a -w "${XDG_CACHE_HOME}"` ; then
    # else, make a new/secure one with mktemp
    XDG_CACHE_HOME="$(mktemp -d ${XDG_CACHE_HOME}-XXXXXX)"
    export XDG_CACHE_HOME
  fi
else
  mkdir -p "${XDG_CACHE_HOME}" 
fi


XDG_DATA_HOME

XDG_DATA_HOME 

File: /etc/profile.d/xdg.data.sh

if [ -d /srv/home/$USER/.local/share ]; then
  XDG_DATA_HOME=/srv/home/$USER/.local/share
  export XDG_DATA_HOME
fi

KDEHOME

KDEHOME affects where user's .kde directory is located and hence where those problematic socket files are located. Setting KDEHOME makes user's KDE settings machine specific which might be problematic in environment where users move from desktop machine to another and expect to see the same, personalized desktop at each machine.

User's KDE IPC files under ~/.kde directory:

lrwxrwxrwx.  1 tuju tuju   22 Nov  5  2012 cache-wasa.netnix.ee -> /var/tmp/kdecache-tuju
lrwxrwxrwx.  1 tuju tuju   26 Feb  2 15:47 socket-wasa.netnix.ee -> /run/user/500/ksocket-tuju
lrwxrwxrwx.  1 tuju tuju   13 Nov  5  2012 tmp-wasa.netnix.ee -> /tmp/kde-tuju


File: /etc/profile.d/kde.home.sh

# cat USE_LOCAL_DATA.sh 

if [ -d /srv/home/$USER/.kde ]; then
  KDEHOME=/srv/home/$USER/.kde
  export KDEHOME
fi

At the same time while setting KDEHOME, user's .kde directory content should be moved into newly created local host home directory to avoid losing any KDE settings and application data.

KDEHOME contains directories like share/config and share/apps etc that should be considered user's data, not just mere dotfiles/settings and should be included into backup solution.

Disabling selinux permanently should be considered if new location does not match with default /home directory fcontext settings - which is most likely the case.


KDirWatchPrivate and Gamin

Attaching a gdb debugger into hanging process with

gdb -p <pid>

and running a

thread apply all where

shows all threads. One of them might have:

Thread 1 (Thread 0x7fa8e1c56900 (LWP 25745)):
#0  0x00007fa8db9ce460 in __GI___nanosleep (requested_time=0x7ffea3cef990, remaining=0x7ffea3cef990) at ../sysdeps/unix/sysv/linux/nanosleep.c:27
#1  0x00007fa8dc84b51d in qt_nanosleep(timespec) () from /lib64/libQt5Core.so.5
#2  0x00007fa8dde123c8 in KDirWatchPrivate::useFAM(KDirWatchPrivate::Entry*) () from /lib64/libKF5CoreAddons.so.5
#3  0x00007fa8dde1286b in KDirWatchPrivate::addWatch(KDirWatchPrivate::Entry*) () from /lib64/libKF5CoreAddons.so.5

that shows KDirWatchPrivate() class and it uses gamin and its notorious gam_server process. gam_server can be guided to two kind of modes for different directories, kernel notifications and polling. These can be set in /etc/gamin/mandatory_gaminrc file with

poll /net/* 
fsset nfs poll 10

where the last line might be enough to switch gamin monitoring to poll-method on NFS-shares.

See also:

Commands

$ lsof -N -nP | grep kmail

See Also