diff --git a/client/x11/10-ibus-x11.in b/client/x11/10-ibus-x11.in new file mode 100755 index 000000000..973cbb6f1 --- /dev/null +++ b/client/x11/10-ibus-x11.in @@ -0,0 +1,2 @@ +#!/bin/sh +@libexecdir@/ibus-x11 & diff --git a/client/x11/Makefile.am b/client/x11/Makefile.am index 12de6ea8c..68b4abdbd 100644 --- a/client/x11/Makefile.am +++ b/client/x11/Makefile.am @@ -67,6 +67,13 @@ noinst_HEADERS = \ locales.h \ $(NULL) +xwaylandsessiond_in_files = 10-ibus-x11.in +xwaylandsessiond_DATA = $(xwaylandsessiond_in_files:.in=) +xwaylandsessionddir=$(sysconfdir)/xdg/Xwayland-session.d + +10-ibus-x11: 10-ibus-x11.in + $(AM_V_GEN) sed -e "s|\@libexecdir\@|$(libexecdir)|" $< > $@.tmp && mv $@.tmp $@ + $(libIMdkit): (cd $(top_builddir)/util/IMdkit; make) diff --git a/configure.ac b/configure.ac index ce096ad32..0a7f76145 100644 --- a/configure.ac +++ b/configure.ac @@ -393,6 +393,22 @@ if test x"$enable_dconf" = x"yes"; then enable_dconf="yes (enabled, use --disable-dconf to disable)" fi +AC_ARG_ENABLE(systemd-services, + AS_HELP_STRING([--disable-systemd-services], + [Disable systemd services installation]), + [enable_systemd=$enableval], + [enable_systemd=yes] +) +AM_CONDITIONAL([ENABLE_SYSTEMD], [test x"$enable_systemd" = x"yes"]) + +if test x"$enable_systemd" = x"yes"; then + PKG_CHECK_MODULES(SYSTEMD, [ + systemd >= 0.7.5 + ]) + AC_SUBST([SYSTEMD_USER_UNIT_DIR], [`$PKG_CONFIG --variable systemduserunitdir systemd`]) + enable_systemd="yes (enabled, use --disable-systemd-services to disable)" +fi + # Check env. AC_PATH_PROG(ENV_IBUS_TEST, env) AC_SUBST(ENV_IBUS_TEST) @@ -862,5 +878,6 @@ Build options: XFixes client disconnect $have_xfixes Run test cases $enable_tests Install tests $enable_install_tests + Install systemd service $enable_systemd ]) diff --git a/src/Makefile.am b/src/Makefile.am index 578694b52..d81a9fbb3 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -317,6 +317,10 @@ install-data-hook: rm "$(DESTDIR)$(dictdir)/$$file" || exit $$?; \ fi; \ done + $(MKDIR_P) "$(DESTDIR)$(SYSTEMD_USER_UNIT_DIR)/gnome-session.target.wants/" + $(LN_S) -f "$(DESTDIR)$(SYSTEMD_USER_UNIT_DIR)/org.freedesktop.IBus.service" \ + "$(DESTDIR)$(SYSTEMD_USER_UNIT_DIR)/gnome-session.target.wants/" + emoji_parser_SOURCES = \ emoji-parser.c \ @@ -383,6 +387,15 @@ clean-local: $(NULL) endif +if ENABLE_SYSTEMD +systemdservice_in_files = org.freedesktop.IBus.service.in +systemdservice_DATA = $(systemdservice_in_files:.service.in=.service) +systemdservicedir=$(SYSTEMD_USER_UNIT_DIR) + +org.freedesktop.IBus.service: org.freedesktop.IBus.service.in + $(AM_V_GEN) sed -e "s|\@bindir\@|$(bindir)|" $< > $@.tmp && mv $@.tmp $@ +endif + EXTRA_DIST = \ emoji-parser.c \ ibusversion.h.in \ diff --git a/src/org.freedesktop.IBus.service.in b/src/org.freedesktop.IBus.service.in new file mode 100644 index 000000000..76444dbde --- /dev/null +++ b/src/org.freedesktop.IBus.service.in @@ -0,0 +1,28 @@ +[Unit] +Description=IBus Daemon +CollectMode=inactive-or-failed + +# Require GNOME session and specify startup ordering +Requisite=gnome-session-initialized.target +After=gnome-session-initialized.target +PartOf=gnome-session-initialized.target +Before=gnome-session.target + +# Needs to run when DISPLAY/WAYLAND_DISPLAY is set +After=gnome-session-initialized.target +PartOf=gnome-session-initialized.target + +# Never run in GDM +Conflicts=gnome-session@gnome-login.target + +[Service] +Type=dbus +# Only pull --xim in X11 session, it is done via Xwayland-session.d on Wayland +ExecStart=sh -c '@bindir@/ibus-daemon --panel disable $([[ $XDG_SESSION_TYPE == "x11" ]] && echo "--xim")' +Restart=on-abnormal +BusName=org.freedesktop.IBus +TimeoutStopSec=5 +Slice=session.slice + +[Install] +WantedBy=gnome-session.target