Implement the custom role concept
- Custom Ansible roles can be stored in the `roles/custom` directory - The list `custom_roles` determines which roles are included
This commit is contained in:
parent
a1149945da
commit
91ab4d3511
24 changed files with 479 additions and 470 deletions
18
roles/custom/fvs/files/bootorder.sh
Normal file
18
roles/custom/fvs/files/bootorder.sh
Normal file
|
@ -0,0 +1,18 @@
|
|||
#!/usr/bin/bash
|
||||
#
|
||||
# fix boot order: first PXE, then Debian
|
||||
#
|
||||
set -eu
|
||||
|
||||
cur="$(efibootmgr | grep -Ei 'BootOrder:' | \
|
||||
sed -E 's/^BootOrder: ([[:xdigit:]]{4}),.+$/\1/')"
|
||||
pxeip4="$(efibootmgr | grep -Ei "IP.*4" | \
|
||||
sed -E 's/^Boot([[:xdigit:]]{4}).+$/\1/')"
|
||||
debian="$(efibootmgr | grep -Ei "debian" | \
|
||||
sed -E 's/^Boot([[:xdigit:]]{4}).+$/\1/')"
|
||||
|
||||
if [[ "$cur" != "$pxeip4" ]] && [[ -n "$pxeip4" ]] && [[ -n "$debian" ]] ; then
|
||||
efibootmgr -o $pxeip4,$debian
|
||||
else
|
||||
echo "Nothing to do."
|
||||
fi
|
113
roles/custom/fvs/files/fvs-config.js
Normal file
113
roles/custom/fvs/files/fvs-config.js
Normal file
|
@ -0,0 +1,113 @@
|
|||
// configure plasma defaults
|
||||
|
||||
function forEachWidgetInContainmentList(containmentList, callback) {
|
||||
for (var containmentIndex = 0; containmentIndex < containmentList.length; containmentIndex++) {
|
||||
var containment = containmentList[containmentIndex];
|
||||
|
||||
var widgets = containment.widgets();
|
||||
for (var widgetIndex = 0; widgetIndex < widgets.length; widgetIndex++) {
|
||||
var widget = widgets[widgetIndex];
|
||||
callback(widget, containment);
|
||||
if (widget.type === "org.kde.plasma.systemtray") {
|
||||
systemtrayId = widget.readConfig("SystrayContainmentId");
|
||||
if (systemtrayId) {
|
||||
forEachWidgetInContainmentList([desktopById(systemtrayId)], callback)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function forEachWidget(callback) {
|
||||
forEachWidgetInContainmentList(desktops(), callback);
|
||||
forEachWidgetInContainmentList(panels(), callback);
|
||||
}
|
||||
|
||||
function forEachWidgetByType(type, callback) {
|
||||
forEachWidget(function(widget, containment) {
|
||||
if (widget.type == type) {
|
||||
callback(widget, containment);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function widgetSetProperty(args) {
|
||||
if (!(args.widgetType && args.configGroup && args.configKey)) {
|
||||
return;
|
||||
}
|
||||
|
||||
forEachWidgetByType(args.widgetType, function(widget){
|
||||
widget.currentConfigGroup = [args.configGroup];
|
||||
/*
|
||||
//--- Delete when done debugging
|
||||
const oldValue = widget.readConfig(args.configKey);
|
||||
print("" + widget.type + " (id: " + widget.id + "):");
|
||||
print("\t[" + args.configGroup + "] " + args.configKey + ": " +
|
||||
oldValue + " => " + args.configValue + "\n");
|
||||
//--- End Debug
|
||||
*/
|
||||
widget.writeConfig(args.configKey, args.configValue);
|
||||
});
|
||||
}
|
||||
|
||||
// configure task bar starters:
|
||||
widgetSetProperty({
|
||||
widgetType: "org.kde.plasma.icontasks",
|
||||
configGroup: "General",
|
||||
configKey: "launchers",
|
||||
configValue: [
|
||||
"applications:systemsettings.desktop",
|
||||
"preferred://browser",
|
||||
"applications:thunderbird.desktop",
|
||||
"applications:libreoffice-startcenter.desktop",
|
||||
"preferred://filemanager"
|
||||
//"applications:org.kde.konsole.desktop",
|
||||
//"applications:org.kde.discover.desktop"
|
||||
],
|
||||
|
||||
});
|
||||
|
||||
// kickoff is the default menu:
|
||||
/* this does not work (anymore?)
|
||||
widgetSetProperty({
|
||||
widgetType: "org.kde.plasma.kickoff",
|
||||
configGroup: "General",
|
||||
configKey: "favorites",
|
||||
configValue: ["applications:libreoffice-startcenter.desktop",],
|
||||
});
|
||||
*/
|
||||
|
||||
widgetSetProperty({
|
||||
widgetType: "org.kde.plasma.kickoff",
|
||||
configGroup: "General",
|
||||
configKey: "systemFavorites",
|
||||
configValue: ["reboot", "shutdown", "logout"],
|
||||
//configValue: ["logout"],
|
||||
});
|
||||
|
||||
|
||||
// prepare a folder view on the desktop:
|
||||
/* 20230917 disabled for now
|
||||
var allDesktops = desktops();
|
||||
for (var desktopIndex = 0; desktopIndex < allDesktops.length; desktopIndex++) {
|
||||
var d = allDesktops[desktopIndex];
|
||||
d.addWidget("org.kde.plasma.folder", 50, 50, 456, 600)
|
||||
print("Folder app generated!\n")
|
||||
}
|
||||
|
||||
widgetSetProperty({
|
||||
widgetType: "org.kde.plasma.folder",
|
||||
configGroup: "General",
|
||||
configKey: "url",
|
||||
configValue: "/lmn/media/",
|
||||
});
|
||||
|
||||
widgetSetProperty({
|
||||
widgetType: "org.kde.plasma.folder",
|
||||
configGroup: "General",
|
||||
configKey: "labelMode",
|
||||
configValue: "0",
|
||||
});
|
||||
*/
|
||||
|
||||
// /usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/fvs-config.js
|
5
roles/custom/fvs/files/fvs.directory
Normal file
5
roles/custom/fvs/files/fvs.directory
Normal file
|
@ -0,0 +1,5 @@
|
|||
[Desktop Entry]
|
||||
Type=Directory
|
||||
Name=FvS
|
||||
Icon=face-smile-big
|
||||
#X-KDE-BaseGroup=info
|
12
roles/custom/fvs/files/fvs.menu
Normal file
12
roles/custom/fvs/files/fvs.menu
Normal file
|
@ -0,0 +1,12 @@
|
|||
<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
|
||||
"http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
|
||||
<Menu>
|
||||
<Name>Applications</Name>
|
||||
<Menu>
|
||||
<Name>FvS</Name>
|
||||
<Directory>fvs.directory</Directory>
|
||||
<Include>
|
||||
<Category>fvs</Category>
|
||||
</Include>
|
||||
</Menu>
|
||||
</Menu>
|
6
roles/custom/fvs/files/lmn-dolphin.sh
Normal file
6
roles/custom/fvs/files/lmn-dolphin.sh
Normal file
|
@ -0,0 +1,6 @@
|
|||
if [[ "$UID" -gt 10000 ]] && [[ ! -f ~/.local/share/user-places.xbel.lmn ]] ; then
|
||||
(sleep 30 ; lmn-patch-dolphin.sh) &
|
||||
fi
|
||||
if [[ "$UID" -gt 10000 ]] && [[ -f ~/.local/share/user-places.xbel ]] ; then
|
||||
lmn-fixhome-dolphin.sh
|
||||
fi
|
20
roles/custom/fvs/files/lmn-fixhome-dolphin.sh
Normal file
20
roles/custom/fvs/files/lmn-fixhome-dolphin.sh
Normal file
|
@ -0,0 +1,20 @@
|
|||
#!/usr/bin/bash
|
||||
|
||||
set -eu
|
||||
|
||||
file="${1:-$HOME/.local/share/user-places.xbel}"
|
||||
|
||||
[[ -e "$file" ]] || exit 0
|
||||
|
||||
if id | grep -q teachers; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
NETHOME=(/srv/samba/schools/default-school/students/*/"$USER")
|
||||
[[ -d $NETHOME ]] || exit 0
|
||||
|
||||
if FOUND=$(grep -o "/srv/samba/schools/default-school/students/.*/$USER" $file); then
|
||||
if [[ "$NETHOME" != "$FOUND" ]] ; then
|
||||
sed -i "s|/srv/samba/schools/default-school/students/.*/$USER|$NETHOME|g" $file
|
||||
fi
|
||||
fi
|
89
roles/custom/fvs/files/lmn-patch-dolphin.sh
Executable file
89
roles/custom/fvs/files/lmn-patch-dolphin.sh
Executable file
|
@ -0,0 +1,89 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# patch 'Tausch' and 'Nextcloud' into dolphin's bookmarks
|
||||
#
|
||||
set -eu
|
||||
|
||||
file="${1:-$HOME/.local/share/user-places.xbel}"
|
||||
|
||||
[[ -e "$file" ]] || exit 0
|
||||
|
||||
if grep -q "Tausch\|Nextcloud" "$file" ; then
|
||||
echo "Your Dolphin seems to already contain 'Tausch' and/or 'Nextcloud'." | tee "$file.lmn"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
id="$(grep ID "$file" | sed -E "s|^.+ID>([[:digit:]]+)/([[:digit:]]+)</ID.+$|\1:\2|" \
|
||||
| sort -n -t: -k2 | tail -1 )"
|
||||
|
||||
if id | grep -q teachers; then
|
||||
NETHOME=/srv/samba/schools/default-school/teachers/$USER
|
||||
else
|
||||
NETHOME=(/srv/samba/schools/default-school/students/*/"$USER")
|
||||
fi
|
||||
[[ -d $NETHOME ]] || exit 0
|
||||
|
||||
IDENTITY="${id%%:*}"
|
||||
NUM0="${id##*:}"
|
||||
NUM1=$(( NUM0 + 1 ))
|
||||
NUM2=$(( NUM0 + 2 ))
|
||||
NUM3=$(( NUM0 + 3 ))
|
||||
|
||||
if [[ $HOME =~ ^/home/ ]]; then
|
||||
HOMEONSERVER="+ <bookmark href=\"file://$NETHOME\">
|
||||
+ <title>Home@Server</title>
|
||||
+ <info>
|
||||
+ <metadata owner=\"http://freedesktop.org\">
|
||||
+ <bookmark:icon name=\"user-home-symbolic\"/>
|
||||
+ </metadata>
|
||||
+ <metadata owner=\"http://www.kde.org\">
|
||||
+ <ID>$IDENTITY/${NUM1}</ID>
|
||||
+ <isSystemItem>true</isSystemItem>
|
||||
+ </metadata>
|
||||
+ </info>
|
||||
+ </bookmark>"
|
||||
else
|
||||
HOMEONSERVER=$'+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+\n+'
|
||||
fi
|
||||
|
||||
patch="
|
||||
--- a/$file
|
||||
+++ b/$file
|
||||
@@ -98,9 +98,45 @@
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
$HOMEONSERVER
|
||||
+ <bookmark href=\"file:///srv/samba/schools/default-school/share\">
|
||||
+ <title>Tausch</title>
|
||||
+ <info>
|
||||
+ <metadata owner=\"http://freedesktop.org\">
|
||||
+ <bookmark:icon name=\"folder-publicshare\"/>
|
||||
+ </metadata>
|
||||
+ <metadata owner=\"http://www.kde.org\">
|
||||
+ <ID>$IDENTITY/${NUM2}</ID>
|
||||
+ <isSystemItem>true</isSystemItem>
|
||||
+ </metadata>
|
||||
+ </info>
|
||||
+ </bookmark>
|
||||
+ <bookmark href=\"file:///lmn/media/$USER/nextcloud\">
|
||||
+ <title>Nextcloud</title>
|
||||
+ <info>
|
||||
+ <metadata owner=\"http://freedesktop.org\">
|
||||
+ <bookmark:icon name=\"folder-cloud\"/>
|
||||
+ </metadata>
|
||||
+ <metadata owner=\"http://www.kde.org\">
|
||||
+ <ID>$IDENTITY/${NUM3}</ID>
|
||||
+ <isSystemItem>true</isSystemItem>
|
||||
+ </metadata>
|
||||
+ </info>
|
||||
+ </bookmark>
|
||||
<bookmark href=\"remote:/\">
|
||||
<title>Network</title>
|
||||
<info>
|
||||
<metadata owner=\"http://freedesktop.org\">
|
||||
<bookmark:icon name=\"folder-network\"/>
|
||||
"
|
||||
|
||||
echo "$patch" | patch -z '.lmn' --fuzz=0 --backup "$file"
|
222
roles/custom/fvs/files/lmn-reset-dolphin.sh
Executable file
222
roles/custom/fvs/files/lmn-reset-dolphin.sh
Executable file
|
@ -0,0 +1,222 @@
|
|||
#!/bin/bash
|
||||
|
||||
sed -e "s|HOME|/${HOME##/srv/samba/schools/default-school/}|g" -e "s|USER|${USER}|g" > ~/.local/share/user-places.xbel <<EOF
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE xbel>
|
||||
<xbel xmlns:mime="http://www.freedesktop.org/standards/shared-mime-info" xmlns:bookmark="http://www.freedesktop.org/standards/desktop-bookmarks" xmlns:kdepriv="http://www.kde.org/kdepriv">
|
||||
<info>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<kde_places_version>4</kde_places_version>
|
||||
<GroupState-Places-IsHidden>false</GroupState-Places-IsHidden>
|
||||
<GroupState-Remote-IsHidden>false</GroupState-Remote-IsHidden>
|
||||
<GroupState-Devices-IsHidden>false</GroupState-Devices-IsHidden>
|
||||
<GroupState-RemovableDevices-IsHidden>false</GroupState-RemovableDevices-IsHidden>
|
||||
<GroupState-Tags-IsHidden>false</GroupState-Tags-IsHidden>
|
||||
<withRecentlyUsed>true</withRecentlyUsed>
|
||||
<GroupState-RecentlySaved-IsHidden>false</GroupState-RecentlySaved-IsHidden>
|
||||
<withBaloo>true</withBaloo>
|
||||
<GroupState-SearchFor-IsHidden>false</GroupState-SearchFor-IsHidden>
|
||||
</metadata>
|
||||
</info>
|
||||
<bookmark href="file:///srv/samba/schools/default-schoolHOME">
|
||||
<title>Home</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="user-home"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/0</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<bookmark href="file:///srv/samba/schools/default-schoolHOME/Schreibtisch">
|
||||
<title>Desktop</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="user-desktop"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/1</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<bookmark href="file:///srv/samba/schools/default-schoolHOME/Dokumente">
|
||||
<title>Documents</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="folder-documents"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/2</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<bookmark href="file:///srv/samba/schools/default-schoolHOME/Downloads">
|
||||
<title>Downloads</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="folder-downloads"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/3</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<bookmark href="file:///srv/samba/schools/default-schoolHOME/Musik">
|
||||
<title>Music</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="folder-music"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/6</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<bookmark href="file:///srv/samba/schools/default-schoolHOME/Bilder">
|
||||
<title>Pictures</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="folder-pictures"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/7</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<bookmark href="file:///srv/samba/schools/default-schoolHOME/Videos">
|
||||
<title>Videos</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="folder-videos"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/8</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<bookmark href="file:///srv/samba/schools/default-school/share">
|
||||
<title>Tausch</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="folder-publicshare"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/9</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<bookmark href="file:///lmn/media/USER/nextcloud">
|
||||
<title>Nextcloud</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="folder-cloud"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/10</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<bookmark href="remote:/">
|
||||
<title>Network</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="folder-network"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/4</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<bookmark href="trash:/">
|
||||
<title>Trash</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="user-trash"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/5</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<bookmark href="recentlyused:/files">
|
||||
<title>Recent Files</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="document-open-recent"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/9</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<bookmark href="recentlyused:/locations">
|
||||
<title>Recent Locations</title>
|
||||
<info>
|
||||
<metadata owner="http://freedesktop.org">
|
||||
<bookmark:icon name="folder-open-recent"/>
|
||||
</metadata>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<ID>1682498425/10</ID>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</bookmark>
|
||||
<separator>
|
||||
<info>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<UDI>/org/kde/fstab///server/default-school/:/srv/samba/schools/default-school</UDI>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
<IsHidden>true</IsHidden>
|
||||
</metadata>
|
||||
</info>
|
||||
</separator>
|
||||
<separator>
|
||||
<info>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<UDI>/org/kde/fstab///server/default-school/:/lmn/media/USER/home</UDI>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
<IsHidden>true</IsHidden>
|
||||
</metadata>
|
||||
</info>
|
||||
</separator>
|
||||
<separator>
|
||||
<info>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<UDI>/org/kde/fstab///server/sysvol/:/srv/samba/USER/sysvol</UDI>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
<IsHidden>true</IsHidden>
|
||||
</metadata>
|
||||
</info>
|
||||
</separator>
|
||||
<separator>
|
||||
<info>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<UDI>/org/kde/fstab///server/default-school/:/lmn/media/USER/share</UDI>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
<IsHidden>true</IsHidden>
|
||||
</metadata>
|
||||
</info>
|
||||
</separator>
|
||||
<separator>
|
||||
<info>
|
||||
<metadata owner="http://www.kde.org">
|
||||
<UDI>/org/freedesktop/UDisks2/block_devices/sda2</UDI>
|
||||
<isSystemItem>true</isSystemItem>
|
||||
</metadata>
|
||||
</info>
|
||||
</separator>
|
||||
</xbel>
|
||||
EOF
|
20
roles/custom/fvs/files/lmn-sync
Normal file
20
roles/custom/fvs/files/lmn-sync
Normal file
|
@ -0,0 +1,20 @@
|
|||
#!/usr/bin/bash
|
||||
#
|
||||
# Synchronize local program directory and desktop starters
|
||||
#
|
||||
set -eu
|
||||
|
||||
if ! nslookup server; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
#[[ -d /usr/local/lmn ]] || mkdir -p /usr/local/lmn
|
||||
#rsync -rlptD --chown=pgmadmin:root --chmod=F755,D755 rsync://server:/local-program/ /usr/local/lmn
|
||||
|
||||
RSYNC_COMMAND=$(rsync -ai --delete --exclude=mimeinfo.cache \
|
||||
--chown=root:root --chmod=F644,D755 "rsync://server:/desktopstarter" \
|
||||
/usr/local/share/applications/ | sed '/ \.\//d')
|
||||
if [[ $? -eq 0 ]] && [[ -n "${RSYNC_COMMAND}" ]]; then
|
||||
echo "${RSYNC_COMMAND}"
|
||||
update-desktop-database /usr/local/share/applications
|
||||
fi
|
6
roles/custom/fvs/files/lmn-sync.service
Normal file
6
roles/custom/fvs/files/lmn-sync.service
Normal file
|
@ -0,0 +1,6 @@
|
|||
[Unit]
|
||||
Description=Synchronize program data and desktop starters
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/local/sbin/lmn-sync
|
9
roles/custom/fvs/files/lmn-sync.timer
Normal file
9
roles/custom/fvs/files/lmn-sync.timer
Normal file
|
@ -0,0 +1,9 @@
|
|||
[Unit]
|
||||
Description=Run lmn-sync after boot
|
||||
After=network-online.target
|
||||
|
||||
[Timer]
|
||||
OnBootSec=0min
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
90
roles/custom/fvs/files/policies.json
Normal file
90
roles/custom/fvs/files/policies.json
Normal file
|
@ -0,0 +1,90 @@
|
|||
{
|
||||
"policies": {
|
||||
"Proxy": {
|
||||
"Mode": "autoDetect"
|
||||
},
|
||||
"OverrideFirstRunPage": "https://www.steinbeisschule-reutlingen.de",
|
||||
"Homepage": {
|
||||
"URL": "https://www.steinbeisschule-reutlingen.de",
|
||||
"Locked": false,
|
||||
"StartPage": "previous-session"
|
||||
},
|
||||
"DisplayBookmarksToolbar": true,
|
||||
"ManagedBookmarks": [
|
||||
{
|
||||
"toplevel_name": "FvS-Reutlingen"
|
||||
},
|
||||
{
|
||||
"url": "https://www.steinbeisschule-reutlingen.de",
|
||||
"name": "FvS-Homepage"
|
||||
},
|
||||
{
|
||||
"url": "https://idam.steinbeis.schule/realms/fvs/account/#/security/signingin",
|
||||
"name": "Authentifizierung/Passwort"
|
||||
},
|
||||
{
|
||||
"url": "https://mail.steinbeis.schule",
|
||||
"name": "FvS-eMail"
|
||||
},
|
||||
{
|
||||
"url": "https://dw.steinbeis.schule",
|
||||
"name": "FvS-Hilfesystem"
|
||||
},
|
||||
{
|
||||
"url": "https://moodle.steinbeis.schule",
|
||||
"name": "FvS-Moodle"
|
||||
},
|
||||
{
|
||||
"url": "https://nc.steinbeis.schule",
|
||||
"name": "FvS-Nextcloud"
|
||||
},
|
||||
{
|
||||
"url": "https://server.pn.steinbeis.schule",
|
||||
"name": "Schulkonsole"
|
||||
},
|
||||
{
|
||||
"url": "https://peleus.webuntis.com/WebUntis/?school=Ferd.von+Steinbeis#/basic/login",
|
||||
"name": "FvS-Stundenplan"
|
||||
},
|
||||
{
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
48
roles/custom/fvs/files/pwroff
Executable file
48
roles/custom/fvs/files/pwroff
Executable file
|
@ -0,0 +1,48 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# logout idle users and shutdown machine
|
||||
#
|
||||
set -eu
|
||||
|
||||
action="systemctl poweroff"
|
||||
uptime=$(cat /proc/uptime | cut -f1 -d.)
|
||||
maxidle=3600 ## seconds
|
||||
|
||||
u=($(loginctl list-users --no-legend | sort -hr | head -1))
|
||||
una=${u[1]:-''}
|
||||
uid=${u[0]:-''}
|
||||
|
||||
talk2dbus() {
|
||||
local display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)"
|
||||
sudo -u $una DISPLAY=$display \
|
||||
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus "$@"
|
||||
}
|
||||
|
||||
########
|
||||
|
||||
## shutdown if nobody is loged in:
|
||||
if [[ -z "$una" ]] || [[ $uid -lt 1000 ]] ; then
|
||||
exec $action
|
||||
fi
|
||||
|
||||
# FIXME: find idle time independent of running screensaver
|
||||
if ! t=$(talk2dbus qdbus org.kde.screensaver /ScreenSaver GetActiveTime) ; then
|
||||
echo "No graphical logins found."
|
||||
else
|
||||
idle=$(( t / 1000 ))
|
||||
if [[ $idle -gt $maxidle ]] && [[ ! -d "/srv/samba/schools/default-school/teachers/" ]] ; then
|
||||
talk2dbus notify-send -i system-shutdown -u critical -a 'Important System Information' \
|
||||
'Please log out, the system will shut down soon!' \
|
||||
'There has been no activity for too long.'
|
||||
## shutdown:
|
||||
#talk2dbus qdbus org.kde.ksmserver /KSMServer logout 1 2 0
|
||||
## logout:
|
||||
talk2dbus qdbus org.kde.ksmserver /KSMServer logout 1 0 0 || \
|
||||
loginctl terminate-user $una
|
||||
echo "Log-out user $una after being idle for $idle seconds."
|
||||
else
|
||||
echo "The user $una has been idle for $idle seconds."
|
||||
fi
|
||||
fi
|
||||
|
||||
#w -s | grep tty | sed "s/[[:space:]]\+/ /g" | cut -f4 -d ' '
|
6
roles/custom/fvs/files/pwroff.service
Normal file
6
roles/custom/fvs/files/pwroff.service
Normal file
|
@ -0,0 +1,6 @@
|
|||
[Unit]
|
||||
Description=Run pwroff script
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/local/sbin/pwroff
|
9
roles/custom/fvs/files/pwroff.timer
Normal file
9
roles/custom/fvs/files/pwroff.timer
Normal file
|
@ -0,0 +1,9 @@
|
|||
[Unit]
|
||||
Description=Run pwroff script every 15 min after 90 min uptime
|
||||
|
||||
[Timer]
|
||||
OnBootSec=90min
|
||||
OnUnitActiveSec=15min
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
33
roles/custom/fvs/files/reporter
Executable file
33
roles/custom/fvs/files/reporter
Executable file
|
@ -0,0 +1,33 @@
|
|||
#!/usr/bin/bash
|
||||
#
|
||||
# Send stdout of some commands to monitoring server.
|
||||
# Collect the reports with 'nc -u -k -l 1234' on 'sendto'.
|
||||
# Use /bin/nc.openbsd, /bin/nc.traditional seems not to work.
|
||||
#
|
||||
set -eu
|
||||
|
||||
sendto="collector.steinbeis.schule 1234"
|
||||
n=0
|
||||
|
||||
cmds=(
|
||||
'uname -a'
|
||||
'tail -1 /var/local/ansible-stamps'
|
||||
'ip route list default'
|
||||
'ip link show | \
|
||||
sed -nE -e "s/^[2-9]: (\S+): .+/\1/p" -e "s/.+ether ([0-9a-f:]+) .+/\1/p" | \
|
||||
paste - -'
|
||||
)
|
||||
# 'w'
|
||||
# 'uptime'
|
||||
# 'ls -d --full-time /home/ansible/.ansible/tmp/'
|
||||
# 'ip addr show'
|
||||
# 'apt list --upgradeable -o Apt::Cmd::Disable-Script-Warning=true'
|
||||
|
||||
r="$HOSTNAME ------- $(date --rfc-3339=seconds) -------
|
||||
$(for c in "${cmds[@]}" ; do
|
||||
n=$(( n + 1 ))
|
||||
echo -n "$n"
|
||||
eval "$c" | sed 's/^/\t/'
|
||||
done | sed "s/^/$HOSTNAME /")
|
||||
## -------------------------------------------------"
|
||||
echo "$r" | nc -w 1 -u $sendto
|
6
roles/custom/fvs/files/reporter.service
Normal file
6
roles/custom/fvs/files/reporter.service
Normal file
|
@ -0,0 +1,6 @@
|
|||
[Unit]
|
||||
Description=Run reporting script
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/local/sbin/reporter
|
9
roles/custom/fvs/files/reporter.timer
Normal file
9
roles/custom/fvs/files/reporter.timer
Normal file
|
@ -0,0 +1,9 @@
|
|||
[Unit]
|
||||
Description=Run reporter script every 15 min
|
||||
|
||||
[Timer]
|
||||
OnBootSec=5min
|
||||
OnUnitActiveSec=15min
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
7
roles/custom/fvs/handlers/main.yml
Normal file
7
roles/custom/fvs/handlers/main.yml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
- name: Run update-desktop-database
|
||||
ansible.builtin.command: update-desktop-database "{{ item }}"
|
||||
loop:
|
||||
- /usr/local/share/applications
|
||||
- /usr/local/share/desktop-directories
|
||||
- /etc/xdg/menus/applications-merged
|
336
roles/custom/fvs/tasks/main.yml
Normal file
336
roles/custom/fvs/tasks/main.yml
Normal file
|
@ -0,0 +1,336 @@
|
|||
---
|
||||
- name: Preseed wireshark to allow users sniffing packets
|
||||
ansible.builtin.debconf:
|
||||
name: wireshark-common
|
||||
question: wireshark-common/install-setuid
|
||||
value: 'true'
|
||||
vtype: boolean
|
||||
|
||||
- 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: Install desktop EDU packages and some more
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- atftp
|
||||
- audacity
|
||||
- biber
|
||||
- calligraplan
|
||||
- cmake ## for kdevelop
|
||||
- codelite
|
||||
- codelite-plugins
|
||||
- curl
|
||||
- elpa-color-theme-modern
|
||||
- elpa-magit
|
||||
- emacs
|
||||
- filezilla
|
||||
- freeplane
|
||||
- git
|
||||
- git-cola
|
||||
- gitg
|
||||
- gitk
|
||||
- git-gui
|
||||
- htop
|
||||
- jq
|
||||
- jupyter
|
||||
- kchmviewer
|
||||
- kdevelop
|
||||
- kdevelop-php
|
||||
- kdevelop-python
|
||||
- krita
|
||||
- libasound2-dev
|
||||
- libdbus-glib-1-2 ## needed for zotero
|
||||
- libnotify-bin ## needed for pwroff script
|
||||
- libwayland-dev
|
||||
- libxcursor-dev
|
||||
- libxi-dev
|
||||
- libxinerama-dev
|
||||
- libxkbcommon-dev
|
||||
- libxrandr-dev
|
||||
- links2
|
||||
- minder
|
||||
- mosquitto-clients
|
||||
- neovim
|
||||
- net-tools
|
||||
- netcat-openbsd
|
||||
- nmap
|
||||
- okular-extra-backends ## needed for CHM files
|
||||
- pdf-presenter-console
|
||||
- php-cli
|
||||
- pipx
|
||||
- planner
|
||||
- pulseview
|
||||
- python3-paho-mqtt
|
||||
- python3-websockets
|
||||
- qpdfview
|
||||
- shellcheck
|
||||
- sigrok
|
||||
- sigrok-cli
|
||||
- texlive-lang-german
|
||||
- texlive-latex-recommended
|
||||
- texlive-xetex
|
||||
- texstudio
|
||||
- tmux
|
||||
- tree
|
||||
- ttf-mscorefonts-installer
|
||||
- twinkle
|
||||
- unison-gtk
|
||||
- w3m
|
||||
- wireshark
|
||||
- zulucrypt-gui
|
||||
autoremove: true
|
||||
state: latest
|
||||
environment:
|
||||
http_proxy: '' # this is needed to avoid ttf-mscorefonts-installer picking up aptcacher
|
||||
|
||||
- name: Remove update notifications from plasma-discover
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- plasma-discover
|
||||
autoremove: true
|
||||
state: absent
|
||||
when: "'teacherlaptop' not in group_names"
|
||||
|
||||
- name: Make sure wireshark works for all users after installation and upgrades
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/apt/apt.conf.d/92wireshark4all
|
||||
mode: '0644'
|
||||
content: |
|
||||
## Modify permissions after installation/upgrade to allow all
|
||||
## users dumping packages on network interfaces for wireshark
|
||||
DPkg::Post-Invoke {"/usr/bin/chmod o+x /usr/bin/dumpcap || true"; };
|
||||
|
||||
|
||||
- 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: policies.json
|
||||
dest: /etc/firefox-esr/policies/
|
||||
mode: '0644'
|
||||
|
||||
- name: Create chromium policies directory
|
||||
ansible.builtin.file:
|
||||
path: /etc/chromium/policies/managed
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: Set chromium proxy-policy to auto_detect
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/chromium/policies/managed/proxy.json
|
||||
mode: '0644'
|
||||
content: |
|
||||
{
|
||||
"ProxyMode": "auto_detect"
|
||||
}
|
||||
|
||||
- name: Update all packages unattended
|
||||
ansible.builtin.replace:
|
||||
path: /etc/apt/apt.conf.d/50unattended-upgrades
|
||||
regexp: '^//(\s+"origin=.+-updates";)$'
|
||||
replace: ' \1'
|
||||
|
||||
- name: Copy some scripts
|
||||
ansible.builtin.copy:
|
||||
src: "{{ item }}"
|
||||
dest: /usr/local/sbin/
|
||||
mode: '0755'
|
||||
loop:
|
||||
- pwroff
|
||||
- bootorder.sh
|
||||
- reporter
|
||||
|
||||
- name: Provide services and timers for some scripts
|
||||
ansible.builtin.copy:
|
||||
src: "{{ item }}"
|
||||
dest: "/etc/systemd/system/{{ item }}"
|
||||
mode: '0644'
|
||||
loop:
|
||||
- pwroff.service
|
||||
- pwroff.timer
|
||||
- reporter.service
|
||||
- reporter.timer
|
||||
when: "'teacherlaptop' not in group_names"
|
||||
|
||||
- name: Enable pwroff.timer
|
||||
ansible.builtin.systemd:
|
||||
name: "{{ item }}"
|
||||
enabled: true
|
||||
loop:
|
||||
- pwroff.timer
|
||||
- reporter.timer
|
||||
when: "'teacherlaptop' not in group_names"
|
||||
|
||||
- name: PXE first boot order
|
||||
ansible.builtin.command: /usr/local/sbin/bootorder.sh
|
||||
register: cmd_result
|
||||
changed_when: cmd_result.stdout is not search('Nothing to do.')
|
||||
when: "'PCroom' in group_names"
|
||||
|
||||
- name: Copy dolphin config scripts
|
||||
ansible.builtin.copy:
|
||||
src: "{{ item }}"
|
||||
dest: /usr/local/bin/
|
||||
mode: '0755'
|
||||
loop:
|
||||
- lmn-reset-dolphin.sh
|
||||
- lmn-patch-dolphin.sh
|
||||
- lmn-fixhome-dolphin.sh
|
||||
|
||||
- name: Configure KDE dolphin menu
|
||||
ansible.builtin.copy:
|
||||
src: lmn-dolphin.sh
|
||||
dest: /etc/profile.d/
|
||||
mode: '0644'
|
||||
|
||||
|
||||
- name: Copy fvs-config.js to configure plasma
|
||||
ansible.builtin.copy:
|
||||
src: fvs-config.js
|
||||
dest: /usr/share/plasma/shells/org.kde.plasma.desktop/contents/updates/fvs-config.js
|
||||
mode: '0644'
|
||||
|
||||
|
||||
- name: Configure some KDE aspects
|
||||
ansible.builtin.blockinfile:
|
||||
path: /etc/xdg/kdeglobals
|
||||
create: true
|
||||
mode: '0644'
|
||||
block: |
|
||||
[KDE]
|
||||
SingleClick=false
|
||||
|
||||
[KDE Action Restrictions][$i]
|
||||
action/start_new_session=false
|
||||
#action/switch_user=false
|
||||
#action/lock_screen=false
|
||||
|
||||
- name: Shut down when idle for too long
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/xdg/powermanagementprofilesrc
|
||||
mode: '0644'
|
||||
content: |
|
||||
[AC][SuspendSession]
|
||||
idleTime=7200000
|
||||
suspendType=8
|
||||
when: "'teacherlaptop' not in group_names"
|
||||
|
||||
- name: Start with empty session by default
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/xdg/ksmserverrc
|
||||
mode: '0644'
|
||||
content: |
|
||||
[General]
|
||||
loginMode=emptySession
|
||||
|
||||
- name: Fix primary screen for class room PCs with projector
|
||||
when: "'CloneScreen' in group_names"
|
||||
block:
|
||||
- name: Set primary screen for login
|
||||
ansible.builtin.blockinfile:
|
||||
path: /usr/share/sddm/scripts/Xsetup
|
||||
block: |
|
||||
xrandr --output {{ dual_screen[0] }} --primary
|
||||
when: dual_screen is defined
|
||||
- name: Reset primary screen for login
|
||||
ansible.builtin.blockinfile:
|
||||
path: /usr/share/sddm/scripts/Xsetup
|
||||
state: absent
|
||||
when: dual_screen is not defined
|
||||
- name: Deploy fix-screen script
|
||||
ansible.builtin.template:
|
||||
src: lmn-fix-screen.j2
|
||||
dest: /usr/local/bin/lmn-fix-screen
|
||||
mode: '0755'
|
||||
- name: Deploy fix-screen autostarter
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/xdg/autostart/lmn-fix-screen.desktop
|
||||
mode: '0644'
|
||||
content: |
|
||||
[Desktop Entry]
|
||||
Name=fix-screen
|
||||
Exec=lmn-fix-screen
|
||||
Type=Application
|
||||
NoDisplay=true
|
||||
|
||||
# - name: Avoid starting kscreen (confusing autodetection)
|
||||
# ansible.builtin.copy:
|
||||
# dest: /etc/xdg/kded5rc
|
||||
# content: |
|
||||
# [Module-kscreen]
|
||||
# autoload=false
|
||||
#
|
||||
# - name: Disable automatic lock screen and user specific modifications
|
||||
# ansible.builtin.copy:
|
||||
# path: /etc/xdg/kscreenlockerrc
|
||||
# content: |
|
||||
# [Daemon][$i]
|
||||
# Autolock=false
|
||||
# LockOnResume=false
|
||||
#
|
||||
|
||||
- name: Download libdvdcss from mirror
|
||||
ansible.builtin.get_url:
|
||||
url: "{{ mirror_dvdcss }}/libdvdcss.so.2.2.0"
|
||||
dest: /usr/lib/x86_64-linux-gnu/libdvdcss.so.2.2.0
|
||||
mode: '0644'
|
||||
use_proxy: false
|
||||
when: mirror_dvdcss is defined and mirror_dvdcss | length > 0
|
||||
|
||||
- name: Link library so name
|
||||
ansible.builtin.file:
|
||||
src: libdvdcss.so.2.2.0
|
||||
dest: /usr/lib/x86_64-linux-gnu/libdvdcss.so.2
|
||||
state: link
|
||||
when: mirror_dvdcss is defined and mirror_dvdcss | length > 0
|
||||
|
||||
- name: Patch sddm login screen to show hostname
|
||||
ansible.builtin.blockinfile:
|
||||
path: /usr/share/sddm/themes/debian-breeze/Main.qml
|
||||
marker: // {mark} ANSIBLE MANAGED BLOCK
|
||||
insertbefore: '\s+//Footer'
|
||||
block: |
|
||||
Text {
|
||||
id: hostname
|
||||
anchors.top: parent.top
|
||||
anchors.right: parent.right
|
||||
anchors.topMargin: 10
|
||||
anchors.rightMargin: 15
|
||||
color: "#ffffff"
|
||||
text: sddm.hostName + " | <{{ ansible_date_time['date'] }}>"
|
||||
font.pointSize: config.fontSize
|
||||
}
|
||||
|
||||
- name: Set git default-branch to main
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/gitconfig
|
||||
mode: '0644'
|
||||
content: |
|
||||
[init]
|
||||
defaultBranch = main
|
||||
|
||||
- name: Adjust mmcblk-device gid to allow users to access SD-cards
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/udev/rules.d/80-mmcblk.rules
|
||||
mode: '0644'
|
||||
content: |
|
||||
KERNEL=="mmcblk[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", GROUP="domain users"
|
||||
KERNEL=="mmcblk[0-9]p[0-9]*", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", GROUP="domain users"
|
||||
|
||||
- name: Include sync
|
||||
ansible.builtin.include_tasks: sync.yml
|
58
roles/custom/fvs/tasks/sync.yml
Normal file
58
roles/custom/fvs/tasks/sync.yml
Normal file
|
@ -0,0 +1,58 @@
|
|||
---
|
||||
- name: Create directory for local .desktop-Files
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
loop:
|
||||
- /usr/local/share/applications
|
||||
- /usr/local/share/desktop-directories
|
||||
notify: Run update-desktop-database
|
||||
|
||||
- name: Copy fvs.directory
|
||||
ansible.builtin.copy:
|
||||
src: fvs.directory
|
||||
dest: /usr/local/share/desktop-directories/
|
||||
mode: '0644'
|
||||
notify: Run update-desktop-database
|
||||
|
||||
- name: Copy fvs.menu
|
||||
ansible.builtin.copy:
|
||||
src: fvs.menu
|
||||
dest: /etc/xdg/menus/applications-merged/
|
||||
mode: '0644'
|
||||
notify: Run update-desktop-database
|
||||
|
||||
- name: Copy lmn-sync script
|
||||
ansible.builtin.copy:
|
||||
src: lmn-sync
|
||||
dest: /usr/local/sbin/
|
||||
mode: '0755'
|
||||
register: lmn_sync
|
||||
|
||||
- name: Run lmn-sync script
|
||||
ansible.builtin.shell: /usr/local/sbin/lmn-sync
|
||||
when: lmn_sync.changed # noqa: no-handler
|
||||
|
||||
- name: Deploy sudo configurations (lmn-sync for role-teacher)
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/sudoers.d/90-lmn-sync
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0700'
|
||||
content: |
|
||||
%role-teacher ALL=(root) NOPASSWD: /usr/local/sbin/lmn-sync
|
||||
|
||||
- name: Provide lmn-sync service and timer
|
||||
ansible.builtin.copy:
|
||||
src: "{{ item }}"
|
||||
dest: "/etc/systemd/system/{{ item }}"
|
||||
mode: '0644'
|
||||
loop:
|
||||
- lmn-sync.service
|
||||
- lmn-sync.timer
|
||||
|
||||
- name: Enable lmn-sync.timer
|
||||
ansible.builtin.systemd:
|
||||
name: lmn-sync.timer
|
||||
enabled: true
|
29
roles/custom/fvs/templates/lmn-fix-screen.j2
Normal file
29
roles/custom/fvs/templates/lmn-fix-screen.j2
Normal file
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/bash
|
||||
#
|
||||
# Set the primary screen after login
|
||||
# Clone screen on all displays
|
||||
# Set audio-default-sink
|
||||
#
|
||||
set -eu
|
||||
|
||||
if [[ "$XDG_SESSION_TYPE" = wayland ]] ; then
|
||||
while ! kscreen-doctor -o; do
|
||||
sleep 1
|
||||
done
|
||||
sleep 2
|
||||
{% if dual_screen is defined %}
|
||||
kscreen-doctor output.{{ dual_screen[1] }}.priority.1
|
||||
{% endif %}
|
||||
for N in $(kscreen-doctor -j | jq -r .outputs[].name) ; do
|
||||
kscreen-doctor output.$N.mode.{{ clonescreen_mode }} output.$N.position.0,0 output.$N.scale.$(kscreen-doctor -j | jq .outputs[].scale | sort | head -1);
|
||||
done
|
||||
fi
|
||||
{% if audio_output is defined %}
|
||||
pactl set-card-profile alsa_card.{{ audio_output[0] }} output:{{ audio_output[1] }}
|
||||
pactl set-default-sink alsa_output.{{ audio_output[0] }}.{{ audio_output[1] }}
|
||||
{% else %}
|
||||
if pactl list cards | grep output:hdmi-stereo: | grep verfügbar:\ ja; then
|
||||
pactl set-card-profile $(pactl list short cards | grep -m1 pci | head -1 | cut -f2) output:hdmi-stereo
|
||||
pactl set-default-sink $(pactl list short cards | grep -m1 pci | head -1 | cut -f2 | sed s/card/output/g).output:hdmi-stereo
|
||||
fi
|
||||
{% endif %}
|
Loading…
Add table
Add a link
Reference in a new issue