fleet/it-and-security/lib/linux/scripts/install-fleet-desktop-required-extension.sh
Allen Houchins f6c841c4ea
Update script and policy to support OpenSUSE (#32757)
- Updated the script and policy that checks to make sure the required
extension is installed for Fleet Desktop to work with OpenSUSE
2025-09-08 20:51:12 -05:00

96 lines
3.2 KiB
Bash
Executable file

#!/bin/bash
# Script assumes one user is using the desktop environment (no multi-session).
# It was tested on Fedora 38, 39, Debian 12, and OpenSUSE Leap/Tumbleweed.
set -x
run_uid=$(id -u)
# Start detached script and exit as root (to send result back to Fleet).
if [ $run_uid == 0 ] && [ $# -eq 0 ]; then
/bin/bash -c "/bin/bash $0 1 >/var/log/orbit/appindicator_script.log 2>/var/log/orbit/appindicator_script.log </dev/null &"
echo "A detached script to install extension has been started (logs can be found in /var/log/orbit/appindicator_script.log)."
exit 0
fi
# Wait for user to be logged in to the GUI (by checking fleet-desktop process).
fleet_desktop_pid=$(pgrep fleet-desktop)
while [ -z $fleet_desktop_pid ]; do
fleet_desktop_pid=$(pgrep fleet-desktop)
sleep 10
done
username=$(ps -o user= -p $fleet_desktop_pid | xargs)
uid=$(ps -o uid= -p $fleet_desktop_pid | xargs)
# Detect the Linux distribution
if [ -f /etc/os-release ]; then
. /etc/os-release
distro_id="$ID"
distro_name="$NAME"
else
distro_id="unknown"
distro_name="unknown"
fi
# Determine extension name and installation method based on distribution
case "$distro_id" in
"opensuse-leap"|"opensuse-tumbleweed"|"opensuse")
extension_name="appindicatorsupport@rgcjonas.gmail.com"
install_method="gnome-extensions"
;;
"fedora"|"debian"|"ubuntu")
extension_name="appindicatorsupport@rgcjonas.gmail.com"
install_method="gnome-extensions"
;;
*)
# Default to the original extension for unknown distributions
extension_name="appindicatorsupport@rgcjonas.gmail.com"
install_method="gnome-extensions"
;;
esac
# Check if the AppIndicator extension is already installed
extension_path="/home/$username/.local/share/gnome-shell/extensions/$extension_name"
extension_installed=false
if [ -d "$extension_path" ]; then
extension_installed=true
fi
# If no extension is installed, install the appropriate one
if [ "$extension_installed" = false ]; then
# Show notification to user before the prompt.
sudo -i -u $username -H DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus \
gdbus call --session \
--dest org.freedesktop.Notifications \
--object-path /org/freedesktop/Notifications \
--method org.freedesktop.Notifications.Notify \
"Fleet Desktop" 0 \"\" "Fleet Desktop" "Install a GNOME extension to enable Fleet Desktop. This lets you see what your organization is doing on your computer." "[]" '{"urgency": <2>}' 0
# Give some time to user to see notification.
sleep 10
# Use GNOME Extensions for all distributions (including OpenSUSE)
sudo -i -u $username -H DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus \
gdbus call --session \
--dest org.gnome.Shell.Extensions \
--object-path /org/gnome/Shell/Extensions \
--method org.gnome.Shell.Extensions.InstallRemoteExtension \
"$extension_name"
# Wait until the extension is accepted by the user ("gdbus call" command above is asynchronous).
while [ ! -d "/home/$username/.local/share/gnome-shell/extensions/$extension_name" ]; do
sleep 1
done
# Sleep to give some time for files to be downloaded.
sleep 15
fi
# Enable the extension
if [ -d "$extension_path" ]; then
sudo -i -u $username -H DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus \
gnome-extensions enable "$extension_name"
fi