#!/usr/bin/bash set -eo pipefail RED=1 GREEN=2 ORANGE=3 BLUE=4 print_log() { tput bold tput setaf $1 echo -en "$2:" tput sgr0 tput bold echo -en " $3" if [ $5 ]; then tput setaf $GREEN echo -en " \u2713" fi if [ ! $4 ]; then echo "" fi tput sgr0 } print_info() { if [ $2 ]; then check=1 else check= fi suffix="" print_log $BLUE "INFO" "$1" "" $check } print_error() { print_log $RED "FEHLER" "$1" } print_warning() { print_log $ORANGE "WARNUNG" "$1" } question() { Y="jJyY" print_log $BLUE "Frage ([$Y] für 'Ja')" "$1 " 1 read ret case $ret in [$Y]* ) return 0;; * ) return 1;; esac } get_hostname() { tr -d " \t\n\r" < /etc/hostname } get_timezone() { tr -d " \t\n\r" < /etc/timezone } error_handler() { local exit_code="$?" if [[ "$-" == *e* ]]; then print_error "Das Skript wurde durch einen Fehler in Zeile $1 mit dem Fehlercode $exit_code beendet" exit $exit_code fi } trap 'error_handler $LINENO' ERR if ! grep -q "Model\s*:.*Raspberry Pi" /proc/cpuinfo; then print_error "Dieses Skript kann nur auf einem Raspberry Pi ausgeführt werden." exit 1 fi USER_DREHER="dreher" HOME="/home/$USER_DREHER" DIST="bullseye" UTILS="/usr/bin/dreher-utils" if [ "$EUID" -ne 0 ]; then print_warning "$(basename $0) muss als root (bspw. mit sudo) ausgeführt werden.$(tput sgr0)" exit 1 fi if ! id $USER_DREHER > /dev/null 2>&1; then print_error "Benutzer '$USER_DREHER' existiert nicht. Dieses Skript soll einen Raspberry Pi für die Benutzung von Dreher GmbH-Software vorbereiten, was den Benutzer '$USER_DREHER' voraussetzt." exit 1 fi if [ ! -d $HOME ]; then print_error "Home-Verzeichnis $HOME für '$USER_DREHER' existiert nicht." exit 1 fi do_as_dreher() { local cmd="$*" su -c "$cmd" $USER_DREHER } ################################### # TMP_DIR ################################### TMP_DIR=/run/dreher exit_handler() { rm -rf $TMP_DIR } trap exit_handler EXIT mkdir -p "$TMP_DIR" chown $USER_DREHER:$USER_DREHER "$TMP_DIR" ################################### # RealVNC-Server disablen ################################### UNINSTALL_REALVNC=0 REALVNC="realvnc-vnc-server" if raspi-config nonint is_installed $REALVNC; then if question "$REALVNC ist installiert. Es sollte deinstalliert werden, da wir mit diesem Skript tigervnc installieren und verwenden. $REALVNC deaktivieren und fortfahren?"; then UNINSTALL_REALVNC=1 systemctl disable vncserver-x11-serviced.service systemctl stop vncserver-x11-serviced.service else exit 1 fi fi ################################### # sonstiges ################################### URL_BASE="http://repo.dreher.at" ################################### # Rainbow-Splashscreen deaktivieren ################################### BOOT_CONFIG_FILE="/boot/config.txt" DISABLE_SPLASH_WO_VALUE="disable_splash=" if grep -q "^${DISABLE_SPLASH_WO_VALUE}1$" $BOOT_CONFIG_FILE; then print_info "Rainbow-Splashscreen ist bereits disabled" 1 elif grep -q "^$DISABLE_SPLASH_WO_VALUE" $BOOT_CONFIG_FILE; then print_info "Rainbow-Splashscreen wird disabled ..." sed -i "s/^${DISABLE_SPLASH_WO_VALUE}.*/${DISABLE_SPLASH_WO_VALUE}1/g" $BOOT_CONFIG_FILE else print_info "Rainbow-Splashscreen wird disabled ..." echo "${DISABLE_SPLASH_WO_VALUE}1" >> $BOOT_CONFIG_FILE fi ################################### # Dreher-Repo hinzufügen ################################### URL_REPO="$URL_BASE/deb/dists/$DIST/dreher-setup-$DIST-repo.sh" SETUP_REPO_FILE="$TMP_DIR/setup-repo.sh" print_info "Lade '$URL_REPO' nach '$SETUP_REPO_FILE' herunter ..." wget --backups=0 -O "$SETUP_REPO_FILE" "$URL_REPO" > /dev/null 2>&1 chmod +x "$SETUP_REPO_FILE" print_info "Führe '$SETUP_REPO_FILE' aus ..." $SETUP_REPO_FILE ################################### # APT ################################### apt update -y apt upgrade -y # lxappearance # openbox-lxde-session # arandr - Displaysettings GUI (xrandr) # unclutter-xfixes - blendet den Mauscursor nach einer bestimmten Zeit aus # unclutter-startup - startet unclutter-xfixes automatisch apt install -y --no-install-recommends raspberrypi-ui-mods lxplug-menu lxplug-bluetooth lxplug-ejecter lxplug-netman lxterminal \ pixflat-icons tigervnc-scraping-server wireguard samba rpd-plym-splash pishutdown geany python3-venv pipanel onboard gpicview \ dreher-icons arandr unclutter-xfixes unclutter-startup ################################### # ~/dreher_gmbh ################################### DREHER_DIR="$HOME/dreher_gmbh" LOGO_NAME="dreher_logo.png" LOGO_PATH="$DREHER_DIR/$LOGO_NAME" PLYMOUTH_DIR="/usr/share/plymouth/themes/pix" PLYMOUTH_SCRIPT="$PLYMOUTH_DIR/pix.script" PLYMOUTH_BACKUP="$PLYMOUTH_SCRIPT.original" SPLASH_ORIGINAL="splash.png" print_info "$DREHER_DIR einrichten ..." mkdir -p $DREHER_DIR chown -R $USER_DREHER:$USER_DREHER $DREHER_DIR chmod 700 $DREHER_DIR print_info "Logo von Server holen ..." URL_LOGO="$URL_BASE/misc/pic/logo.png" wget --backups=0 -O $LOGO_PATH $URL_LOGO > /dev/null 2>&1 ################################### # Env-Var DREHER_GMBH_DIR ################################### ENV_PATH="/etc/environment" ENV_NAME="DREHER_GMBH_DIR" ENV_LINE="$ENV_NAME=$DREHER_DIR" set +e # wenn 'grep' nichts findet CURR=$(grep "$ENV_NAME=" $ENV_PATH) set -e if [ -z "$CURR" ]; then print_info "Umgebungsvariable $ENV_NAME ($DREHER_DIR) wird $ENV_PATH hinzugefügt ..." echo "$ENV_LINE" >> $ENV_PATH else if [ "$CURR" = "$ENV_LINE" ]; then print_info "Umgebungsvariable $ENV_NAME ist bereits richtig gesetzt ($DREHER_DIR)" 1 else print_info "Umgebungsvariable wird von '$CURR' zu '$ENV_LINE' geändert ..." sed -i "s/$ENV_NAME=.*/${ENV_LINE//\//\\/}/g" $ENV_PATH fi fi ################################### # Splash-Screen ################################### cp $LOGO_PATH $PLYMOUTH_DIR/dreher_logo.png chown $USER_DREHER:$USER_DREHER $LOGO_PATH if grep -q $LOGO_NAME $PLYMOUTH_SCRIPT; then print_info "$PLYMOUTH_SCRIPT verwendet bereits '$LOGO_NAME'" 1 else if ! grep -q $SPLASH_ORIGINAL $PLYMOUTH_SCRIPT; then print_error "Kann '$SPLASH_ORIGINAL' in $PLYMOUTH_SCRIPT nicht durch '$LOGO_NAME' ersetzen, da '$SPLASH_ORIGINAL' nicht gefunden wurde." exit 1 fi print_info "$PLYMOUTH_SCRIPT nach $PLYMOUTH_BACKUP sichern und auf '$LOGO_NAME' umstellen" cp $PLYMOUTH_SCRIPT $PLYMOUTH_BACKUP sed -i "s/${SPLASH_ORIGINAL//./\\.}/${LOGO_NAME//./\\.}/g" $PLYMOUTH_SCRIPT fi ################################### # Wireguard ################################### # befindet sich nicht mehr im Repo, um die Config nicht öffentlich machen zu müssen # WG_NAME="wg_setup.py" # WG_CONF_PY="$DREHER_DIR/$WG_NAME" # URL_WG="$URL_BASE/deb/dists/$DIST/$WG_NAME" # print_info "$WG_NAME vom Server holen ..." # wget --backups=0 -O "$WG_CONF_PY" $URL_WG > /dev/null 2>&1 # chown $USER_DREHER:$USER_DREHER $WG_CONF_PY ################################### # Desktop ################################### CONFIG_DIR="$HOME/.config" LXDE_PI="LXDE-pi" PCMANFM_DIR="$CONFIG_DIR/pcmanfm" DE_CONF_DIR="$PCMANFM_DIR/$LXDE_PI" DE_CONF_NAME="desktop-items-0.conf" DE_CONF_PATH="$DE_CONF_DIR/$DE_CONF_NAME" WALLPAPER_LINE="wallpaper=$LOGO_PATH" WALLPAPER_MODE_LINE="wallpaper_mode=center" if [ ! -d $DE_CONF_DIR ]; then print_info "Erstelle Verzeichnis $DE_CONF_DIR" do_as_dreher mkdir -p $DE_CONF_DIR fi if [ -f $DE_CONF_PATH ]; then if grep -qE "^$WALLPAPER_MODE_LINE" $DE_CONF_PATH; then print_info "'$WALLPAPER_MODE_LINE' ist bereits in $DE_CONF_PATH eingetragen" 1 elif grep -q "wallpaper_mode=" $DE_CONF_PATH; then print_info "Ändere entsprechende Zeile in $DE_CONF_PATH zu '$WALLPAPER_MODE_LINE' ..." do_as_dreher sed -i "s/wallpaper_mode=.*/$WALLPAPER_MODE_LINE/g" $DE_CONF_PATH else print_info "Hänge '$WALLPAPER_MODE_LINE' an $DE_CONF_PATH an ..." do_as_dreher echo "$WALLPAPER_MODE_LINE" >> $DE_CONF_PATH fi if grep -qE "^${WALLPAPER_LINE//\//\\/}" $DE_CONF_PATH; then print_info "'$WALLPAPER_LINE' ist bereits in $DE_CONF_PATH eingetragen" 1 elif grep -q "wallpaper=" $DE_CONF_PATH; then print_info "Ändere entsprechende Zeile in $DE_CONF_PATH zu '$WALLPAPER_LINE' ..." do_as_dreher sed -i "s/wallpaper=.*/${WALLPAPER_LINE//\//\\/}/g" $DE_CONF_PATH else print_info "Hänge '$WALLPAPER_LINE' an $DE_CONF_PATH an ..." do_as_dreher echo "$WALLPAPER_LINE" >> $DE_CONF_PATH fi else print_info "Erstelle Datei $DE_CONF_PATH ..." do_as_dreher "echo \"[*] desktop_bg=#D6D3DE desktop_shadow=#D6D3DE desktop_fg=#E8E8E8 desktop_font=PibotoLt 12 wallpaper=$LOGO_PATH wallpaper_mode=center show_documents=0 show_trash=0 show_mounts=1 \" > $DE_CONF_PATH" fi chown -R $USER_DREHER:$USER_DREHER $PCMANFM_DIR LX_SESS_DIR="$CONFIG_DIR/lxsession/$LXDE_PI" LX_AUTOSTART_FILE="autostart" LX_AUTOSTART_PATH="$LX_SESS_DIR/$LX_AUTOSTART_FILE" ONBOARD_CMD="onboard" SETXKBMAP_CMD="setxkbmap de" if [ ! -f "$LX_AUTOSTART_PATH" ]; then mkdir -p "$LX_SESS_DIR" cp /etc/xdg/lxsession/LXDE-pi/autostart "$LX_AUTOSTART_PATH" fi if grep -q "^@$ONBOARD_CMD" "$LX_AUTOSTART_PATH"; then print_info "'$ONBOARD_CMD' (Bildschirmtastatur) ist bereits im Autostart" 1 else print_info "'$ONBOARD_CMD' (Bildschirmtastatur) wird zum Autostart hinzugefügt ..." echo "@$ONBOARD_CMD" >> "$LX_AUTOSTART_PATH" fi if grep -q "^@$SETXKBMAP_CMD" "$LX_AUTOSTART_PATH"; then print_info "Befehl '$SETXKBMAP_CMD' ist bereits im Autostart" 1 else print_info "Befehl '$SETXKBMAP_CMD' wird zum Autostart hinzugefügt ..." echo "@$SETXKBMAP_CMD" >> "$LX_AUTOSTART_PATH" fi chown -R $USER_DREHER:$USER_DREHER $LX_SESS_DIR ################################### # raspi-config ################################### # Achtung: 0 -> Ja; 1 -> Nein * #********************************** # TODO # .config/lxpanel/LXDE-pi/panels/panel -- Notifications sollen deaktiviert werden, da sie sonst unsere GUI überlagern # /etc/xdg/lxpanel/LXDE-pi/panels/panel -- diese Datei kopieren und 'notifications=0' an der richtigen Stelle einfügen? LANG_DEFAULT="de_AT.UTF-8" LANGUAGE_DEFAULT="de_AT:de" LC_ALL_DEFAULT="" LOCALE_GEN_FILE="/etc/locale.gen" LOCALE_GEN_LINE="$LANG_DEFAULT UTF-8" TZ_DEFAULT="Europe/Vienna" WIFI_REG_DEFAULT="AT" # wenn XKBLAYOUT_DEFAULT == "at" -> Probleme mit (Tiger)VNC XKBLAYOUT_DEFAULT="de" XKBLAYOUT_CURRENT=$(grep XKBLAYOUT /etc/default/keyboard | cut -d '"' -f2) if ! locale -a | grep -q "$LANG_DEFAULT"; then print_info "Locale $LANG_DEFAULT existiert nicht, erstelle es ..." if grep -q "^# *$LOCALE_GEN_LINE" $LOCALE_GEN_FILE; then print_info "Entkommentiere die Zeile für '$LOCALE_GEN_LINE' in $LOCALE_GEN_FILE ..." sed -i "s/^# *${LOCALE_GEN_LINE}.*$/${LOCALE_GEN_LINE}/g" $LOCALE_GEN_FILE else print_info "Hänge Zeile '$LOCALE_GEN_LINE' an $LOCALE_GEN_FILE an ..." echo "$LOCALE_GEN_LINE" >> $LOCALE_GEN_FILE fi locale-gen #locale-gen "$LANG_DEFAULT" #update-locale else print_info "Locale $LANG_DEFAULT existiert bereits" 1 fi if [ $(raspi-config nonint get_boot_splash) -eq 0 ]; then print_info "Splash-Screen ist bereits aktiviert" 1 else print_info "Aktiviere Splash-Screen ..." raspi-config nonint do_boot_splash 0 fi if [ $(raspi-config nonint get_blanking) -ne 0 ]; then print_info "Screen-Blanking (Display-Standby) ist bereits deaktiviert" 1 else print_info "Deaktiviere Screen-Blanking (Display-Standby) ..." raspi-config nonint do_blanking 1 fi if [ $(raspi-config nonint get_ssh) -eq 0 ]; then print_info "SSH ist bereits aktiviert" 1 else print_info "Aktiviere SSH ..." raspi-config nonint do_ssh 0 fi if [ $(raspi-config nonint get_spi) -eq 0 ]; then print_info "SPI ist bereits aktiviert" 1 else print_info "Aktiviere SPI ..." raspi-config nonint do_spi 0 fi if [ $(raspi-config nonint get_i2c) -eq 0 ]; then print_info "I2C ist bereits aktiviert" 1 else print_info "Aktiviere I2C ..." raspi-config nonint do_i2c 0 fi if [ $(raspi-config nonint get_serial) -ne 0 ] && [ $(raspi-config nonint get_serial_hw) -eq 0 ]; then print_info "UART ist bereits aktiviert und Serial-Shell deaktiviert" 1 else print_info "Aktiviere UART und Deaktiviere Serial-Shell ..." raspi-config nonint do_serial 2 fi if [ $(raspi-config nonint get_onewire) -eq 0 ]; then print_info "One-Wire ist bereits aktiviert" 1 else print_info "Aktiviere One-Wire ..." raspi-config nonint do_onewire 0 fi if [ "$LANG" = "$LANG_DEFAULT" ] && [ "$LANGUAGE" = "$LANGUAGE_DEFAULT" ] && [ "$LC_ALL" = "$LC_ALL_DEFAULT" ]; then print_info "\$LANG, \$LANGUAGE und \$LC_ALL sind bereits auf '$LANG_DEFAULT', '$LANGUAGE_DEFAULT' bzw '$LC_ALL_DEFAULT' gesetzt" 1 else print_info "Ändere \$LANG ($LANG), \$LANGUAGE ($LANGUAGE) und \$LC_ALL ($LC_ALL) auf '$LANG_DEFAULT', '$LANGUAGE_DEFAULT' bzw '$LC_ALL_DEFAULT' ..." update-locale "LANG=$LANG_DEFAULT" "LANGUAGE=$LANGUAGE_DEFAULT" "LC_ALL=$LC_ALL_DEFAULT" dpkg-reconfigure -f noninteractive locales # raspi-config nonint do_change_locale "$LANG_DEFAULT" fi if [ "$(get_timezone)" = "$TZ_DEFAULT" ]; then print_info "Zeitzone ist bereits $TZ_DEFAULT" 1 else print_info "Setze Zeitzone auf $TZ_DEFAULT ..." # timedatectl set-timezone "$TZ_DEFAULT" # dpkg-reconfigure -f noninteractive tzdata raspi-config nonint do_change_timezone "$TZ_DEFAULT" fi if [ "$XKBLAYOUT_CURRENT" = "$XKBLAYOUT_DEFAULT" ]; then print_info "Tastaturlayout ist bereits auf '$XKBLAYOUT_DEFAULT' eingestellt" 1 else print_info "Ändere Tastaturlayout von '$XKBLAYOUT_CURRENT' zu '$XKBLAYOUT_DEFAULT' ..." raspi-config nonint do_configure_keyboard "$XKBLAYOUT_DEFAULT" fi if systemctl -q is-enabled NetworkManager > /dev/null 2>&1; then print_info "NetworkManager ist bereits enabled" 1 else print_info "Enable NetworkManager ..." raspi-config nonint do_netconf 2 fi set +e # falls 'raspi-config' nicht 0 returnt WIFI_REG_CURRENT=$(raspi-config nonint get_wifi_country) set -e if [ "$WIFI_REG_CURRENT" = "$WIFI_REG_DEFAULT" ]; then print_info "Wifi-Region ist bereits $WIFI_REG_DEFAULT" 1 else print_info "Setze Wifi-Region von $WIFI_REG_CURRENT auf $WIFI_REG_DEFAULT ..." raspi-config nonint do_wifi_country "$WIFI_REG_DEFAULT" fi if [ $(raspi-config nonint get_autologin) -eq 0 ] && [ $(raspi-config nonint get_boot_cli) -ne 0 ]; then print_info "Desktop-Autologin ist bereits aktiviert" 1 else print_info "Aktiviere Desktop-Autologin ..." raspi-config nonint do_boot_behaviour "B4" fi ################################### # tigervnc ################################### VNC_DIR="$HOME/.vnc" VNC_PASS="$VNC_DIR/passwd" if [ ! -e $VNC_PASS ] || question "TigerVNC-Passwort ändern?"; then do_as_dreher mkdir -p "$VNC_DIR" print_log $BLUE "VNC-Passwort" "Bitte VNC-Passwort für Benutzer '$USER_DREHER' eingeben:" do_as_dreher tigervncpasswd "$VNC_PASS" fi VNC_UNIT_NAME="dreher-vnc.service" VNC_UNIT_PATH="/etc/systemd/system/$VNC_UNIT_NAME" print_info "Erstelle, starte und enable $VNC_UNIT_NAME" echo "[Unit] Description=TigerVNC Server [Service] Type=simple User=$USER_DREHER ExecStart=/usr/bin/x0tigervncserver :0 -fg -localhost no -rfbauth $VNC_PASS Restart=on-failure RestartSec=2s [Install] WantedBy=graphical.target" > $VNC_UNIT_PATH systemctl daemon-reload systemctl start $VNC_UNIT_NAME systemctl enable $VNC_UNIT_NAME ################################### # Samba ################################### KUNDE_DIR="$HOME/dreher_kunde" USER_KUNDE="kunde" set +e # Falls der Benutzter bereits angelegt wurde out=$(useradd -s /bin/false -g users -m $USER_KUNDE 2>&1) ret=$? set -e if [ $ret -eq 9 ]; then print_info "Samba-Benutzer '$USER_KUNDE' existiert bereits" 1 elif [ $ret -ne 0 ]; then print_error $out exit 1 else print_info "Samba-Benutzer '$USER_KUNDE' eingerichtet" 1 fi mkdir -p $KUNDE_DIR chown -R $USER_KUNDE:users $KUNDE_DIR chmod 770 $KUNDE_DIR SAMBA_CONF="/etc/samba/smb.conf" SAMBA_BU="$SAMBA_CONF.original" SAMBA_PREV="$SAMBA_CONF.prev" if [ ! -f $SAMBA_BU ]; then print_info "erstelle Backup von Original-Samba-Config ($SAMBA_BU)" cp $SAMBA_CONF $SAMBA_BU else print_info "Backup von Original-Samba-Config existiert bereits ($SAMBA_BU)" 1 fi print_info "Sichere letzte Samba-Config in $SAMBA_PREV" cp $SAMBA_CONF $SAMBA_PREV print_info "Schreibe neue Samba-Config in $SAMBA_CONF" echo "[global] workgroup = WORKGROUP security = user client min protocol = SMB2 client max protocol = SMB3 [dreher_gmbh] comment = Dreher GmbH Dateien – nicht öffentlich path = $DREHER_DIR read only = no [dreher_kunde] comment = Dreher-Kunden-Freigabe path = $KUNDE_DIR read only = no" > $SAMBA_CONF testparm --suppress-prompt > /dev/null 2>&1 if ! pdbedit -L | grep -qE "^$USER_DREHER:" || question "Samba-Passwort für '$USER_DREHER' ändern?"; then print_log $BLUE "Samba-Passwort '$USER_DREHER'" "Bitte Passwort für Benutzer '$USER_DREHER' eingeben:" smbpasswd -a $USER_DREHER fi if ! pdbedit -L | grep -qE "^$USER_KUNDE:" || question "Samba-Passwort für '$USER_KUNDE' ändern?"; then print_log $BLUE "Samba-Passwort '$USER_KUNDE'" "Bitte Passwort für Benutzer '$USER_KUNDE' eingeben:" smbpasswd -a $USER_KUNDE fi ################################### # Hostname ################################### OLD_HOSTNAME=$(get_hostname) if question "Hostname '$OLD_HOSTNAME' ändern?"; then read -p "Neuen Hostnamen eingeben: " NEW_HOSTNAME if [ "$OLD_HOSTNAME" = "$NEW_HOSTNAME" ]; then print_warning "Hostname ist bereits '$OLD_HOSTNAME'" else hostnamectl set-hostname $NEW_HOSTNAME STATIC_HOSTNAME=$(get_hostname) sed -i "s/127\.0\.1\.1.*/127.0.1.1\t$STATIC_HOSTNAME/g" /etc/hosts if [ "$NEW_HOSTNAME" = "$STATIC_HOSTNAME" ]; then print_info "Hostname zu '$NEW_HOSTNAME' geändert" else print_info "Hostname zu '$STATIC_HOSTNAME' (static), '$NEW_HOSTNAME' (pretty) geändert" fi fi fi ################################### # WireGuard ################################### # befindet sich nicht mehr im Repo, um die Config nicht öffentlich machen zu müssen # if question "WireGuard konfigurieren?"; then # wg_conf_num=0 # CURRENT_HOSTNAME="$(get_hostname)" # if [[ "$CURRENT_HOSTNAME" =~ [0-9]+$ ]]; then # number="${CURRENT_HOSTNAME##*[^0-9]}" # if question "Hostname endet mit '$number'. Soll '$number' für die wg-Konfiguration verwendet werden?"; then # wg_conf_num=$number # else # read -p "Welche Nummer soll stattdessen verwendet werden? -> " wg_conf_num # fi # else # read -p "Nummer für wg-Konfiguartion angeben: " wg_conf_num # fi # echo "wg_conf_num: $wg_conf_num" # if [ $wg_conf_num -ne 0 ]; then # python3 $WG_CONF_PY start enable --id $number # else # print_warning "Fehler bei Ermittlung der Nummer für die wg-Konfiguration" # fi # fi ################################### # sudoers ################################### SUDOERS_DIR="/etc/sudoers.d" SUDOERS_BAD_NAME="010_pi-nopasswd" SUDOERS_GOOD_NAME="${SUDOERS_BAD_NAME}~" SUDOERS_BAD_PATH="$SUDOERS_DIR/$SUDOERS_BAD_NAME" SUDOERS_GOOD_PATH="$SUDOERS_DIR/$SUDOERS_GOOD_NAME" if [ -f "$SUDOERS_BAD_PATH" ]; then print_info "Disable passwortfreies 'sudo' ..." mv -f "$SUDOERS_BAD_PATH" "$SUDOERS_GOOD_PATH" elif [ -f "$SUDOERS_GOOD_PATH" ]; then print_info "passwortfreies 'sudo' ist bereits disabled" 1 else print_warning "Konnte 'passwortfreies sudo' nicht ermitteln, da weder $SUDOERS_BAD_NAME noch $SUDOERS_GOOD_NAME in $SUDOERS_DIR gefunden wurden. Check das lieber mal" fi ################################### # Sicherstellen, dass openbox als Fenstermanager verwendet wird # (Display spiegeln funzt mit mutter nicht richtig) ################################### STARTLXDE_DREHER=/usr/local/bin/startlxde-dreher print_info "Erstelle Datei $STARTLXDE_DREHER und richte sie als 'x-session-manager' ein ..." cat > "$STARTLXDE_DREHER" << 'EOF' #!/bin/sh # this is a mofified version of /usr/bin/startlxde-pi if ! raspi-config nonint is_pi || raspi-config nonint is_kms ; then export XDG_DATA_DIRS="/usr/share/fkms:/usr/local/share:/usr/share/raspi-ui-overrides:/usr/share:/usr/share/gdm:/var/lib/menu-xdg${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}" else export XDG_DATA_DIRS="/usr/local/share:/usr/share/raspi-ui-overrides:/usr/share:/usr/share/gdm:/var/lib/menu-xdg${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}" fi if [ -z "$XDG_CONFIG_HOME" ]; then export XDG_CONFIG_HOME="$HOME/.config" fi # Ensure the existence of the 'Desktop' folder if [ -e "$XDG_CONFIG_HOME/user-dirs.dirs" ]; then . "$XDG_CONFIG_HOME/user-dirs.dirs" else XDG_DESKTOP_DIR="$HOME/Desktop" fi mkdir -p "$XDG_DESKTOP_DIR" # Clean up after GDM (GDM sets the number of desktops to one) xprop -root -remove _NET_NUMBER_OF_DESKTOPS -remove _NET_DESKTOP_NAMES -remove _NET_CURRENT_DESKTOP 2> /dev/null # Enable GTK+3 integration for OpenOffice.org, if available. export SAL_USE_VCLPLUGIN=gtk3 # Launch DBus if needed if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then eval "$(dbus-launch --sh-syntax --exit-with-session)" fi export XDG_MENU_PREFIX="lxde-pi-" if [ ! -f "$XDG_CONFIG_HOME/gtk-3.0/gtk.css" ] || ! grep -s -q tooltip "$XDG_CONFIG_HOME/gtk-3.0/gtk.css" ; then mkdir -p "$XDG_CONFIG_HOME/gtk-3.0" echo "tooltip, .tooltip { border-radius: 0px; }" > "$XDG_CONFIG_HOME/gtk-3.0/gtk.css" fi sync exec /usr/bin/lxsession -s LXDE-pi -e LXDE -w openbox-lxde-pi EOF chmod +x "$STARTLXDE_DREHER" update-alternatives --install /usr/bin/x-session-manager x-session-manager "$STARTLXDE_DREHER" 99 update-alternatives --set x-session-manager "$STARTLXDE_DREHER" # Kommando für Original-Skript und unser Skript zum copy-pasten: # sudo update-alternatives --set x-session-manager /usr/bin/startlxde-pi # sudo update-alternatives --set x-session-manager /usr/local/bin/startlxde-dreher # Auflistung der Auswahlmöglichkeiten: # update-alternatives --display x-session-manager ################################### # lightdm konfigurieren ################################### LIGHTDM_CONF_FILE="/etc/lightdm/lightdm.conf" LIGHTDM_CONF_KEY="display-setup-script" DISPSETUP_FILE="/usr/share/dispsetup.sh" LIGHTDM_CONF_TARGET_LINE="$LIGHTDM_CONF_KEY=$DISPSETUP_FILE" # Überprüfen, ob die Datei existiert if [ ! -f "$LIGHTDM_CONF_FILE" ]; then print_error "Datei $LIGHTDM_CONF_FILE nicht gefunden!" exit 1 fi # Suchen nach der Zeile, die geändert werden soll if grep -qE "^#${LIGHTDM_CONF_KEY}=.*$" "$LIGHTDM_CONF_FILE"; then # Zeile ist kommentiert print_info "Zeile \"$LIGHTDM_CONF_TARGET_LINE\" wird in $LIGHTDM_CONF_FILE eingetragen ..." sed -i "s/^#${LIGHTDM_CONF_KEY}=.*$/${LIGHTDM_CONF_TARGET_LINE//\//\\/}/" "$LIGHTDM_CONF_FILE" elif grep -qE "^${LIGHTDM_CONF_KEY}=.*" "$LIGHTDM_CONF_FILE" && ! grep -qE "^${LIGHTDM_CONF_TARGET_LINE}$" "$LIGHTDM_CONF_FILE"; then # Zeile ist vorhanden, aber mit einem anderen Wert print_info "Entsprechende Zeile wird zu \"$LIGHTDM_CONF_TARGET_LINE\" in $LIGHTDM_CONF_FILE aktualisiert ..." sed -i "s/^${LIGHTDM_CONF_KEY}=.*$/${LIGHTDM_CONF_TARGET_LINE//\//\\/}/" "$LIGHTDM_CONF_FILE" elif grep -qE "^${LIGHTDM_CONF_TARGET_LINE}$" "$LIGHTDM_CONF_FILE"; then # Zeile bereits richtig vorhanden print_info "Die Zeile \"${LIGHTDM_CONF_TARGET_LINE}$\" war bereits korrekt in $LIGHTDM_CONF_FILE eingetragen." 1 else print_error "Keine Zeile mit dem Schlüssel \"${LIGHTDM_CONF_KEY}\" in $LIGHTDM_CONF_FILE gefunden." fi print_info "Schreibe Konfiguration zum Display-Spiegeln (wenn 2 FHD-Monitore angeschlossen sind) in $DISPSETUP_FILE ..." cat > "$DISPSETUP_FILE" << 'EOF' #!/bin/sh if ! raspi-config nonint is_pi || raspi-config nonint is_kms ; then if xrandr --output HDMI-1 --primary --mode 1920x1080 --rate 60.000 --pos 0x0 --rotate normal --output HDMI-2 --mode 1920x1080 --rate 60.000 --pos 0x0 --rotate normal --dryrun ; then xrandr --output HDMI-1 --primary --mode 1920x1080 --rate 60.000 --pos 0x0 --rotate normal --output HDMI-2 --mode 1920x1080 --rate 60.000 --pos 0x0 --rotate normal fi fi if [ -e /usr/share/tssetup.sh ] ; then . /usr/share/tssetup.sh fi if [ -e /usr/share/ovscsetup.sh ] ; then . /usr/share/ovscsetup.sh fi exit 0 EOF if [ $(stat -c "%a" "$DISPSETUP_FILE") != "755" ]; then print_info "Ändere den Mode von $DISPSETUP_FILE zu 755 ..." chmod 755 "$DISPSETUP_FILE" fi ################################### # RealVNC-Server deinstallieren ################################### if [ $UNINSTALL_REALVNC -ne 0 ] && question "Soll '$REALVNC' jetzt deinstalliert werden?"; then apt remove $REALVNC fi ################################### # fertig ################################### if question "Jetzt neu starten?"; then print_log $GREEN "alles erledigt" "bis gleich :-)" reboot fi print_log $GREEN "alles erledigt" "neu starten nicht vergessen :-)"