diff --git a/SOURCES/0001-gnome-session-avoid-setting-LC_-unless-LANG-and-regi.patch b/SOURCES/0001-gnome-session-avoid-setting-LC_-unless-LANG-and-regi.patch new file mode 100644 index 0000000..72115c8 --- /dev/null +++ b/SOURCES/0001-gnome-session-avoid-setting-LC_-unless-LANG-and-regi.patch @@ -0,0 +1,63 @@ +From a42ccfa0e8be2e658d081c3637ff0f43e2b38d3c Mon Sep 17 00:00:00 2001 +From: Takao Fujiwara +Date: Tue, 22 Oct 2019 20:44:04 +0900 +Subject: [PATCH] gnome-session: avoid setting LC_ unless LANG and region + disagree + +At the moment, gnome-session explicitly sets the various LC_ variables +to the user configured region. + +That's unnecessary, though. If the LC_ variables are unset, +applications know to use LANG. Furthermore, setting the LC_ variables +makes it so you can't override them with LANG anymore. + +This commit makes sure the LC_ variables only get set when absolutely +necesary. That is, when they are different than LANG. + +https://gitlab.gnome.org/GNOME/gnome-session/issues/37 +--- + gnome-session/gnome-session.in | 14 +++++++++----- + 1 file changed, 9 insertions(+), 5 deletions(-) + +diff --git a/gnome-session/gnome-session.in b/gnome-session/gnome-session.in +index 7d967d34..90566f1d 100755 +--- a/gnome-session/gnome-session.in ++++ b/gnome-session/gnome-session.in +@@ -1,25 +1,29 @@ + #!/bin/sh + + if [ "x$XDG_SESSION_TYPE" = "xwayland" ] && + [ "x$XDG_SESSION_CLASS" != "xgreeter" ] && + [ -n "$SHELL" ]; then + if [ "$1" != '-l' ]; then + exec bash -c "exec -l '$SHELL' -c '$0 -l $*'" + else + shift + fi + fi + + SETTING=$(gsettings get org.gnome.system.locale region) + REGION=${SETTING#\'} + REGION=${REGION%\'} + + if [ -n "$REGION" ]; then +- export LC_TIME=$REGION +- export LC_NUMERIC=$REGION +- export LC_MONETARY=$REGION +- export LC_MEASUREMENT=$REGION +- export LC_PAPER=$REGION ++ unset LC_TIME LC_NUMERIC LC_MONETARY LC_MEASUREMENT LC_PAPER ++ ++ if [ "$LANG" != "$REGION" ] ; then ++ export LC_TIME=$REGION ++ export LC_NUMERIC=$REGION ++ export LC_MONETARY=$REGION ++ export LC_MEASUREMENT=$REGION ++ export LC_PAPER=$REGION ++ fi + fi + + exec @libexecdir@/gnome-session-binary "$@" +-- +2.41.0.rc2 + diff --git a/SOURCES/50-redhat-kiosk.dconf b/SOURCES/50-redhat-kiosk.dconf new file mode 100644 index 0000000..5537b0d --- /dev/null +++ b/SOURCES/50-redhat-kiosk.dconf @@ -0,0 +1,38 @@ +[org/gnome/desktop/a11y/applications] +screen-keyboard-enabled=true + +[org/gnome/desktop/interface] +gtk-im-module='ibus' +toolkit-accessibility=true + +[org/gnome/desktop/lockdown] +disable-command-line=true +disable-lock-screen=true +disable-application-handlers=true +disable-user-switching=true +user-administration-disabled=true + +[org/gnome/desktop/wm/keybindings] +always-on-top=@as [] +begin-move=@as [] +begin-resize=@as [] +close=@as [] +lower=@as [] +maximize=@as [] +maximize-horizontally=@as [] +maximize-vertically=@as [] +minimize=@as [] +panel-main-menu=@as [] +panel-run-dialog=@as [] +raise=@as [] +raise-or-lower=@as [] +show-desktop=@as [] +toggle-fullscreen=@as [] +toggle-maximized=@as [] +unmaximize=@as [] + +[org/gnome/desktop/wm/preferences] +num-workspaces=1 + +[org/gnome/mutter] +dynamic-workspaces=false diff --git a/SOURCES/50-redhat-kiosk.dconf.locks b/SOURCES/50-redhat-kiosk.dconf.locks new file mode 100644 index 0000000..f8f173d --- /dev/null +++ b/SOURCES/50-redhat-kiosk.dconf.locks @@ -0,0 +1,8 @@ +/org/gnome/desktop/a11y/applications/screen-keyboard-enabled +/org/gnome/desktop/interface/gtk-im-module +/org/gnome/desktop/interface/toolkit-accessibility +/org/gnome/desktop/lockdown/disable-command-line +/org/gnome/desktop/lockdown/disable-lock-screen +/org/gnome/desktop/lockdown/disable-application-handlers +/org/gnome/desktop/lockdown/disable-user-switching +/org/gnome/desktop/lockdown/user-administration-disabled diff --git a/SOURCES/com.redhat.KioskWithKeyboard.WindowManager.desktop b/SOURCES/com.redhat.KioskWithKeyboard.WindowManager.desktop new file mode 100644 index 0000000..9a89de7 --- /dev/null +++ b/SOURCES/com.redhat.KioskWithKeyboard.WindowManager.desktop @@ -0,0 +1,13 @@ +[Desktop Entry] +Type=Application +Name=GNOME Shell Kiosk Mode +Comment=Window manager +Exec=env DCONF_PROFILE=redhatkiosk /usr/bin/gnome-shell --mode=redhat-kiosk +Categories=GNOME;GTK;Core; +OnlyShowIn=GNOME; +NoDisplay=true +X-GNOME-Autostart-Phase=DisplayServer +X-GNOME-Provides=windowmanager; +X-GNOME-Autostart-Notify=true +X-GNOME-AutoRestart=false +X-GNOME-HiddenUnderSystemd=true diff --git a/SOURCES/com.redhat.KioskWithKeyboard.desktop b/SOURCES/com.redhat.KioskWithKeyboard.desktop new file mode 100644 index 0000000..b4da81d --- /dev/null +++ b/SOURCES/com.redhat.KioskWithKeyboard.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=Kiosk (with on-screen keyboard) +Comment=Kiosk mode with on-screen keyboard +Exec=/usr/bin/env DCONF_PROFILE=redhatkiosk /usr/bin/gnome-session --session=redhat-kiosk-with-keyboard +DesktopNames=Red-Hat-Kiosk;GNOME; + diff --git a/SOURCES/redhat-kiosk b/SOURCES/redhat-kiosk index 154df7c..8c11bfd 100755 --- a/SOURCES/redhat-kiosk +++ b/SOURCES/redhat-kiosk @@ -23,4 +23,7 @@ EOF touch ~/.config/gnome-initial-setup-done fi +export DCONF_PROFILE=redhatkiosk +systemctl --user import-environment DCONF_PROFILE + exec ~/.local/bin/redhat-kiosk "$@" diff --git a/SOURCES/redhat-kiosk-with-keyboard.session b/SOURCES/redhat-kiosk-with-keyboard.session new file mode 100644 index 0000000..bb3364c --- /dev/null +++ b/SOURCES/redhat-kiosk-with-keyboard.session @@ -0,0 +1,3 @@ +[GNOME Session] +Name=Kiosk +RequiredComponents=com.redhat.KioskWithKeyboard.WindowManager;com.redhat.Kiosk.Script; diff --git a/SOURCES/redhat-kiosk.dconf.profile b/SOURCES/redhat-kiosk.dconf.profile new file mode 100644 index 0000000..3cb5276 --- /dev/null +++ b/SOURCES/redhat-kiosk.dconf.profile @@ -0,0 +1,5 @@ +user-db:user +system-db:redhatkiosk +system-db:local +system-db:site +system-db:distro diff --git a/SOURCES/redhat-kiosk.json b/SOURCES/redhat-kiosk.json new file mode 100644 index 0000000..d467ae7 --- /dev/null +++ b/SOURCES/redhat-kiosk.json @@ -0,0 +1,11 @@ +{ + "parentMode": "user", + "hasOverview": false, + "hasRunDialog": false, + "allowSettings": false, + "panel": { "left": [""], + "center": [], + "right": ["keyboard"] + } +} + diff --git a/SPECS/gnome-session.spec b/SPECS/gnome-session.spec index cbaed0f..37a31ab 100644 --- a/SPECS/gnome-session.spec +++ b/SPECS/gnome-session.spec @@ -9,7 +9,7 @@ Name: gnome-session Version: 3.28.1 -Release: 14%{?dist} +Release: 21%{?dist} Summary: GNOME session manager License: GPLv2+ @@ -17,12 +17,26 @@ URL: http://www.gnome.org Source0: http://download.gnome.org/sources/gnome-session/3.28/%{name}-%{version}.tar.xz Source1: gnome.desktop Source2: gnome-xorg.desktop -Source3: com.redhat.Kiosk.WindowManager.desktop -Source4: com.redhat.Kiosk.Script.desktop -Source5: com.redhat.Kiosk.desktop -Source6: redhat-kiosk.session -Source7: redhat-kiosk -Source8: 20-redhat-kiosk.conf + +Source3: com.redhat.Kiosk.Script.desktop + +Source4: com.redhat.Kiosk.desktop +Source5: com.redhat.KioskWithKeyboard.desktop + +Source6: com.redhat.Kiosk.WindowManager.desktop +Source7: com.redhat.KioskWithKeyboard.WindowManager.desktop +Source8: redhat-kiosk.json + +Source9: redhat-kiosk.session +Source10: redhat-kiosk-with-keyboard.session + +Source11: redhat-kiosk + +Source12: 20-redhat-kiosk.conf + +Source13: 50-redhat-kiosk.dconf +Source14: 50-redhat-kiosk.dconf.locks +Source15: redhat-kiosk.dconf.profile Patch0: 0001-gnome-session-don-t-validate-shell-before-using-it.patch @@ -42,6 +56,10 @@ Patch20001: 0001-Fedora-Set-grub-boot-flags-on-shutdown-reboot.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1877997 Patch30001: 0001-main-only-log-check-accelerated-errors-when-debuggin.patch +# Allow user to override language settings +# https://bugzilla.redhat.com/show_bug.cgi?id=2170474 +Patch40001: 0001-gnome-session-avoid-setting-LC_-unless-LANG-and-regi.patch + BuildRequires: meson BuildRequires: gcc BuildRequires: pkgconfig(egl) @@ -133,17 +151,42 @@ cp $RPM_SOURCE_DIR/gnome.desktop $RPM_BUILD_ROOT%{_datadir}/wayland-sessions/gno cp $RPM_SOURCE_DIR/gnome-xorg.desktop $RPM_BUILD_ROOT%{_datadir}/xsessions cp $RPM_SOURCE_DIR/gnome-xorg.desktop $RPM_BUILD_ROOT%{_datadir}/xsessions/gnome.desktop -install -D $RPM_SOURCE_DIR/com.redhat.Kiosk.WindowManager.desktop -t $RPM_BUILD_ROOT/%{_datadir}/applications install -D $RPM_SOURCE_DIR/com.redhat.Kiosk.Script.desktop -t $RPM_BUILD_ROOT%{_datadir}/applications + +install -D $RPM_SOURCE_DIR/com.redhat.Kiosk.WindowManager.desktop -t $RPM_BUILD_ROOT/%{_datadir}/applications +install -D $RPM_SOURCE_DIR/com.redhat.KioskWithKeyboard.WindowManager.desktop -t $RPM_BUILD_ROOT/%{_datadir}/applications + install -D $RPM_SOURCE_DIR/com.redhat.Kiosk.desktop -t $RPM_BUILD_ROOT%{_datadir}/xsessions +install -D $RPM_SOURCE_DIR/com.redhat.KioskWithKeyboard.desktop -t $RPM_BUILD_ROOT%{_datadir}/xsessions + +install -D $RPM_SOURCE_DIR/redhat-kiosk.json -t $RPM_BUILD_ROOT%{_datadir}/gnome-shell/modes + install -D $RPM_SOURCE_DIR/redhat-kiosk.session -t $RPM_BUILD_ROOT%{_datadir}/gnome-session/sessions +install -D $RPM_SOURCE_DIR/redhat-kiosk-with-keyboard.session -t $RPM_BUILD_ROOT%{_datadir}/gnome-session/sessions + install -D $RPM_SOURCE_DIR/redhat-kiosk -t $RPM_BUILD_ROOT%{_bindir} + +install -D $RPM_SOURCE_DIR/20-redhat-kiosk.conf -t $RPM_BUILD_ROOT%{_datadir}/X11/xorg.conf.d + +install -D $RPM_SOURCE_DIR/50-redhat-kiosk.dconf $RPM_BUILD_ROOT%{_sysconfdir}/dconf/db/redhatkiosk.d/50-redhat-kiosk +install -D $RPM_SOURCE_DIR/50-redhat-kiosk.dconf.locks $RPM_BUILD_ROOT%{_sysconfdir}/dconf/db/redhatkiosk.d/locks/50-redhat-kiosk +install -D $RPM_SOURCE_DIR/redhat-kiosk.dconf.profile $RPM_BUILD_ROOT%{_sysconfdir}/dconf/profile/redhatkiosk + install -D $RPM_SOURCE_DIR/20-redhat-kiosk.conf -t $RPM_BUILD_ROOT%{_datadir}/X11/xorg.conf.d %find_lang %{po_package} %ldconfig_scriptlets +%posttrans + +# These files weren't packaged correctly in gnome-session-3.28.1-19.el8 so manually prune them +rmdir %{_sysconfdir}/dconf/db/redhat-kiosk.d/locks 2> /dev/null || : +rmdir %{_sysconfdir}/dconf/db/redhat-kiosk.d 2> /dev/null || : +rm -f %{_sysconfdir}/dconf/db/redhat-kiosk 2> /dev/null || : + +dconf update + %files xsession %{_datadir}/xsessions/* %exclude %{_datadir}/xsessions/com.redhat.Kiosk.desktop @@ -152,10 +195,20 @@ install -D $RPM_SOURCE_DIR/20-redhat-kiosk.conf -t $RPM_BUILD_ROOT%{_datadir}/X1 %{_datadir}/wayland-sessions/* %files kiosk-session -%{_datadir}/applications/com.redhat.Kiosk.WindowManager.desktop +%dir %{_sysconfdir}/dconf/db/redhatkiosk.d/locks +%dir %{_sysconfdir}/dconf/db/redhatkiosk.d +%ghost %{_sysconfdir}/dconf/db/redhatkiosk +%{_sysconfdir}/dconf/db/redhatkiosk.d/50-redhat-kiosk +%{_sysconfdir}/dconf/db/redhatkiosk.d/locks/50-redhat-kiosk +%{_sysconfdir}/dconf/profile/redhatkiosk %{_datadir}/applications/com.redhat.Kiosk.Script.desktop +%{_datadir}/applications/com.redhat.Kiosk.WindowManager.desktop +%{_datadir}/applications/com.redhat.KioskWithKeyboard.WindowManager.desktop +%{_datadir}/gnome-shell/modes/redhat-kiosk.json %{_datadir}/xsessions/com.redhat.Kiosk.desktop +%{_datadir}/xsessions/com.redhat.KioskWithKeyboard.desktop %{_datadir}/gnome-session/sessions/redhat-kiosk.session +%{_datadir}/gnome-session/sessions/redhat-kiosk-with-keyboard.session %{_datadir}/X11/xorg.conf.d/20-redhat-kiosk.conf %{_bindir}/redhat-kiosk @@ -175,6 +228,38 @@ install -D $RPM_SOURCE_DIR/20-redhat-kiosk.conf -t $RPM_BUILD_ROOT%{_datadir}/X1 %{_datadir}/glib-2.0/schemas/org.gnome.SessionManager.gschema.xml %changelog +* Wed May 31 2023 Ray Strode - 3.28.1-21 +- Allow users to override language settings in environment + Resolves: #2170474 + +* Wed Mar 01 2023 Ray Strode - 3.28.1-20 +- Work around dconf log spew by renaming dconf profile + Related: 2070976 + Resolves: #2174414 + +* Tue Feb 28 2023 Ray Strode - 3.28.1-19 +- Another fix + Related: #2070976 + +* Tue Feb 28 2023 Ray Strode - 3.28.1-18 +- Fix issue introduced in last build + Related: #2070976 + +* Tue Feb 28 2023 Ray Strode - 3.28.1-17 +- Don't force kiosk profile for user in non-kiosk sessions + after the user has been used for a kiosk session once + Related: #2070976 + +* Tue Feb 28 2023 Ray Strode - 3.28.1-16 +- Fix glitch where enabling on-screen keyboard requires initial + reboot + Related: #2070976 + +* Mon Feb 27 2023 Ray Strode - 3.28.1-15 +- Add new shell based variant of kiosk mode that supports + on-screen keyboard + Resolves: #2070976 + * Tue Dec 21 2021 Ray Strode - 3.28.1-14 - Make some debug spew only show up if debugging is enabled Resolves: #1877997