Rolen aus bookworm übernommen
This commit is contained in:
parent
b74032925f
commit
420d9ea7b0
34 changed files with 1239 additions and 23 deletions
3
roles/custom/qg-base/files/52-arduino.rules
Normal file
3
roles/custom/qg-base/files/52-arduino.rules
Normal file
|
@ -0,0 +1,3 @@
|
|||
SUBSYSTEMS=="usb",KERNEL=="ttyACM*",ATTRS{idVendor}=="16c0",ATTRS{idProduct}=="0483",GROUP="dialout",MODE="0666"
|
||||
SUBSYSTEMS=="usb",KERNEL=="ttyACM*",ATTRS{idVendor}=="2341",ATTRS{idProduct}=="0043",GROUP="dialout",MODE="0666"
|
||||
SUBSYSTEMS=="usb",KERNEL=="ttyUSB*",ATTRS{idVendor}=="1a86",ATTRS{idProduct}=="7523",GROUP="dialout",MODE="0666"
|
2
roles/custom/qg-base/files/81-wol.rules
Normal file
2
roles/custom/qg-base/files/81-wol.rules
Normal file
|
@ -0,0 +1,2 @@
|
|||
# enable wol
|
||||
ACTION=="add", SUBSYSTEM=="net", NAME=="*", RUN+="/usr/sbin/ethtool -s $name wol g"
|
67
roles/custom/qg-base/files/BeamerSetup.sh
Executable file
67
roles/custom/qg-base/files/BeamerSetup.sh
Executable file
|
@ -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
|
BIN
roles/custom/qg-base/files/beamer.png
Normal file
BIN
roles/custom/qg-base/files/beamer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.8 KiB |
104
roles/custom/qg-base/files/firefox-esr.desktop
Normal file
104
roles/custom/qg-base/files/firefox-esr.desktop
Normal file
|
@ -0,0 +1,104 @@
|
|||
[Desktop Entry]
|
||||
Name=Firefox ESR
|
||||
Name[bg]=Firefox ESR
|
||||
Name[ca]=Firefox ESR
|
||||
Name[cs]=Firefox ESR
|
||||
Name[el]=Firefox ESR
|
||||
Name[es]=Firefox ESR
|
||||
Name[fa]=Firefox ESR
|
||||
Name[fi]=Firefox ESR
|
||||
Name[fr]=Firefox ESR
|
||||
Name[hu]=Firefox ESR
|
||||
Name[it]=Firefox ESR
|
||||
Name[ja]=Firefox ESR
|
||||
Name[ko]=Firefox ESR
|
||||
Name[nb]=Firefox ESR
|
||||
Name[nl]=Firefox ESR
|
||||
Name[nn]=Firefox ESR
|
||||
Name[no]=Firefox ESR
|
||||
Name[pl]=Firefox ESR
|
||||
Name[pt]=Firefox ESR
|
||||
Name[pt_BR]=Firefox ESR
|
||||
Name[ru]=Firefox ESR
|
||||
Name[sk]=Firefox ESR
|
||||
Name[sv]=Firefox ESR
|
||||
Comment=Browse the World Wide Web
|
||||
Comment[bg]=Сърфиране в Мрежата
|
||||
Comment[ca]=Navegueu per el web
|
||||
Comment[cs]=Prohlížení stránek World Wide Webu
|
||||
Comment[de]=Im Internet surfen
|
||||
Comment[el]=Περιηγηθείτε στον παγκόσμιο ιστό
|
||||
Comment[es]=Navegue por la web
|
||||
Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید
|
||||
Comment[fi]=Selaa Internetin WWW-sivuja
|
||||
Comment[fr]=Navigue sur Internet
|
||||
Comment[hu]=A világháló böngészése
|
||||
Comment[it]=Esplora il web
|
||||
Comment[ja]=ウェブを閲覧します
|
||||
Comment[ko]=웹을 돌아 다닙니다
|
||||
Comment[nb]=Surf på nettet
|
||||
Comment[nl]=Verken het internet
|
||||
Comment[nn]=Surf på nettet
|
||||
Comment[no]=Surf på nettet
|
||||
Comment[pl]=Przeglądanie stron WWW
|
||||
Comment[pt]=Navegue na Internet
|
||||
Comment[pt_BR]=Navegue na Internet
|
||||
Comment[ru]=Обозреватель Всемирной Паутины
|
||||
Comment[sk]=Prehliadanie internetu
|
||||
Comment[sv]=Surfa på webben
|
||||
GenericName=Web Browser
|
||||
GenericName[bg]=Интернет браузър
|
||||
GenericName[ca]=Navegador web
|
||||
GenericName[cs]=Webový prohlížeč
|
||||
GenericName[de]=Webbrowser
|
||||
GenericName[el]=Περιηγητής ιστού
|
||||
GenericName[es]=Navegador web
|
||||
GenericName[fa]=مرورگر اینترنتی
|
||||
GenericName[fi]=WWW-selain
|
||||
GenericName[fr]=Navigateur Web
|
||||
GenericName[hu]=Webböngésző
|
||||
GenericName[it]=Browser Web
|
||||
GenericName[ja]=ウェブ・ブラウザ
|
||||
GenericName[ko]=웹 브라우저
|
||||
GenericName[nb]=Nettleser
|
||||
GenericName[nl]=Webbrowser
|
||||
GenericName[nn]=Nettlesar
|
||||
GenericName[no]=Nettleser
|
||||
GenericName[pl]=Przeglądarka WWW
|
||||
GenericName[pt]=Navegador Web
|
||||
GenericName[pt_BR]=Navegador Web
|
||||
GenericName[ru]=Интернет-браузер
|
||||
GenericName[sk]=Internetový prehliadač
|
||||
GenericName[sv]=Webbläsare
|
||||
X-GNOME-FullName=Firefox ESR Web Browser
|
||||
X-GNOME-FullName[bg]=Интернет браузър (Firefox ESR)
|
||||
X-GNOME-FullName[ca]=Navegador web Firefox ESR
|
||||
X-GNOME-FullName[cs]=Firefox ESR Webový prohlížeč
|
||||
X-GNOME-FullName[el]=Περιηγήτης Ιστού Firefox ESR
|
||||
X-GNOME-FullName[es]=Navegador web Firefox ESR
|
||||
X-GNOME-FullName[fa]=مرورگر اینترنتی Firefox ESR
|
||||
X-GNOME-FullName[fi]=Firefox ESR-selain
|
||||
X-GNOME-FullName[fr]=Navigateur Web Firefox ESR
|
||||
X-GNOME-FullName[hu]=Firefox ESR webböngésző
|
||||
X-GNOME-FullName[it]=Firefox ESR Browser Web
|
||||
X-GNOME-FullName[ja]=Firefox ESR ウェブ・ブラウザ
|
||||
X-GNOME-FullName[ko]=Firefox ESR 웹 브라우저
|
||||
X-GNOME-FullName[nb]=Firefox ESR Nettleser
|
||||
X-GNOME-FullName[nl]=Firefox ESR webbrowser
|
||||
X-GNOME-FullName[nn]=Firefox ESR Nettlesar
|
||||
X-GNOME-FullName[no]=Firefox ESR Nettleser
|
||||
X-GNOME-FullName[pl]=Przeglądarka WWW Firefox ESR
|
||||
X-GNOME-FullName[pt]=Firefox ESR Navegador Web
|
||||
X-GNOME-FullName[pt_BR]=Navegador Web Firefox ESR
|
||||
X-GNOME-FullName[ru]=Интернет-браузер Firefox ESR
|
||||
X-GNOME-FullName[sk]=Internetový prehliadač Firefox ESR
|
||||
X-GNOME-FullName[sv]=Webbläsaren Firefox ESR
|
||||
Exec=/usr/lib/firefox-esr/firefox-esr %u --allow-downgrade
|
||||
Terminal=false
|
||||
X-MultipleArgs=false
|
||||
Type=Application
|
||||
Icon=firefox-esr
|
||||
Categories=Network;WebBrowser;
|
||||
MimeType=text/html;text/xml;application/xhtml+xml;application/xml;application/vnd.mozilla.xul+xml;application/rss+xml;application/rdf+xml;image/gif;image/jpeg;image/png;x-scheme-handler/http;x-scheme-handler/https;
|
||||
StartupWMClass=Firefox-esr
|
||||
StartupNotify=true
|
70
roles/custom/qg-base/files/firefox_policies.json
Normal file
70
roles/custom/qg-base/files/firefox_policies.json
Normal file
|
@ -0,0 +1,70 @@
|
|||
{
|
||||
"policies": {
|
||||
"Proxy": {
|
||||
"Mode": "system"
|
||||
},
|
||||
"OverrideFirstRunPage": "https://www.qg-moessingen.de",
|
||||
"Homepage": {
|
||||
"URL": "https://www.debian.org",
|
||||
"Locked": false,
|
||||
"StartPage": "previous-session"
|
||||
},
|
||||
"DisplayBookmarksToolbar": true,
|
||||
"ManagedBookmarks": [
|
||||
{
|
||||
"toplevel_name": "QG Mössingen"
|
||||
},
|
||||
{
|
||||
"url": "https://server.qgm.lan",
|
||||
"name": "Passwort ändern"
|
||||
},
|
||||
{
|
||||
"url": "https://wolke.qg-moessingen.de",
|
||||
"name": "QG-Wolke"
|
||||
},
|
||||
{
|
||||
"url": "https://moodle.qg-moessingen.de",
|
||||
"name": "QG-Moodle"
|
||||
},
|
||||
{
|
||||
"name": "Debian",
|
||||
"children": [
|
||||
{
|
||||
"url": "https://www.debian.org",
|
||||
"name": "Debian Homepage"
|
||||
},
|
||||
{
|
||||
"url": "https://wiki.debian.org",
|
||||
"name": "Debian Wiki"
|
||||
},
|
||||
{
|
||||
"name": "Debian LAN/Live",
|
||||
"children": [
|
||||
{
|
||||
"url": "https://salsa.debian.org/andi/debian-lan-ansible",
|
||||
"name": "Debian LAN Ansible"
|
||||
},
|
||||
{
|
||||
"url": "https://wiki.debian.org/DebianLive",
|
||||
"name": "Debian Live"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"SearchEngines": {
|
||||
"Add": [
|
||||
{
|
||||
"Name": "Startpage",
|
||||
"URLTemplate": "https://www.startpage.com/sp/search?query={searchTerms}",
|
||||
"Method": "GET",
|
||||
"IconURL": "https://www.startpage.com/sp/cdn/favicons/favicon--default.ico",
|
||||
"Alias": "sp",
|
||||
"Description": "Startpage Search Engine"
|
||||
}
|
||||
],
|
||||
"Default": "Startpage"
|
||||
}
|
||||
}
|
||||
}
|
BIN
roles/custom/qg-base/files/logout.png
Normal file
BIN
roles/custom/qg-base/files/logout.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
13
roles/custom/qg-base/files/qgm-abmelden.desktop
Normal file
13
roles/custom/qg-base/files/qgm-abmelden.desktop
Normal file
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env xdg-open
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Exec=qdbus6 org.kde.Shutdown /Shutdown org.kde.Shutdown.logout
|
||||
Name[de_DE]=Abmelden
|
||||
Name=Abmelden
|
||||
Icon=/usr/share/icons/logout.png
|
||||
Hidden=false
|
||||
Comment=
|
||||
Path=
|
||||
StartupNotify=false
|
15
roles/custom/qg-base/files/qgm-beamersetup.desktop
Normal file
15
roles/custom/qg-base/files/qgm-beamersetup.desktop
Normal file
|
@ -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
|
||||
|
29
roles/custom/qg-base/files/qgm-login.sh
Normal file
29
roles/custom/qg-base/files/qgm-login.sh
Normal file
|
@ -0,0 +1,29 @@
|
|||
[[ "${UID}" -lt 10000 ]] && return
|
||||
|
||||
# Desktop Verzeichnis?
|
||||
DESKDIR=$(xdg-user-dir DESKTOP)
|
||||
echo $DESKDIR >> /tmp/login.log
|
||||
|
||||
# Wallpaper
|
||||
chmod u+x "$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc"
|
||||
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
|
||||
# DiscoverButton löschen funzt noch nicht
|
||||
kwriteconfig5 --file "$HOME/.config/plasma-org.kde.plasma.desktop-appletsrc" --group 'Containments' --group '2' --group 'Applets' --group '5' --group 'Configuration' --group 'General' --key 'launchers' "applications:systemsettings.desktop,preferred://filemanager,preferred://browser" || 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
|
||||
|
||||
# user-places löschen, wegen Schuljahreswechsel...
|
||||
echo "rm $HOME/.local/share/user-places.xbel" >> /tmp/login.log
|
||||
rm $HOME/.local/share/user-places.xbel
|
||||
|
||||
echo "Done" >> /tmp/login.log
|
273
roles/custom/qg-base/tasks/base.yml
Normal file
273
roles/custom/qg-base/tasks/base.yml
Normal file
|
@ -0,0 +1,273 @@
|
|||
---
|
||||
#########
|
||||
# Management: Ansible User benötigt auf den Clients kein
|
||||
# Passwort für sudo
|
||||
- name: Enable passwordless sudo access for user ansible
|
||||
lineinfile:
|
||||
path: /etc/sudoers
|
||||
state: present
|
||||
regexp: '^ansible ALL='
|
||||
line: 'ansible ALL=(ALL) NOPASSWD: ALL'
|
||||
validate: '/usr/sbin/visudo -cf %s'
|
||||
|
||||
#########
|
||||
# Paketvorkonfigurationen
|
||||
- name: Preseed ttf-mscorefonts-installer
|
||||
ansible.builtin.debconf:
|
||||
name: ttf-mscorefonts-installer
|
||||
question: msttcorefonts/dlurl
|
||||
value: "{{ mirror_msfonts }}"
|
||||
vtype: string
|
||||
when: mirror_msfonts is defined and mirror_msfonts | length > 0
|
||||
|
||||
- name: Preseed libdvd-pkg
|
||||
ansible.builtin.debconf:
|
||||
name: libdvd-pkg
|
||||
question: libdvd-pkg/build
|
||||
value: "true"
|
||||
vtype: boolean
|
||||
ansible.builtin.debconf:
|
||||
name: libdvd-pkg
|
||||
question: libdvd-pkg/post-invoke_hook-install
|
||||
value: "true"
|
||||
vtype: boolean
|
||||
ansible.builtin.debconf:
|
||||
name: libdvd-pkg
|
||||
question: libdvd-pkg/post-invoke_hook-remove
|
||||
value: "false"
|
||||
vtype: boolean
|
||||
|
||||
#########
|
||||
# Softwareauswahl
|
||||
- name: Install desktop EDU packages and some more
|
||||
apt:
|
||||
name:
|
||||
- curl
|
||||
- git
|
||||
- gitg
|
||||
- gitk
|
||||
- lshw
|
||||
- libnotify-bin ## needed for pwroff script
|
||||
- neovim
|
||||
- net-tools
|
||||
- ethtool
|
||||
- netcat-openbsd
|
||||
- nmap
|
||||
- tmux
|
||||
- hexyl
|
||||
- meld
|
||||
- tree
|
||||
- hashcat
|
||||
- ttf-mscorefonts-installer
|
||||
- libdvd-pkg
|
||||
- handbrake
|
||||
- firmware-intel-sound
|
||||
- cura
|
||||
- filius
|
||||
- wine
|
||||
- kdenlive
|
||||
- terminator
|
||||
- geany
|
||||
autoremove: true
|
||||
state: latest
|
||||
environment:
|
||||
http_proxy: '' # this is needed to avoid ttf-mscorefonts-installer picking up aptcacher
|
||||
|
||||
#########
|
||||
# libdvdcss muss gebaut werden
|
||||
# Optimierungspotential: Einmal bauen und über netboot
|
||||
# die Pakete verteilen geht wahrscheinlich schneller
|
||||
|
||||
- name: Build libdvdcss
|
||||
ansible.builtin.shell:
|
||||
cmd: dpkg-reconfigure -f noninteractive libdvd-pkg
|
||||
|
||||
#########
|
||||
# Den cups-browsed will ich gar nicht haben, nicht
|
||||
# nur disablen.
|
||||
- name: Remove cups-browsed
|
||||
ansible.builtin.apt:
|
||||
name: cups-browsed
|
||||
state: absent
|
||||
|
||||
|
||||
#########
|
||||
# Das Skript, das beim Userlogin ausgeführt wird
|
||||
# Setzt derzeit nur den Hintergrund zurück - nicht bei der
|
||||
# allerersten Anmeldung eines Nutzers, weil es da die KDE Config noch
|
||||
# nicht gibt.
|
||||
|
||||
- name: Copy qgm-login.sh for misc login Tasks
|
||||
copy:
|
||||
src: files/qgm-login.sh
|
||||
dest: /etc/profile.d/qgm-login.sh
|
||||
mode: '0664'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
#########
|
||||
# Anpassungen an KDE
|
||||
# - Doppelklick zum öffnen von Dateien
|
||||
# - Style aug breeze fetstackern
|
||||
# - Kein Benutzerwechsel
|
||||
# - Kein Lockscreen
|
||||
# - Keine neue Session
|
||||
# - Login Session immer leer starten, nicht die laufenden Anwendungen merken
|
||||
|
||||
- name: Set mandatory KDE settings
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/xdg/kdeglobals
|
||||
content: |
|
||||
[KDE][$i]
|
||||
SingleClick=false
|
||||
widgetStyle=breeze
|
||||
|
||||
[KDE Action Restrictions][$i]
|
||||
action/switch_user=false
|
||||
action/lock_screen=false
|
||||
action/start_new_session=false
|
||||
|
||||
[General][$i]
|
||||
loginMode=emptySession
|
||||
|
||||
#########
|
||||
# Screen Locking abschalten, Mittelstufenschüler...
|
||||
- name: Disable screen locking
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/xdg/kscreenlockerrc
|
||||
content: |
|
||||
[Daemon][$i]
|
||||
Autolock=false
|
||||
LockOnResume=false
|
||||
|
||||
[Greeter][Wallpaper][org.kde.image][General]
|
||||
Image=file:///usr/local/share/qgm/qgm_background.jpg
|
||||
|
||||
########
|
||||
# Logout beschleunigen
|
||||
- name: Wartezeit nach KDE nach Logout/Shutdown verkürzen
|
||||
ansible.builtin.replace:
|
||||
path: /usr/share/plasma/look-and-feel/org.kde.breeze.desktop/contents/logout/Logout.qml
|
||||
regexp: '^(\s+)property real timeout:.*$'
|
||||
replace: '\1property real timeout: 4'
|
||||
|
||||
########
|
||||
# Wayland abschalten, Standardsession X11
|
||||
# SDDM hat (noch) keine Option, die Standardsession vorzugeben
|
||||
# Bei einem "normalen" System, merkt er sich die letzte Sitzung, die
|
||||
# der Nutzer wählt für künftige Anmeldungen, das klappt im Netz nicht.
|
||||
# Die Session Liste baut er alphabetisch zusammen aus den desktop-Dateien
|
||||
# in den Verzeichnissen /usr/share/wayland-sessions und /usr/share/xsessions/
|
||||
# der erste Eintrag ist Standard - und das ist leider eben immer die Sitzung in
|
||||
# wayland-sessions. Darum: Weg damit ;)
|
||||
|
||||
- name: Disable wayland session systemwide
|
||||
ansible.builtin.file:
|
||||
path: /usr/share/wayland-sessions/plasmawayland.desktop
|
||||
state: absent
|
||||
|
||||
|
||||
#########
|
||||
# plasma-discover ist der grafische Paketmamanger
|
||||
# der stürzt nur ab und die Bejutzer können eh
|
||||
# nichts selbst installieren
|
||||
- name: Remove plasma-discover
|
||||
ansible.builtin.apt:
|
||||
name: plasma-discover
|
||||
state: absent
|
||||
|
||||
#########
|
||||
# Anpassungen für Arduino
|
||||
# - modemmanager dinstallieren, soll die Probleme mit wechselnden
|
||||
# Device Namen lössen (ungetestet)
|
||||
# - Udev-Rule, so dass die Devices mit 0666 angelegt werden, wie
|
||||
# Warnung des Debian Pakets "arduino" wegen der dialout Gruppe
|
||||
# bleiben leider.
|
||||
|
||||
- name: Remove modemmanager to fix arduino problems
|
||||
ansible.builtin.apt:
|
||||
name: modemmanager
|
||||
state: absent
|
||||
|
||||
- name: Copy arduino udev rule
|
||||
copy:
|
||||
src: files/52-arduino.rules
|
||||
dest: /etc/udev/rules.d/52-arduino.rules
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
- name: reload udev rules
|
||||
ansible.builtin.command: udevadm control --reload-rules
|
||||
|
||||
- name: trigger udev update
|
||||
ansible.builtin.command: udevadm trigger
|
||||
|
||||
|
||||
#########
|
||||
# Firefox ESR Anpassungen
|
||||
# Lesezeichen und Startseite müssen in der
|
||||
# Datei firefox_policies.json für die eigene Schule
|
||||
# angepasst werden.
|
||||
- name: Create firefox policies directory
|
||||
ansible.builtin.file:
|
||||
path: /etc/firefox-esr/policies
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: Create a symbolic link firefox to firefox-esr
|
||||
ansible.builtin.file:
|
||||
src: /etc/firefox-esr
|
||||
dest: /etc/firefox
|
||||
state: link
|
||||
|
||||
- name: Copy firefox policy
|
||||
ansible.builtin.copy:
|
||||
src: firefox_policies.json
|
||||
dest: /etc/firefox-esr/policies/policies.json
|
||||
|
||||
- name: Remove wrongly copied policies file
|
||||
ansible.builtin.file:
|
||||
path: /etc/firefox-esr/policies/firefox_policies.json
|
||||
state: absent
|
||||
|
||||
##########
|
||||
# Enable WOL
|
||||
#
|
||||
- name: Enable WOL
|
||||
ansible.builtin.command: ethtool -s {{ ansible_default_ipv4.interface }} wol g
|
||||
|
||||
- name: Copy 81-wol.rules to target
|
||||
copy:
|
||||
src: 81-wol.rules
|
||||
dest: /etc/udev/rules.d/81-wol.rules
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
- name: Copy qgm-abmelden.desktop
|
||||
copy:
|
||||
src: qgm-abmelden.desktop
|
||||
dest: /usr/share/applications/qgm-abmelden.desktop
|
||||
mode: '0755'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
- name: Copy modified Forefox Starter
|
||||
copy:
|
||||
src: firefox-esr.desktop
|
||||
dest: /usr/share/applications/firefox-esr.desktop
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
- name: Copy logout icon
|
||||
copy:
|
||||
src: logout.png
|
||||
dest: /usr/share/icons/logout.png
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
|
||||
|
41
roles/custom/qg-base/tasks/beamerscript.yml
Normal file
41
roles/custom/qg-base/tasks/beamerscript.yml
Normal file
|
@ -0,0 +1,41 @@
|
|||
##########
|
||||
# Laptop Skripte
|
||||
#
|
||||
# Copy Beamer
|
||||
- name: Copy BeamerSetup.sh
|
||||
copy:
|
||||
src: files/BeamerSetup.sh
|
||||
dest: /usr/local/bin/BeamerSetup.sh
|
||||
mode: '0755'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
- name: Copy qgm-beamersetup.desktop
|
||||
copy:
|
||||
src: files/qgm-beamersetup.desktop
|
||||
dest: /usr/share/applications/qgm-beamersetup.desktop
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
- name: Copy icon
|
||||
copy:
|
||||
src: files/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
|
||||
|
||||
|
||||
|
14
roles/custom/qg-base/tasks/main.yml
Normal file
14
roles/custom/qg-base/tasks/main.yml
Normal file
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
- name: Base configuration for all hosts
|
||||
import_tasks:
|
||||
file: base.yml
|
||||
|
||||
- name: Fix sound on lt- hosts
|
||||
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"
|
11
roles/custom/qg-base/tasks/soundfix.yml
Normal file
11
roles/custom/qg-base/tasks/soundfix.yml
Normal file
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
# Probleme mit akgehackten Ton über HDMI an
|
||||
# den Laptops in den Klassenzimmern
|
||||
# ACHTUNG: Beddingung hostname muss mit lt- beginnen.
|
||||
- name: Fix stuttering sound on HDMI
|
||||
lineinfile:
|
||||
dest: /etc/default/grub
|
||||
regexp: '^(GRUB_CMDLINE_LINUX=).*'
|
||||
line: '\g<1>"intel_iommu=on,igfx_off"'
|
||||
backrefs: yes
|
||||
notify: Run update-grub
|
6
roles/custom/qg-sddm/README.txt
Normal file
6
roles/custom/qg-sddm/README.txt
Normal file
|
@ -0,0 +1,6 @@
|
|||
Diese Rolle macht ein SDDM Theme, das nett aussieht und folgende Vorteile hat.
|
||||
|
||||
* Kein Fokus auf irgendeinem Element, d.h. wenn jemand den Monitor mit
|
||||
Space "weckt" wird nirgends was eingefügt.
|
||||
* Kein Userlistenelement
|
||||
* Optik einfach konfigurierbar über theme.conf
|
BIN
roles/custom/qg-sddm/files/qgm-sugar-dark.tgz
Normal file
BIN
roles/custom/qg-sddm/files/qgm-sugar-dark.tgz
Normal file
Binary file not shown.
BIN
roles/custom/qg-sddm/files/qgm_background.jpg
Normal file
BIN
roles/custom/qg-sddm/files/qgm_background.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 216 KiB |
BIN
roles/custom/qg-sddm/files/qgm_background_wallpaper.jpg
Normal file
BIN
roles/custom/qg-sddm/files/qgm_background_wallpaper.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 179 KiB |
43
roles/custom/qg-sddm/tasks/main.yml
Normal file
43
roles/custom/qg-sddm/tasks/main.yml
Normal file
|
@ -0,0 +1,43 @@
|
|||
|
||||
#########
|
||||
# Anpassungen für Login Screen und Hintergrund
|
||||
# Wir möchten am Login-Screen das Hintergrund-Bild
|
||||
# qgm_background.jpg - in Schwarz/Weiss haben
|
||||
# Bei der Anmeldung soll das Bild
|
||||
# qgm_background_desktop.jpg - in Farbe
|
||||
# gesetzt werden.
|
||||
# Das passiert im Skript qgm-login.sh, das weiter unten
|
||||
# auf die Rechner kopiert wird
|
||||
|
||||
- name: Make qgm share directory
|
||||
file:
|
||||
path: /usr/local/share/qgm
|
||||
state: directory
|
||||
mode: '0755'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
- name: Copy qgm background pictures
|
||||
ansible.builtin.copy:
|
||||
src: "{{ item }}"
|
||||
dest: /usr/local/share/qgm/
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: root
|
||||
loop:
|
||||
- qgm_background.jpg
|
||||
- qgm_background_wallpaper.jpg
|
||||
|
||||
- name: Entpacke qgm-sugar-dark.tgz nach /usr/share/sddm/themes
|
||||
unarchive:
|
||||
src: qgm-sugar-dark.tgz
|
||||
dest: /usr/share/sddm/themes
|
||||
|
||||
- name: Link /etc/alternatives/sddm-debian-theme nach /usr/share/sddm/themes/qgm-sugar-dark/
|
||||
file:
|
||||
src: /usr/share/sddm/themes/qgm-sugar-dark
|
||||
dest: /etc/alternatives/sddm-debian-theme
|
||||
owner: root
|
||||
group: root
|
||||
state: link
|
||||
|
BIN
roles/custom/qg-software/files/logseq.png
Normal file
BIN
roles/custom/qg-software/files/logseq.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 103 KiB |
BIN
roles/custom/qg-software/files/prusaslicer.png
Normal file
BIN
roles/custom/qg-software/files/prusaslicer.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9 KiB |
|
@ -0,0 +1,13 @@
|
|||
[Desktop Entry]
|
||||
Name=Arduino IDE2 AppImage
|
||||
Comment=Open-source electronics prototyping platform
|
||||
GenericName=Arduino IDE
|
||||
Exec=unset -v https_proxy http_proxy && . /opt/appimages/arduino2/start-arduino2-appimage %f > /tmp/arduinoAppimage.log 2>&1
|
||||
Icon=arduino
|
||||
Type=Application
|
||||
Terminal=false
|
||||
Categories=Development;Engineering;Electronics;IDE;
|
||||
MimeType=text/x-arduino
|
||||
Keywords=embedded electronics;electronics;avr;microcontroller;
|
||||
StartupWMClass=processing-app-Base
|
||||
|
19
roles/custom/qg-software/files/qg.appimage.FreeCAD.desktop
Normal file
19
roles/custom/qg-software/files/qg.appimage.FreeCAD.desktop
Normal file
|
@ -0,0 +1,19 @@
|
|||
[Desktop Entry]
|
||||
Name=FreeCAD Appimage
|
||||
Name[de]=FreeCAD Appimage
|
||||
Name[pl]=FreeCAD Appimage
|
||||
Name[ru]=FreeCAD Appimage
|
||||
Comment=Feature based Parametric Modeler Appimage
|
||||
Comment[de]=Feature-basierter parametrischer Modellierer Appimage
|
||||
Comment[ru]=Система автоматизированного проектирования Appimage
|
||||
GenericName=CAD Application Appimage
|
||||
GenericName[de]=CAD-Anwendung Appimage
|
||||
GenericName[pl]=Aplikacja CAD Appimage
|
||||
GenericName[ru]=Система автоматизированного проектирования Appimage
|
||||
Exec=/opt/appimages/freecad/FreeCAD.AppImage - --single-instance %F
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=org.freecadweb.FreeCAD
|
||||
Categories=Graphics;Science;Education;Engineering;
|
||||
StartupNotify=true
|
||||
MimeType=application/x-extension-fcstd;model/obj;model/iges;image/vnd.dwg;image/vnd.dxf;model/vnd.collada+xml;application/iges;model/iges;model/step;model/step+zip;model/stl;application/vnd.shp;model/vrml;
|
10
roles/custom/qg-software/files/qg.appimage.Logseq.desktop
Normal file
10
roles/custom/qg-software/files/qg.appimage.Logseq.desktop
Normal file
|
@ -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;
|
|
@ -0,0 +1,13 @@
|
|||
[Desktop Entry]
|
||||
Name=Prusa Slicer Appimage
|
||||
Name[de]=Prusa Slicer Appimage
|
||||
Name[pl]=Prusa Slicer Appimage
|
||||
Comment=Slicer for 3d Printing
|
||||
GenericName=Slicing App Image
|
||||
Exec=/opt/appimages/prusaslicer/PrusaSlicer.AppImage
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Icon=prusaslicer
|
||||
Categories=Graphics;Science;Education;Engineering;
|
||||
StartupNotify=true
|
||||
MimeType=application/x-extension-fcstd;model/obj;model/iges;image/vnd.dwg;image/vnd.dxf;model/vnd.collada+xml;application/iges;model/iges;model/step;model/step+zip;model/stl;application/vnd.shp;model/vrml;
|
16
roles/custom/qg-software/files/start-arduino2-appimage
Executable file
16
roles/custom/qg-software/files/start-arduino2-appimage
Executable file
|
@ -0,0 +1,16 @@
|
|||
echo "---------------------"
|
||||
cachedir=/var/cache/user/${KDE_SESSION_UID}/arduino15
|
||||
echo "Cachedir: $cachedir"
|
||||
echo "---------------------"
|
||||
template=/var/lib/arduino2/template
|
||||
arduinoAppimage=/opt/appimages/arduino2/ArduinoIDE2.AppImage
|
||||
|
||||
mkdir -p $cachedir
|
||||
|
||||
rsync -avr --delete $template/ $cachedir/ > /dev/null 2>&1
|
||||
rm -rf ${HOME}/.arduino15
|
||||
ln -s $cachedir ${HOME}/.arduino15
|
||||
|
||||
$arduinoAppimage $1 &
|
||||
|
||||
|
196
roles/custom/qg-software/tasks/install.yml
Normal file
196
roles/custom/qg-software/tasks/install.yml
Normal file
|
@ -0,0 +1,196 @@
|
|||
---
|
||||
#########
|
||||
# Greenfoot und BlueJ.
|
||||
|
||||
- name: Determine installed bluej version
|
||||
shell: "dpkg -l bluej 2> /dev/null | grep ii | awk '{print $3}'"
|
||||
register: command_output
|
||||
- set_fact:
|
||||
bluej_installed_version: "{{ command_output.stdout }}"
|
||||
|
||||
- name: Determine installed greenfoot version
|
||||
shell: "dpkg -l greenfoot 2> /dev/null | grep ii | awk '{print $3}'"
|
||||
register: command_output
|
||||
- set_fact:
|
||||
greenfoot_installed_version: "{{ command_output.stdout }}"
|
||||
|
||||
- name: Install bluej if necessary
|
||||
ansible.builtin.apt:
|
||||
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 )
|
||||
|
||||
- name: Install greenfoot if necessary
|
||||
ansible.builtin.apt:
|
||||
deb: "{{ mirror_javadev }}/greenfoot-{{ greenfoot_target_version }}.deb"
|
||||
when: (mirror_javadev is defined and mirror_javadev | length > 0) and
|
||||
(greenfoot_target_version is defined and greenfoot_target_version | length > 0 ) and
|
||||
(greenfoot_installed_version != greenfoot_target_version )
|
||||
|
||||
########
|
||||
# FreeCAD AppImage
|
||||
#
|
||||
- name: Make sure target dir exists
|
||||
ansible.builtin.file:
|
||||
path: /opt/appimages/freecad/
|
||||
state: directory
|
||||
recurse: yes
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0755'
|
||||
|
||||
- name: Download FreeCAD AppImage from Cache
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ mirror_appimage }}/FreeCAD.AppImage"
|
||||
dest: /opt/appimages/freecad/FreeCAD.AppImage
|
||||
mode: '0755'
|
||||
|
||||
- name: Copy desktop freecad starter file to target
|
||||
copy:
|
||||
src: files/qg.appimage.FreeCAD.desktop
|
||||
dest: /usr/share/applications/qg.appimage.FreeCAD.desktop
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
########
|
||||
# Arduino2 AppImage
|
||||
#
|
||||
- name: Make sure target dir exists
|
||||
ansible.builtin.file:
|
||||
path: /opt/appimages/arduino2/
|
||||
state: directory
|
||||
recurse: yes
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0755'
|
||||
|
||||
- name: Make sure lib dir for template exists
|
||||
ansible.builtin.file:
|
||||
path: /var/lib/arduino2
|
||||
state: directory
|
||||
recurse: yes
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0755'
|
||||
|
||||
- name: Download Arduino2 AppImage from Cache
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ mirror_appimage }}/ArduinoIDE2.AppImage"
|
||||
dest: /opt/appimages/arduino2/ArduinoIDE2.AppImage
|
||||
mode: '0755'
|
||||
|
||||
- name: Copy desktop arduino2 starter file to target
|
||||
copy:
|
||||
src: files/qg.appimage.ArduinoIDE2.desktop
|
||||
dest: /usr/share/applications/qg.appimage.ArduinoIDE2.desktop
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
- name: Copy arduino Appimage start Script to target
|
||||
copy:
|
||||
src: files/start-arduino2-appimage
|
||||
dest: /opt/appimages/arduino2/start-arduino2-appimage
|
||||
mode: '0755'
|
||||
owner: root
|
||||
group: root
|
||||
|
||||
- name: Delete arduino15 template
|
||||
ansible.builtin.file:
|
||||
state: absent
|
||||
path: /var/lib/arduino2/template
|
||||
|
||||
- name: Extract up to date arduino15 template to target
|
||||
ansible.builtin.unarchive:
|
||||
src: "{{ mirror_appimage }}/ArduinoIDE2-template.zip"
|
||||
dest: /var/lib/arduino2/
|
||||
remote_src: yes
|
||||
|
||||
########
|
||||
# Prusa Slicer AppImage
|
||||
#
|
||||
- name: Make sure target dir exists
|
||||
ansible.builtin.file:
|
||||
path: /opt/appimages/prusaslicer/
|
||||
state: directory
|
||||
recurse: yes
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0755'
|
||||
|
||||
- name: Download PrusaSlicer AppImage from Cache
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ mirror_appimage }}/PrusaSlicer.AppImage"
|
||||
dest: /opt/appimages/prusaslicer/PrusaSlicer.AppImage
|
||||
mode: '0755'
|
||||
|
||||
- name: Copy desktop PrusaSlicer starter file to target
|
||||
copy:
|
||||
src: files/qg.appimage.PrusaSlicer.desktop
|
||||
dest: /usr/share/applications/qg.appimage.PrusaSlicer.desktop
|
||||
mode: '0644'
|
||||
owner: root
|
||||
|
||||
- name: Copy desktop Prusaslicer icon file to target
|
||||
copy:
|
||||
src: files/prusaslicer.png
|
||||
dest: /usr/share/icons/prusaslicer.png
|
||||
mode: '0644'
|
||||
owner: root
|
||||
group: 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
|
||||
#
|
||||
- name: Unpack digital.zip to target
|
||||
ansible.builtin.unarchive:
|
||||
src: "{{ tarpack_digital }}"
|
||||
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 }}"
|
||||
|
8
roles/custom/qg-software/tasks/main.yml
Normal file
8
roles/custom/qg-software/tasks/main.yml
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
- name: Install additional software
|
||||
import_tasks:
|
||||
file: install.yml
|
||||
|
||||
- name: Remove unwanted software
|
||||
import_tasks:
|
||||
file: remove.yml
|
8
roles/custom/qg-software/tasks/remove.yml
Normal file
8
roles/custom/qg-software/tasks/remove.yml
Normal file
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
#######
|
||||
# Uninstall KDE-Connect
|
||||
- name: Uninstall KDe Connect
|
||||
apt:
|
||||
name: kdeconnect
|
||||
state: absent
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue