diff --git a/qgm-desktop.yml b/qgm-desktop.yml index ccda702..8c1c858 100644 --- a/qgm-desktop.yml +++ b/qgm-desktop.yml @@ -21,7 +21,7 @@ no_proxy: firewall.qgm.lan, server.qgm.lan, qgm.lan ## PAM mount nextcloud, remove or leave empty to skip: - web_dav: https://wolke.qg-moessingen.de/remote.php/dav/files/%(USER) + web_dav: https://wolke.qg-moessingen.de/nextcloud/remote.php/dav/files/%(USER) ## Local mirror for mscorefonts. Remove or leave empty to use no mirror: mirror_msfonts: http://netboot.qgm.lan/mscorefonts/ @@ -55,6 +55,12 @@ #- kerberize tasks: + - name: Copy Server roots-pubkey to clients + authorized_key: + user: ansible + state: present + key: "{{ lookup('file', 'pubkeys/serverroot.pub') }}" + - name: Fix unattended-upgrades ansible.builtin.copy: dest: /etc/apt/apt.conf.d/20auto-upgrades diff --git a/roles/lmn_qgm/files/BeamerSetup.sh b/roles/lmn_qgm/files/BeamerSetup.sh new file mode 100755 index 0000000..124a426 --- /dev/null +++ b/roles/lmn_qgm/files/BeamerSetup.sh @@ -0,0 +1,67 @@ +#!/bin/bash + +# Get connected monitors and their native resolutions +monitor_info=$(xrandr --query) + +# Extract primary monitor name +primary_monitor_name=$(echo "$monitor_info" | grep " primary" | cut -d" " -f1) + +# Extract secondary monitor name and native resolution +secondary_monitor_line=$(echo "$monitor_info" | grep -m1 -n -P " connected(?! primary)") +secondary_monitor_line_number=$(echo "$secondary_monitor_line" | cut -d":" -f1) +secondary_monitor_name=$(echo "$secondary_monitor_line" | cut -d":" -f2 | cut -d" " -f1) +if [ ! -z "$secondary_monitor_line_number" ]; then + secondary_resolution=$(echo "$monitor_info" | sed -e "1,${secondary_monitor_line_number}d" | grep -m1 "+" | awk '{ print $1 }') +fi + +if [ -z "$secondary_monitor_name" ] || [ -z "$secondary_resolution" ] || [ -z "$primary_monitor_name" ]; then + zenity --error --text="Es konnten keine passenden Bildschirme gefunden werden. Sind Sie sich sicher, dass der Beamer eingeschaltet und verbunden ist?" + exit 1 +fi + +# Find out which resolutions we want to recommend +if [ "$secondary_resolution" = "1920x1080" ]; then + recommend_high_res="Ja" + recommend_low_res="Nein" + default_xga="FALSE" + default_hd="TRUE" +else + recommend_high_res="Nein" + recommend_low_res="Ja" + default_xga="TRUE" + default_hd="FALSE" +fi + +# Generate GUI to let the user select a resolution +mode=$(zenity --list --radiolist --title="Beamer Setup" --text="Beamer mit der Auflösung $secondary_resolution gefunden." \ +--print-column=3 --width 500 --height 250 \ +--column= --column="Name" --column="Auflösung" --column="Format" --column="Empfohlen" \ +FALSE "Full HD" "1920x1080" "16:9" "$recommend_high_res" \ +"$default_hd" "HD" "1280x720" "16:9" "Ja" \ +"$default_xga" "XGA" "1024x768" "4:3" "$recommend_low_res") + +# Use xrandr to configure both displays +if [ ! -z "$mode" ]; then + xrandr --output $primary_monitor_name --mode $mode + xrandr --output $secondary_monitor_name --mode $mode --same-as $primary_monitor_name +fi + +# Use pactl to set audio output to hdmi +profile="output:hdmi-stereo+input:analog-stereo" +sink_line=$(pactl list short sinks | grep -m1 alsa_output.pci-) +sink_nr=$(echo $sink_line | awk '{ print $1 }') +sink_name_hdmi=$(echo $sink_line | awk '{ print $2 }' | grep hdmi) +if [ ! -z "$sink_nr" ] && [ -z "$sink_name_hdmi" ]; then + card_name=$(pactl list cards short | grep -m1 alsa_card.pci- | awk '{ print $2 }') + pactl set-card-profile $card_name $profile +fi + +if [ ! -z "$sink_nr" ]; then + pactl set-default-sink $(pactl list short sinks | grep -m1 alsa_output.pci- | awk '{ print $1 }') +fi + +# if there is no hdmi sink search for a card profile to change +if [ -z "$sink_nr" ]; then + card_name=$(pactl list cards short | head -n 1 | awk '{ print $2 }') + pactl set-card-profile $card_name $profile +fi diff --git a/roles/lmn_qgm/files/beamer.png b/roles/lmn_qgm/files/beamer.png new file mode 100644 index 0000000..3977d07 Binary files /dev/null and b/roles/lmn_qgm/files/beamer.png differ diff --git a/roles/lmn_qgm/files/logout.png b/roles/lmn_qgm/files/logout.png new file mode 100644 index 0000000..93302b3 Binary files /dev/null and b/roles/lmn_qgm/files/logout.png differ diff --git a/roles/lmn_qgm/files/qgm-abmelden.desktop b/roles/lmn_qgm/files/qgm-abmelden.desktop new file mode 100644 index 0000000..88bcdcd --- /dev/null +++ b/roles/lmn_qgm/files/qgm-abmelden.desktop @@ -0,0 +1,13 @@ +#!/usr/bin/env xdg-open +[Desktop Entry] +Version=1.0 +Type=Application +Terminal=false +Exec=qdbus org.kde.ksmserver /KSMServer logout 1 0 1 +Name[de_DE]=Abmelden +Name=Abmelden +Icon=/usr/share/icons/logout.png +Hidden=false +Comment= +Path= +StartupNotify=false diff --git a/roles/lmn_qgm/files/qgm-beamersetup.desktop b/roles/lmn_qgm/files/qgm-beamersetup.desktop new file mode 100644 index 0000000..8b695b0 --- /dev/null +++ b/roles/lmn_qgm/files/qgm-beamersetup.desktop @@ -0,0 +1,15 @@ +#!/usr/bin/env xdg-open + +[Desktop Entry] +Version=1.0 +Type=Application +Terminal=false +Exec=BeamerSetup.sh +Name[de_DE]=QG-Beamersetup +Name=QG-Beamersetup +Icon=/usr/share/icons/beamer.png +Hidden=false +Comment= +Path= +StartupNotify=false + diff --git a/roles/lmn_qgm/files/qgm-login.sh b/roles/lmn_qgm/files/qgm-login.sh index dd239c5..c2af463 100644 --- a/roles/lmn_qgm/files/qgm-login.sh +++ b/roles/lmn_qgm/files/qgm-login.sh @@ -1,2 +1,22 @@ [[ "${UID}" -lt 10000 ]] && return + +# Desktop Verzeichnis? +DESKDIR=$(xdg-user-dir DESKTOP) +echo $DESKDIR >> /tmp/login.log + +# Wallpaper kwriteconfig5 --file "$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc" --group 'Containments' --group '1' --group 'Wallpaper' --group 'org.kde.image' --group 'General' --key 'Image' "/usr/local/share/qgm/qgm_background_wallpaper.jpg" || return + +# Beamer-Icon +rm -f $DESKDIR/qgm-beamersetup.desktop +if [[ $(hostname -s) = lt-* || $(hostname -s) = r109-dell16 ]]; then + cp /usr/share/applications/qgm-beamersetup.desktop $DESKDIR/qgm-beamersetup.desktop + chmod 755 $DESKDIR/qgm-beamersetup.desktop +fi + +# Abmelden Knopf +echo "cp /usr/share/applications/qgm-abmelden.desktop $DESKDIR/qgm-abmelden.desktop" >> /tmp/login.log +cp /usr/share/applications/qgm-abmelden.desktop $DESKDIR/qgm-abmelden.desktop +chmod 755 $DESKDIR/qgm-abmelden.desktop + +echo "Done" >> /tmp/login.log diff --git a/roles/lmn_qgm/files/qgm-soundfix.desktop b/roles/lmn_qgm/files/qgm-soundfix.desktop deleted file mode 100644 index b72d7d0..0000000 --- a/roles/lmn_qgm/files/qgm-soundfix.desktop +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env xdg-open - -[Desktop Entry] -Version=1.0 -Type=Application -Terminal=false -Exec=qgm-soundfix.sh -Name[de_DE]=QG - Ton zum Beamer -Name=QG - Ton zum Beamer -Icon=/usr/share/icons/breeze-dark/emblems/symbolic/emblem-music-symbolic.svg -Hidden=false -Comment= -Path= -StartupNotify=false - diff --git a/roles/lmn_qgm/files/qgm-soundfix.sh b/roles/lmn_qgm/files/qgm-soundfix.sh deleted file mode 100755 index 01ab3fc..0000000 --- a/roles/lmn_qgm/files/qgm-soundfix.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -CARD=$(pactl list cards short | head -n 1 | awk '{print $2}') -pactl set-card-profile $CARD output:hdmi-stereo+input:analog-stereo -HDMISINK=$(pactl list sinks short | grep hdmi | awk '{print $2}') -pactl set-default-sink $HDMISINK diff --git a/roles/lmn_qgm/tasks/base.yml b/roles/lmn_qgm/tasks/base.yml index 4a05425..2ef7d76 100644 --- a/roles/lmn_qgm/tasks/base.yml +++ b/roles/lmn_qgm/tasks/base.yml @@ -237,21 +237,18 @@ owner: root group: root -########## -# Laptop Skripte -# -- name: Copy qgm-soudfix.sh +- name: Copy qgm-abmelden.desktop copy: - src: qgm-soundfix.sh - dest: /usr/local/bin/qgm-soundfix.sh + src: qgm-abmelden.desktop + dest: /usr/share/applications/qgm-abmelden.desktop mode: '0755' owner: root group: root - -- name: Copy qgm-soudfix.desktop + +- name: Copy logout icon copy: - src: qgm-soundfix.desktop - dest: /usr/share/applications/qgm-soundfix.desktop + src: logout.png + dest: /usr/share/icons/logout.png mode: '0644' owner: root group: root diff --git a/roles/lmn_qgm/tasks/beamerscript.yml b/roles/lmn_qgm/tasks/beamerscript.yml new file mode 100644 index 0000000..bc3f80e --- /dev/null +++ b/roles/lmn_qgm/tasks/beamerscript.yml @@ -0,0 +1,41 @@ +########## +# Laptop Skripte +# +# Copy Beamer +- name: Copy BeamerSetup.sh + copy: + src: BeamerSetup.sh + dest: /usr/local/bin/BeamerSetup.sh + mode: '0755' + owner: root + group: root + +- name: Copy qgm-beamersetup.desktop + copy: + src: qgm-beamersetup.desktop + dest: /usr/share/applications/qgm-beamersetup.desktop + mode: '0644' + owner: root + group: root + +- name: Copy icon + copy: + src: beamer.png + dest: /usr/share/icons/beamer.png + mode: '0644' + owner: root + group: root + +# Remove old scripts +- name: Remove qgm-soudfix.sh + file: + path: /usr/local/bin/qgm-soundfix.sh + state: absent + +- name: Delete qgm-soudfix.desktop + file: + path: /usr/share/applications/qgm-soundfix.desktop + state: absent + + + diff --git a/roles/lmn_qgm/tasks/main.yml b/roles/lmn_qgm/tasks/main.yml index cc6bc1a..d4da06d 100644 --- a/roles/lmn_qgm/tasks/main.yml +++ b/roles/lmn_qgm/tasks/main.yml @@ -7,3 +7,8 @@ import_tasks: file: soundfix.yml when: "'lt-' in inventory_hostname" + +- name: Copy Beamerscript to lt- hosts + import_tasks: + file: beamerscript.yml + when: "'lt-' in inventory_hostname" diff --git a/roles/lmn_qgsoftware/files/logseq.png b/roles/lmn_qgsoftware/files/logseq.png new file mode 100644 index 0000000..7b12837 Binary files /dev/null and b/roles/lmn_qgsoftware/files/logseq.png differ diff --git a/roles/lmn_qgsoftware/files/qg.appimage.Logseq.desktop b/roles/lmn_qgsoftware/files/qg.appimage.Logseq.desktop new file mode 100644 index 0000000..ac85aa7 --- /dev/null +++ b/roles/lmn_qgsoftware/files/qg.appimage.Logseq.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Logseq +Comment=Logseq for Desktop +Exec=/opt/appimages/logseq/Logseq.AppImage $SANDBOXPARAM %u +Icon=logseq +StartupWMClass=undefined +Type=Application +Categories=Office; +MimeType=x-scheme-handler/logseq;text/html; diff --git a/roles/lmn_qgsoftware/tasks/install.yml b/roles/lmn_qgsoftware/tasks/install.yml index d2e9d3d..78e09cc 100644 --- a/roles/lmn_qgsoftware/tasks/install.yml +++ b/roles/lmn_qgsoftware/tasks/install.yml @@ -16,7 +16,7 @@ - name: Install bluej if necessary ansible.builtin.apt: - deb: "{{ mirror_javadev }}/bluej-{{ bluej_target_version}}.deb" + deb: "{{ mirror_javadev }}/bluej-{{ bluej_target_version }}.deb" when: (mirror_javadev is defined and mirror_javadev | length > 0) and (bluej_target_version is defined and bluej_target_version | length > 0 ) and (bluej_installed_version != bluej_target_version ) @@ -46,7 +46,7 @@ dest: /opt/appimages/freecad/FreeCAD.AppImage mode: '0755' -- name: Copy desktop starter file to target +- name: Copy desktop freecad starter file to target copy: src: files/qg.appimage.FreeCAD.desktop dest: /usr/share/applications/qg.appimage.FreeCAD.desktop @@ -54,6 +54,39 @@ owner: root group: root +######## +# Logseq AppImage +# +- name: Make sure target dir for logseq exists + ansible.builtin.file: + path: /opt/appimages/logseq/ + state: directory + recurse: yes + owner: root + group: root + mode: '0755' + +- name: Download logseq AppImage from Cache + ansible.builtin.get_url: + url: "{{ mirror_appimage }}/Logseq.AppImage" + dest: /opt/appimages/logseq/Logseq.AppImage + mode: '0755' + +- name: Copy desktop logseq starter file to target + copy: + src: files/qg.appimage.Logseq.desktop + dest: /usr/share/applications/qg.appimage.Logseq.desktop + mode: '0644' + owner: root + group: root + +- name: Copy desktop logseq icon file to target + copy: + src: files/logseq.png + dest: /usr/share/icons/logseq.png + mode: '0644' + owner: root + group: root ######## # Digital als tarpack @@ -64,3 +97,11 @@ dest: / remote_src: yes when: tarpack_digital is defined and tarpack_digital | length > 0 + + +####### +# Scratch +- name: Install scratch + ansible.builtin.apt: + deb: "{{ mirror_debs }}/{{ scratch_install_name }}" + diff --git a/roles/lmn_qgsoftware/tasks/main.yml b/roles/lmn_qgsoftware/tasks/main.yml index 3763aab..ad5591a 100644 --- a/roles/lmn_qgsoftware/tasks/main.yml +++ b/roles/lmn_qgsoftware/tasks/main.yml @@ -2,3 +2,7 @@ - name: Install additional software import_tasks: file: install.yml + +- name: Remove unwanted software + import_tasks: + file: remove.yml diff --git a/roles/lmn_qgsoftware/tasks/remove.yml b/roles/lmn_qgsoftware/tasks/remove.yml new file mode 100644 index 0000000..cb3f726 --- /dev/null +++ b/roles/lmn_qgsoftware/tasks/remove.yml @@ -0,0 +1,8 @@ +--- +####### +# Uninstall KDE-Connect +- name: Uninstall KDe Connect + apt: + name: kdeconnect + state: absent + diff --git a/roles/qgm_updatecache/tasks/download.yml b/roles/qgm_updatecache/tasks/download.yml index d09b77a..467eb26 100644 --- a/roles/qgm_updatecache/tasks/download.yml +++ b/roles/qgm_updatecache/tasks/download.yml @@ -36,6 +36,8 @@ command: wget {{ greenfootURI }} -O {{ greenfootTargetFile }} when: not gftf.stat.exists +#### Freecad + - name: Check if freecad target-file exists delegate_to: localhost stat: @@ -47,3 +49,21 @@ command: wget {{ freecadFullURI }} -O {{ freecadTargetFile }} when: not fctf.stat.exists +#### Logseq + +- name: Check if logseq target-file exists + delegate_to: localhost + stat: + path: "{{ logseqTargetFile }}" + register: lstf + +- name: Download logseq AppImage + delegate_to: localhost + command: wget {{ logseqFullURI }} -O {{ logseqTargetFile }} + when: not lstf.stat.exists + +### Scratch offline + +- name: Download Scratch Offline deb + delegate_to: localhost + command: wget {{ scratch_src_uri }} -O /var/www/html/debs/{{ scratch_install_name }}