Liebe Kollegen,
wir arbeiten mit Windows-Clients Linuxmuster 7.2 ohne separaten Fileserver und haben folgende Situation mit dem Klassenarbeitsmodus:
Der Kollege startet den Klassenarbeitsmodus testweise, bevor es richtig losgeht, um sich mit dem Verfahren (was nur selten benutzt wird) nochmal vertraut zu machen. Dazu nimmt er entweder einen Testschüler mit in den Kurs oder einen Schüler aus dem Kurs zum Testen.
Der Modus wird gestartet, der Testschüler meldet sich an, es wird probiert, ob das Austeilen funktioniert und Internet gesperrt ist, etc. und dann wird der Klassenarbeitsmodus wieder beendet.
Dann kommt die Klassenarbeit, alle sitzen da, der Modus wird gestartet und es klappt bei allen, außer dem Testschüler, der kann sich nicht mehr als Examensschüler anmelden.
Ab diesem Moment hilft nur das folgende Script von hier
Wiki Schuljahreswechsel
# erster Teil stammt von Tobias Heine (linuxmuster-Forum Dez2020)
cd /srv/samba/schools/default-school/examusers/
for dir in $(ls); do
student=$(echo $dir | cut -d\- -f1)
active_exam=$(sophomorix-user -iu $student |grep -i exammode)
active_exam=$(echo $active_exam | cut -d" " -f2)
if [ $active_exam == "---" ]; then
printf "%-10s%-15s%-8s%s\n" $student $active_exam Loesche $dir
rm -rf $dir
else
printf "%-10s%-15s%-8s%s\n" $student $active_exam Behalte $dir
fi
done
# jetzt alle nicht beendeten Klassenarbeiten beenden
Zeit=`date-Id`
Pfad=transfer/collected/autoend
Zeitpfad=$Pfad$Zeit
cd /srv/samba/schools/default-school/examusers/
for i in $(ls); do
echo "Beende den Klassenarbeitsmodus für:" $i
sophomorix-exam-mode --unset --subdir $Zeitpfad --participants $i
done
Danach kann man den Klassenarbeitsmodus wie gewohnt für alle wieder neu starten und alle können sich anmelden.
Der Workaround ist momentan: in /usr/lib/linuxmuster-webui/plugins/lmn_session_new/views.py in der Funktion handle_api_stop_exam() am Ende das Script wie folgt aufrufen.
p = subprocess.Popen(['sudo','/home/schuledv/clear_examdirs_workaround.sh'],stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False)
stdout, stderr = p.communicate()
if stderr: raise Exception(stderr.decode())
Damit wird nach jedem Beenden eines Klassenarbeitsmodus der Originalzustand wiederhergestellt.
Wir würden aber lieber nicht direkt im WebUI Code von @Arnaud arbeiten
Die Idee war das Skript per Sophomorix-Hook-Skript aufzurufen.
Dafür haben wir in /etc/linuxmuster/sophomorix/default-school den Ordner hooks/sophomorix-update.d/ erstellt, in welchem die Hook-Skripte für „sophomorix-update“ liegen.
Das Skript bekommt den Timestamp des „sophomorix-update“ Befehls und schaut dann in /var/log/sophomorix/userlog/user-update.log, ob der Trigger das Beenden eines
Exam-Modus war. Falls ja werden alle Exam-Dirs gelöscht.
Das aktuelle Problem ist, dass der shophomorix-exam-mode Befehl zwar in den „user-update.log“ schreibt, aber das Hook-Skript nicht auslöst.
Nach einer Analyse des Quellcodes scheint es nicht implementiert zu sein. Eine weitere Beobachtung ist, dass der Befehlt „sophomorix-user update“, zwar in den
„user-update.log“ schreibt, aber ebenfalls das Hook-Skript nicht auslöst. Die Hook-Skripte sind wirklich nur an sophomorix-add/update/kill gebunden.
Gibt es hier eine clevere Lösung, die wir übersehen?
Besten Dank für einen Hinweis,
Adrian