The kernel memory killer's "Memory Shortage Avoided" notice carried a Configure button that ran kcmshell6 and opened KDE's whole Notifications settings under the teacher's account. Reproduced in the lab. Plasma draws that button without consulting the Kiosk policy, but kcmshell6 and System Settings do: every settings module Debian 13's Plasma 6.3 installs (90) is now refused in the classroom's immutable kdeglobals, so the same click shows only "disabled by the system administrator". The clock's Configure Digital Clock goes with plasma/allow_configure_when_locked=false; Configure Audio Devices disappears on its own; the disabled window's Help button opened KDE Help Center, which the package now conflicts with (plasma-desktop only recommends it). The maintenance terminal runs outside the classroom's configuration and still opens every module, verified. converged-check fails if any module on a machine is ever left unrestricted: 126 passed in the lab. Co-Authored-By: Claude Opus 5.5 <[email protected]>
229 lines
7.9 KiB
Plaintext
229 lines
7.9 KiB
Plaintext
# Ekklesia Classroom session policy.
|
|
#
|
|
# Installed to /etc/xdg/kdeglobals, where it is the bottom of Plasma's
|
|
# configuration cascade. Every group is marked [$i] — immutable — so a
|
|
# teacher, a stray click or a misbehaving application cannot override it
|
|
# from the user's own configuration. This is KDE's own Kiosk mechanism:
|
|
# nothing here is achieved by deleting a binary or hiding a menu entry.
|
|
#
|
|
# Lifting a restriction for maintenance is a one-line edit to this file
|
|
# followed by a session restart, which is what makes the appliance
|
|
# serviceable rather than merely locked.
|
|
|
|
[KDE Action Restrictions][$i]
|
|
# No way to reach a shell, a command line, or an arbitrary program.
|
|
action/kdesktop_rmb=false
|
|
action/kwin_rmb=false
|
|
action/openwith=false
|
|
action/switch_user=false
|
|
action/start_new_session=false
|
|
action/lock_screen=false
|
|
run_command=false
|
|
shell_access=false
|
|
logout=false
|
|
# The desktop and the panel are a fixed part of the appliance.
|
|
editable_desktop_icons=false
|
|
editable_bookmarks=false
|
|
movable_toolbars=false
|
|
plasma/plasmashell/unlockedDesktop=false
|
|
# A locked panel still offered "Configure Digital Clock…" on the clock's
|
|
# right-click menu — measured on Plasma 6.3. This is Plasma's own key for
|
|
# "no widget settings while the desktop is locked", and with it that entry
|
|
# is gone. (The clock's "Adjust Date and Time…" stays, and opens a System
|
|
# Settings with nothing in it: every module is restricted below.)
|
|
plasma/allow_configure_when_locked=false
|
|
plasma-desktop/scripting_console=false
|
|
# Nothing in the classroom should offer to file a bug or open a manual.
|
|
action/help_report_bug=false
|
|
action/help_about_kde=false
|
|
action/help_contents=false
|
|
|
|
# The network applet reads this one before it draws its own settings
|
|
# button and its "Configure Network Connections…" entry — see
|
|
# main.qml, which calls
|
|
# KAuthorized.authorizeControlModule("kcm_networkmanagement").
|
|
#
|
|
# This is only the first of two layers, and on its own it would be
|
|
# security theatre. The applet ALSO puts "Show Network's QR Code" and
|
|
# "Configure…" on every saved wireless connection as contextual actions,
|
|
# and neither of those consults this key — measured on Plasma 6.3. The QR
|
|
# code contains the pre-shared key. What actually refuses them is the
|
|
# polkit rule in org.ekklesia.classroom.network.rules, which answers at
|
|
# NetworkManager rather than in a menu. This key is here so that a teacher
|
|
# is not shown doors that will not open.
|
|
[KDE Control Module Restrictions][$i]
|
|
kcm_networkmanagement=false
|
|
#
|
|
# AND EVERY OTHER SETTINGS MODULE. A notification's Configure button —
|
|
# measured on Plasma 6.3, from the "Memory Shortage Avoided" notice the
|
|
# kernel's memory killer raised — runs `kcmshell6 notifications`, which
|
|
# opened KDE's whole notification settings under the teacher's account:
|
|
# every application and system service, with Apply. The notification
|
|
# applet draws that button without asking this group; kcmshell6 and
|
|
# System Settings do ask it, and with the module listed here the same
|
|
# click opens only "The module kcm_notifications is disabled ... by the
|
|
# system administrator". Measured.
|
|
#
|
|
# KDE has no wildcard for this, so the list is every module installed by
|
|
# Debian 13's Plasma 6.3, as found on the lab machine. A teacher has a use
|
|
# for none of them. tools/lab/converged-check fails if a module is ever
|
|
# installed that is not listed here, so a Plasma update cannot quietly
|
|
# reopen a door.
|
|
#
|
|
# The maintenance terminal is untouched: it runs with
|
|
# XDG_CONFIG_DIRS=/etc/xdg, outside this file, so System Settings started
|
|
# from it is the whole of System Settings.
|
|
kcm_about-distro=false
|
|
kcm_access=false
|
|
kcm_activities=false
|
|
kcm_audio_information=false
|
|
kcm_autostart=false
|
|
kcm_baloofile=false
|
|
kcm_block_devices=false
|
|
kcm_bluetooth=false
|
|
kcm_bolt=false
|
|
kcm_clock=false
|
|
kcm_colors=false
|
|
kcm_componentchooser=false
|
|
kcm_cpu=false
|
|
kcm_cursortheme=false
|
|
kcm_desktoppaths=false
|
|
kcm_desktoptheme=false
|
|
kcm_device_automounter=false
|
|
kcm_disks=false
|
|
kcm_edid=false
|
|
kcm_egl=false
|
|
kcm_energyinfo=false
|
|
kcm_feedback=false
|
|
kcm_filetypes=false
|
|
kcm_firewall=false
|
|
kcm_firmware_security=false
|
|
kcm_fontinst=false
|
|
kcm_fonts=false
|
|
kcm_gamecontroller=false
|
|
kcm_glx=false
|
|
kcm_icons=false
|
|
kcm_interrupts=false
|
|
kcm_kded=false
|
|
kcm_keyboard=false
|
|
kcm_keys=false
|
|
kcm_kgamma=false
|
|
kcm_krunner_kill=false
|
|
kcm_krunnersettings=false
|
|
kcm_kscreen=false
|
|
kcm_kwallet5=false
|
|
kcm_kwin_effects=false
|
|
kcm_kwin_scripts=false
|
|
kcm_kwin_virtualdesktops=false
|
|
kcm_kwindecoration=false
|
|
kcm_kwinoptions=false
|
|
kcm_kwinrules=false
|
|
kcm_kwinscreenedges=false
|
|
kcm_kwinsupportinfo=false
|
|
kcm_kwintabbox=false
|
|
kcm_kwintouchscreen=false
|
|
kcm_kwinxwayland=false
|
|
kcm_landingpage=false
|
|
kcm_lookandfeel=false
|
|
kcm_memory=false
|
|
kcm_mouse=false
|
|
kcm_netpref=false
|
|
kcm_network=false
|
|
kcm_nightlight=false
|
|
kcm_notifications=false
|
|
kcm_opencl=false
|
|
kcm_pci=false
|
|
kcm_plasmasearch=false
|
|
kcm_powerdevilprofilesconfig=false
|
|
kcm_proxy=false
|
|
kcm_pulseaudio=false
|
|
kcm_qtquicksettings=false
|
|
kcm_recentFiles=false
|
|
kcm_regionandlang=false
|
|
kcm_samba=false
|
|
kcm_screenlocker=false
|
|
kcm_sddm=false
|
|
kcm_smserver=false
|
|
kcm_solid_actions=false
|
|
kcm_soundtheme=false
|
|
kcm_splashscreen=false
|
|
kcm_style=false
|
|
kcm_tablet=false
|
|
kcm_touchpad=false
|
|
kcm_touchscreen=false
|
|
kcm_usb=false
|
|
kcm_users=false
|
|
kcm_virtualkeyboard=false
|
|
kcm_vulkan=false
|
|
kcm_wallpaper=false
|
|
kcm_wayland=false
|
|
kcm_webshortcuts=false
|
|
kcm_workspace=false
|
|
kcm_xserver=false
|
|
kcmspellchecking=false
|
|
kwincompositing=false
|
|
|
|
# Not immutable. Marking this group [$i] froze the colour scheme so hard
|
|
# that `classroom-theme light` changed the running session and then lost
|
|
# the change at the next start — measured. These are defaults for a room
|
|
# that has no settings application anyway; the lock belongs on the
|
|
# restrictions above, not on the palette.
|
|
[General]
|
|
# Sized for a television, not a desk.
|
|
#
|
|
# Everything Plasma draws is measured in grid units, and a grid unit is
|
|
# the height of this font: the notification card's width, its padding,
|
|
# its icon and its buttons all come from here. There is no setting that
|
|
# makes a notification larger on its own, and the supported lever is this
|
|
# one — which is also the reason it is used rather than a replacement
|
|
# notification plasmoid.
|
|
#
|
|
# Measured at 100% in the lab: Breeze's 10 point gives a card about 350
|
|
# by 110 pixels with title text a volunteer at the back of the room
|
|
# cannot read; 15 point gives about 410 by 145 with a title that carries.
|
|
# The bar does not change, because its height is fixed and the clock
|
|
# sizes itself to it.
|
|
#
|
|
# At 200% the display scale doubles all of it again, so a 4K television
|
|
# gets the same card at twice the size without a second number.
|
|
font=Noto Sans,15,-1,5,50,0,0,0,0,0
|
|
smallestReadableFont=Noto Sans,13,-1,5,50,0,0,0,0,0
|
|
menuFont=Noto Sans,15,-1,5,50,0,0,0,0,0
|
|
toolBarFont=Noto Sans,15,-1,5,50,0,0,0,0,0
|
|
ColorScheme=EkklesiaDark
|
|
AccentColor=79,179,168
|
|
# The teacher's own words are not decoration: keep text rendering plain
|
|
# and readable rather than styled.
|
|
XftAntialias=true
|
|
XftHintStyle=hintslight
|
|
XftSubPixel=rgb
|
|
|
|
[KDE]
|
|
widgetStyle=Breeze
|
|
# One key, marked immutable on its own rather than by freezing the group.
|
|
#
|
|
# This is the name plasmashell reads to decide which layout script builds a
|
|
# panel for a session that has none, so it decides whether the room comes
|
|
# up as the classroom or as stock Plasma. A migrated machine reached this
|
|
# experiment with a user profile that had been through other desktops, and
|
|
# a user's own kdeglobals sits ahead of every system directory in the
|
|
# cascade. Immutable here means no leftover profile, and no stray write by
|
|
# a settings dialog that does not exist in this room anyway, can answer
|
|
# that question differently. The palette below stays writable, because
|
|
# classroom-theme is allowed to change it.
|
|
LookAndFeelPackage[$i]=org.ekklesia.classroom.desktop
|
|
SingleClick=false
|
|
AnimationDurationFactor=0.5
|
|
|
|
[Icons]
|
|
Theme=breeze-dark
|
|
|
|
[KFileDialog Settings][$i]
|
|
Allow Expansion=false
|
|
Automatically select filename extension=true
|
|
Show Bookmarks=false
|
|
Show Full Path=false
|
|
Show Inline Previews=false
|
|
Show Speedbar=false
|
|
Sort directories first=true
|