configure.ac.in | 1 + scripts/xflock4 | 4 +++- scripts/xinitrc.in.in | 31 ++++++++++++++++++++++++------- xfce.desktop.in | 2 +- xfce4-session/Makefile.am | 2 ++ xfce4-session/xfsm-manager.c | 5 +++++ xfce4-session/xfsm-startup.c | 5 +++-- 7 files changed, 39 insertions(+), 11 deletions(-) diff --git a/configure.ac.in b/configure.ac.in index 4f21c8f1..b9d38657 100644 --- a/configure.ac.in +++ b/configure.ac.in @@ -106,6 +106,7 @@ XDT_CHECK_PACKAGE([GTK], [gtk+-3.0], [3.22.0]) XDT_CHECK_PACKAGE([GIO], [gio-2.0], [2.50.0]) XDT_CHECK_PACKAGE([GMODULE], [gmodule-2.0], [2.50.0]) XDT_CHECK_PACKAGE([LIBWNCK], [libwnck-3.0], [3.10]) +XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [0.72]) XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [4.12.0]) dnl Check for Polkit/PolicyKit diff --git a/scripts/xflock4 b/scripts/xflock4 index 7ebb423a..3ee3e461 100644 --- a/scripts/xflock4 +++ b/scripts/xflock4 @@ -24,11 +24,13 @@ # First test for the command set in the session's xfconf channel LOCK_CMD=$(xfconf-query -c xfce4-session -p /general/LockCommand) -# Lock by xscreensaver or gnome-screensaver, if a respective daemon is running +# Lock by xscreensaver, mate-screensaver or gnome-screensaver, if a respective daemon is running for lock_cmd in \ "$LOCK_CMD" \ "xfce4-screensaver-command --lock" \ "xscreensaver-command -lock" \ + "light-locker-command --lock" \ + "mate-screensaver-command --lock" \ "gnome-screensaver-command --lock" do if [ ! -z "$lock_cmd" ]; then diff --git a/scripts/xinitrc.in.in b/scripts/xinitrc.in.in index ff044edf..fd1ed741 100755 --- a/scripts/xinitrc.in.in +++ b/scripts/xinitrc.in.in @@ -53,6 +53,9 @@ fi # For now, start with an empty list XRESOURCES="" +# ~/.Xresources contains overrides to the above +test -r "$HOME/.Xresources" && XRESOURCES="$XRESOURCES $HOME/.Xresources" + # Has to go prior to merging Xft.xrdb, as its the "Defaults" file test -r "@_sysconfdir_@/xdg/xfce4/Xft.xrdb" && XRESOURCES="$XRESOURCES @_sysconfdir_@/xdg/xfce4/Xft.xrdb" test -r $HOME/.Xdefaults && XRESOURCES="$XRESOURCES $HOME/.Xdefaults" @@ -69,9 +72,6 @@ fi # merge in X cursor settings test -r "$BASEDIR/Xcursor.xrdb" && XRESOURCES="$XRESOURCES $BASEDIR/Xcursor.xrdb" -# ~/.Xresources contains overrides to the above -test -r "$HOME/.Xresources" && XRESOURCES="$XRESOURCES $HOME/.Xresources" - # load all X resources (adds /dev/null to avoid an empty list that would hang the process) cat /dev/null $XRESOURCES | xrdb -merge - @@ -79,16 +79,32 @@ cat /dev/null $XRESOURCES | xrdb -merge - test -r $HOME/.Xmodmap && xmodmap $HOME/.Xmodmap # if XAUTHLOCALHOSTNAME is not set in systemd user session, starting of xfce4-notifyd, DISPLAY etc. will fail -if command -v systemctl >/dev/null 2>&1 && systemctl --user list-jobs >/dev/null 2>&1; then # user session is running - dbus-update-activation-environment --systemd XAUTHLOCALHOSTNAME=$XAUTHLOCALHOSTNAME +SYSTEMCTL=systemctl +if /sbin/sd_booted >/dev/null && \ + command -v "$SYSTEMCTL" >/dev/null 2>&1 && "$SYSTEMCTL" --user list-jobs >/dev/null 2>&1; then # user session is running + dbus-update-activation-environment --systemd XAUTHLOCALHOSTNAME=$XAUTHLOCALHOSTNAME XDG_SEAT="$XDG_SEAT" XDG_SEAT_PATH="$XDG_SEAT_PATH" fi +# Migrate from old ALT-specific Xfce xkb settings (/Default/XkbOption property) +# to the new upstream's propeties (/Default/XkbOptions/Group, /Default/XkbOptions/Compose) +XFCONF_QUERY_CMD="xfconf-query -c keyboard-layout" +old_xkb_options="$($XFCONF_QUERY_CMD -p /Default/XkbOption 2>/dev/null)" +if [ -n "$old_xkb_options" ]; then + $XFCONF_QUERY_CMD -p /Default/XkbOption --reset + xkb_option_grp="$(printf %s "$old_xkb_options" | sed -n -r 's/.*(grp:[^[:blank:],]+).*/\1/p')" + [ -z "$xkb_option_grp" ] || + $XFCONF_QUERY_CMD -p /Default/XkbOptions/Group --create --type=string --set="$xkb_option_grp" + xkb_option_compose="$(printf %s "$old_xkb_options" | sed -n -r 's/.*(compose:[^[:blank:],]+).*/\1/p')" + [ -z "$xkb_option_compose" ] || + $XFCONF_QUERY_CMD -p /Default/XkbOptions/Compose --create --type=string --set="$xkb_option_compose" +fi # check if we start xfce4-session with ck-launch-session. this is only # required for starting from a console, not a login manager if test "x$XFCE4_SESSION_WITH_CK" = "x1"; then - if command -v ck-launch-session >/dev/null 2>&1; then - exec ck-launch-session xfce4-session + CK_LAUNCH_SESSION=ck-launch-session + if command -v $CK_LAUNCH_SESSION >/dev/null 2>&1; then + exec $CK_LAUNCH_SESSION xfce4-session else echo echo "You have tried to start Xfce with consolekit support, but" @@ -102,5 +118,6 @@ else exec xfce4-session fi + # if we got here, then exec failed exit 1 diff --git a/xfce.desktop.in b/xfce.desktop.in index 58fb274f..0b509675 100644 --- a/xfce.desktop.in +++ b/xfce.desktop.in @@ -2,7 +2,7 @@ Version=1.0 _Name=Xfce Session _Comment=Use this session to run Xfce as your desktop environment -Exec=startxfce4 +Exec=/usr/bin/startxfce4 Icon= Type=Application DesktopNames=XFCE diff --git a/xfce4-session/Makefile.am b/xfce4-session/Makefile.am index 2d0727aa..585fbc49 100644 --- a/xfce4-session/Makefile.am +++ b/xfce4-session/Makefile.am @@ -81,6 +81,7 @@ xfce4_session_CFLAGS = \ $(POLKIT_CFLAGS) \ $(XFCONF_CFLAGS) \ $(GMODULE_CFLAGS) \ + $(DBUS_GLIB_CFLAGS) \ $(PLATFORM_CFLAGS) xfce4_session_LDFLAGS = \ @@ -97,6 +98,7 @@ xfce4_session_LDADD = \ $(GMODULE_LIBS) \ $(GIO_LIBS) \ $(LIBWNCK_LIBS) \ + $(DBUS_GLIB_LIBS) \ $(POLKIT_LIBS) \ $(XFCONF_LIBS) \ $(LIBM) diff --git a/xfce4-session/xfsm-manager.c b/xfce4-session/xfsm-manager.c index f66ec4de..e19bbfb0 100644 --- a/xfce4-session/xfsm-manager.c +++ b/xfce4-session/xfsm-manager.c @@ -1283,6 +1283,11 @@ xfsm_manager_save_yourself_global (XfsmManager *manager, NULL); g_error_free (error); } + else + { + /* Restore XKB settings */ + g_spawn_command_line_async ("xfce4-fixkeyboard", NULL); + } /* at this point, either we failed to suspend/hibernate/hybrid sleep/switch user, * or we successfully did and we've been woken back diff --git a/xfce4-session/xfsm-startup.c b/xfce4-session/xfsm-startup.c index 485e3b7e..0ed9c8d9 100644 --- a/xfce4-session/xfsm-startup.c +++ b/xfce4-session/xfsm-startup.c @@ -249,7 +249,8 @@ xfsm_startup_init (XfconfChannel *channel) "No GPG agent found"); } - if (xfconf_channel_get_bool (channel, "/startup/ssh-agent/enabled", TRUE)) + /* ALT specific: ssh-agent should be launched from /etc/X11/profile.d/ssh-agent.sh */ + if (xfconf_channel_get_bool (channel, "/startup/ssh-agent/enabled", FALSE)) { ssh_agent = xfconf_channel_get_string (channel, "/startup/ssh-agent/type", NULL); @@ -276,7 +277,7 @@ xfsm_startup_init (XfconfChannel *channel) g_free (ssh_agent); } - if (G_LIKELY (ssh_agent_path != NULL || gpgagent_ssh_enabled)) + if (G_UNLIKELY (ssh_agent_path != NULL || gpgagent_ssh_enabled)) { agentpid = xfsm_ssh_agent_pid (g_getenv ("SSH_AGENT_PID"));