# 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