#!/bin/bash
# =============================================================================
# setup-numlock-kde.sh (v2 — corrixido para autologin)
# Activa o teclado numérico en KDE Plasma (Debian 12) para todos os usuarios
# actuais e futuros, incluÃndo configuracións con autologin.
#
# Uso: sudo bash setup-numlock-kde.sh
# =============================================================================
set -euo pipefail
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
log() { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[AVISO]${NC} $*"; }
err() { echo -e "${RED}[ERRO]${NC} $*"; exit 1; }
[[ $EUID -ne 0 ]] && err "Este script debe executarse como root (sudo)."
# =============================================================================
# FUNCIÓN PRINCIPAL: aplica todos os ficheiros necesarios a un home dado
# KDE usa DOUS ficheiros para o NumLock:
# - ~/.config/kwinrc → NumLock=1 (KWin, xestor de ventás)
# - ~/.config/kcminputrc → NumLock=1 (KCM Input, módulo de teclado)
# Ambos deben estar en 1. Se só está nun, o outro pode gañar.
# =============================================================================
configure_user_home() {
local homedir="$1"
local username="$2"
mkdir -p "$homedir/.config"
for conf in kwinrc kcminputrc; do
local cfgfile="$homedir/.config/$conf"
if [[ -f "$cfgfile" ]]; then
if grep -q "^NumLock=" "$cfgfile"; then
sed -i 's/^NumLock=.*/NumLock=1/' "$cfgfile"
elif grep -q '^\[Keyboard\]' "$cfgfile"; then
sed -i '/^\[Keyboard\]/a NumLock=1' "$cfgfile"
else
printf '\n[Keyboard]\nNumLock=1\n' >> "$cfgfile"
fi
else
printf '[Keyboard]\nNumLock=1\n' > "$cfgfile"
fi
chown "$username":"$username" "$cfgfile" 2>/dev/null || true
done
log " $username: kwinrc + kcminputrc configurados con NumLock=1"
}
# =============================================================================
# 1. APLICAR A TODOS OS USUARIOS EXISTENTES
# =============================================================================
log "Aplicando configuración aos usuarios existentes..."
while IFS=: read -r username _ uid _ _ homedir _; do
[[ "$uid" -lt 1000 || "$uid" -eq 65534 ]] && continue
[[ ! -d "$homedir" ]] && { warn " $username: home '$homedir' non existe. Saltando."; continue; }
configure_user_home "$homedir" "$username"
done < /etc/passwd
# =============================================================================
# 2. CONFIGURAR SKEL PARA USUARIOS FUTUROS
# =============================================================================
log "Configurando /etc/skel para usuarios futuros..."
mkdir -p /etc/skel/.config
for conf in kwinrc kcminputrc; do
cat > /etc/skel/.config/$conf <<'EOF'
[Keyboard]
NumLock=1
EOF
done
log " /etc/skel/.config/kwinrc e kcminputrc creados."
# =============================================================================
# 3. INSTALAR numlockx + SERVIZO SYSTEMD
# Activa o NumLock a nivel de hardware ANTES de que KDE cargue.
# É o método máis fiable con autologin.
# =============================================================================
log "Instalando numlockx..."
if ! command -v numlockx &>/dev/null; then
apt-get install -y numlockx 2>/dev/null || warn " Non se puido instalar numlockx."
fi
if command -v numlockx &>/dev/null; then
cat > /etc/systemd/system/numlock.service <<'EOF'
[Unit]
Description=Activar NumLock ao arrancar
After=multi-user.target
[Service]
ExecStart=/usr/bin/numlockx on
RemainAfterExit=yes
Type=oneshot
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable numlock.service
log " Servizo numlock.service instalado e activado."
else
warn " numlockx non dispoñible. Continuando sen servizo systemd."
fi
# =============================================================================
# 4. AUTOSTART XDG (dentro da sesión KDE) — rede de seguridade para autologin
# =============================================================================
log "Instalando autostart de KDE..."
AUTOSTART_GLOBAL="/etc/xdg/autostart"
mkdir -p "$AUTOSTART_GLOBAL"
cat > "$AUTOSTART_GLOBAL/numlock-enable.desktop" <<'EOF'
[Desktop Entry]
Type=Application
Name=Activar NumLock
Exec=numlockx on
Hidden=false
NoDisplay=true
X-GNOME-Autostart-enabled=true
X-KDE-autostart-after=panel
EOF
# Copiar a cada usuario existente e ao skel
mkdir -p /etc/skel/.config/autostart
cp "$AUTOSTART_GLOBAL/numlock-enable.desktop" /etc/skel/.config/autostart/
while IFS=: read -r username _ uid _ _ homedir _; do
[[ "$uid" -lt 1000 || "$uid" -eq 65534 ]] && continue
[[ ! -d "$homedir" ]] && continue
mkdir -p "$homedir/.config/autostart"
cp "$AUTOSTART_GLOBAL/numlock-enable.desktop" "$homedir/.config/autostart/"
chown -R "$username":"$username" "$homedir/.config/autostart"
done < /etc/passwd
log " Autostart instalado globalmente, en skel e en todos os usuarios."
# =============================================================================
# 5. HOOK PARA NOVOS USUARIOS
# =============================================================================
cat > /usr/local/sbin/numlock-kde-hook.sh <<'HOOK'
#!/bin/bash
# Uso: sudo numlock-kde-hook.sh <usuario>
NEW_USER="${1:-}"
[[ -z "$NEW_USER" ]] && exit 0
HOME_DIR=$(getent passwd "$NEW_USER" | cut -d: -f6)
[[ -z "$HOME_DIR" || ! -d "$HOME_DIR" ]] && exit 0
mkdir -p "$HOME_DIR/.config" "$HOME_DIR/.config/autostart"
for conf in kwinrc kcminputrc; do
cfgfile="$HOME_DIR/.config/$conf"
if [[ -f "$cfgfile" ]] && grep -q "^NumLock=" "$cfgfile"; then
sed -i 's/^NumLock=.*/NumLock=1/' "$cfgfile"
elif [[ -f "$cfgfile" ]] && grep -q '^\[Keyboard\]' "$cfgfile"; then
sed -i '/^\[Keyboard\]/a NumLock=1' "$cfgfile"
elif [[ -f "$cfgfile" ]]; then
printf '\n[Keyboard]\nNumLock=1\n' >> "$cfgfile"
else
printf '[Keyboard]\nNumLock=1\n' > "$cfgfile"
fi
chown "$NEW_USER":"$NEW_USER" "$cfgfile"
done
cp /etc/xdg/autostart/numlock-enable.desktop "$HOME_DIR/.config/autostart/"
chown -R "$NEW_USER":"$NEW_USER" "$HOME_DIR/.config/autostart"
HOOK
chmod +x /usr/local/sbin/numlock-kde-hook.sh
log " Hook instalado en /usr/local/sbin/numlock-kde-hook.sh"
# =============================================================================
# RESUMO
# =============================================================================
echo ""
echo -e "${GREEN}============================================================${NC}"
echo -e "${GREEN} Configuración v2 completada${NC}"
echo -e "${GREEN}============================================================${NC}"
echo ""
echo " Cambios aplicados:"
echo " • kwinrc + kcminputrc con NumLock=1 en todos os usuarios e skel"
echo " • numlockx instalado + servizo systemd activado antes do login"
echo " • numlock-enable.desktop en autostart global, skel e cada usuario"
echo ""
echo " Reinicia para comprobar: sudo reboot"
echo ""
echo " Se persiste o problema tras reiniciar, executa:"
echo " grep NumLock ~/.config/kwinrc ~/.config/kcminputrc"
echo ""