Use X11 greeter for Linux RustDesk access
This commit is contained in:
@@ -47,7 +47,7 @@ de sesión de GDM también debe permanecer deshabilitado.
|
||||
8. Registra `lightdm` y `cinnamon-screensaver` como inicios interactivos ante las políticas GPO de SSSD. En equipos con LightDM oculta la lista de cuentas y conserva únicamente el ingreso manual: usuario y contraseña, necesario para el primer acceso de un usuario del dominio.
|
||||
9. Con `--enable-hyperv-enhanced-session`, configura XRDP sobre Hyper-V sockets para que VMConnect pueda usar **Sesión mejorada**, repara certificados incompletos, registra `xrdp-sesman` en el mismo mapa interactivo y valida ambos servicios XRDP.
|
||||
10. Instala el fondo azul, las fuentes Indivisa y un autoinicio compatible con Cinnamon, GNOME y XFCE. En cada sesión gráfica genera el saludo con el nombre del usuario y la ubicación/OU del equipo obtenidas de AD.
|
||||
11. Instala RustDesk 1.4.9 desde el paquete oficial comprobado, configura exclusivamente el servidor institucional y crea una contraseña aleatoria de acceso desatendido. La contraseña no se muestra en Linux: viaja cifrada con la clave pública del controlador y éste la conserva mediante su inventario protegido.
|
||||
11. Instala RustDesk 1.4.9 desde el paquete oficial comprobado, configura exclusivamente el servidor institucional y crea una contraseña aleatoria de acceso desatendido. También fuerza el greeter de GDM o SDDM a usar X11, porque RustDesk no admite controlar la pantalla de acceso bajo Wayland; LightDM ya usa X11. La contraseña no se muestra en Linux: viaja cifrada con la clave pública del controlador y éste la conserva mediante su inventario protegido. Si el enrolador cambia el backend gráfico, reinicia el equipo al finalizar para activarlo.
|
||||
|
||||
El objeto de equipo aparece como `NOMBRE` en `OU=Laboratorio`. SSSD registra su registro A cuando la actualización DNS dinámica está activada.
|
||||
|
||||
|
||||
@@ -218,6 +218,89 @@ EOF
|
||||
wait_for_rustdesk_server
|
||||
}
|
||||
|
||||
configure_x11_login_screen() {
|
||||
local display_manager=''
|
||||
local configuration_changed=false
|
||||
local configuration_path=''
|
||||
local temporary_configuration=''
|
||||
|
||||
if [[ -L /etc/systemd/system/display-manager.service ]]; then
|
||||
display_manager=$(basename "$(readlink -f /etc/systemd/system/display-manager.service)")
|
||||
fi
|
||||
|
||||
case "$display_manager" in
|
||||
gdm3.service|gdm.service)
|
||||
if [[ $display_manager == gdm3.service ]]; then
|
||||
configuration_path='/etc/gdm3/custom.conf'
|
||||
else
|
||||
configuration_path='/etc/gdm/custom.conf'
|
||||
fi
|
||||
install -d -o root -g root -m 755 "$(dirname "$configuration_path")"
|
||||
[[ -f $configuration_path ]] || printf '[daemon]\n' >"$configuration_path"
|
||||
temporary_configuration=$(mktemp)
|
||||
python3 - "$configuration_path" "$temporary_configuration" <<'PY'
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
source = Path(sys.argv[1])
|
||||
destination = Path(sys.argv[2])
|
||||
lines = source.read_text(encoding='utf-8').splitlines()
|
||||
daemon_start = None
|
||||
daemon_end = len(lines)
|
||||
for index, line in enumerate(lines):
|
||||
if re.match(r'^\s*\[daemon\]\s*$', line, re.IGNORECASE):
|
||||
daemon_start = index
|
||||
continue
|
||||
if daemon_start is not None and index > daemon_start and re.match(r'^\s*\[[^]]+\]\s*$', line):
|
||||
daemon_end = index
|
||||
break
|
||||
|
||||
if daemon_start is None:
|
||||
if lines and lines[-1]:
|
||||
lines.append('')
|
||||
lines.extend(['[daemon]', 'WaylandEnable=false'])
|
||||
else:
|
||||
setting = re.compile(r'^\s*[#;]?\s*WaylandEnable\s*=.*$', re.IGNORECASE)
|
||||
for index in range(daemon_start + 1, daemon_end):
|
||||
if setting.match(lines[index]):
|
||||
lines[index] = 'WaylandEnable=false'
|
||||
break
|
||||
else:
|
||||
lines.insert(daemon_end, 'WaylandEnable=false')
|
||||
|
||||
destination.write_text('\n'.join(lines) + '\n', encoding='utf-8')
|
||||
PY
|
||||
if ! cmp -s "$temporary_configuration" "$configuration_path"; then
|
||||
install -o root -g root -m 644 "$temporary_configuration" "$configuration_path"
|
||||
configuration_changed=true
|
||||
fi
|
||||
rm -f "$temporary_configuration"
|
||||
;;
|
||||
sddm.service)
|
||||
configuration_path='/etc/sddm.conf.d/91-sgu-rustdesk-x11.conf'
|
||||
install -d -o root -g root -m 755 "$(dirname "$configuration_path")"
|
||||
temporary_configuration=$(mktemp)
|
||||
printf '%s\n' '[General]' 'DisplayServer=x11' >"$temporary_configuration"
|
||||
if ! cmp -s "$temporary_configuration" "$configuration_path"; then
|
||||
install -o root -g root -m 644 "$temporary_configuration" "$configuration_path"
|
||||
configuration_changed=true
|
||||
fi
|
||||
rm -f "$temporary_configuration"
|
||||
;;
|
||||
lightdm.service)
|
||||
# LightDM's greeter already runs on X11, which RustDesk supports.
|
||||
;;
|
||||
*)
|
||||
printf 'WARNING: Could not identify a supported display manager; RustDesk login-screen access may require X11 configuration.\n' >&2
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ $configuration_changed == true ]]; then
|
||||
printf 'RustDesk login-screen support was configured for X11; reboot after enrollment to activate it.\n'
|
||||
fi
|
||||
}
|
||||
|
||||
wait_for_rustdesk_server() {
|
||||
local attempt
|
||||
local candidate_id
|
||||
@@ -326,6 +409,7 @@ resolve_registration_share
|
||||
initialize_machine_kerberos
|
||||
install_rustdesk
|
||||
read_server_configuration
|
||||
configure_x11_login_screen
|
||||
configure_rustdesk
|
||||
set_access_password
|
||||
register_with_controller
|
||||
|
||||
Reference in New Issue
Block a user