From 68427bdf7a8d64a873f54a0efb85893e665a43af Mon Sep 17 00:00:00 2001 From: alejandrogs73 Date: Sun, 27 Sep 2026 21:56:04 +0200 Subject: [PATCH] =?UTF-8?q?Men=C3=BA=20de=20sesi=C3=B3n,=20pantallas=20con?= =?UTF-8?q?=20autorandr=20y=20alias=20de=20ssh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - apagado (home/.local/bin, Mod+Shift+Escape): dmenu con bloquear, suspender, salir de dwm, reiniciar y apagar; los tres últimos piden confirmación. - sudoers.d/zzz pasa a sudoers.d/energia: zzz, poweroff y reboot sin argumentos y sin contraseña para wheel. - autorandr en vez de la línea fija de xrandr: pantallas en fila al arrancar y al conectar o desconectar una (regla de udev propia con el perfil virtual horizontal); postswitch pone la interna como principal y vuelve a pintar el fondo. - ~/.ssh/config con los alias server y forgejo; install.sh deja ~/.ssh en 700. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016UdJsHrbkmzhoCb6TthP2m --- README.md | 10 +++++-- home/.config/autorandr/postswitch | 6 ++++ home/.local/bin/apagado | 28 +++++++++++++++++++ home/.ssh/config | 22 +++++++++++++++ home/.xinitrc | 5 +++- install.sh | 4 ++- sistema/etc/sudoers.d/energia | 4 +++ sistema/etc/sudoers.d/zzz | 3 -- .../etc/udev/rules.d/40-monitor-hotplug.rules | 4 +++ suckless/dwm/config.h | 1 + 10 files changed, 80 insertions(+), 7 deletions(-) create mode 100755 home/.config/autorandr/postswitch create mode 100755 home/.local/bin/apagado create mode 100644 home/.ssh/config create mode 100644 sistema/etc/sudoers.d/energia delete mode 100644 sistema/etc/sudoers.d/zzz create mode 100644 sistema/etc/udev/rules.d/40-monitor-hotplug.rules diff --git a/README.md b/README.md index 096bb12..94d5429 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,7 @@ tocado. | Mod+Shift+l | Bloquear la pantalla con `slock` | | Mod+n | Volver a mostrar la última notificación (historial de dunst) | | Mod+Shift+n | Cerrar todas las notificaciones | +| Mod+Shift+Escape | Menú de sesión: bloquear, suspender, salir de dwm, reiniciar o apagar (los tres últimos piden confirmación) | | Mod+`-` / Mod+`+` | Reducir / aumentar los gaps | | Mod+Shift+`+` | Gaps a 0 | | Tecla de subir / bajar volumen | Volumen ±5% con `wpctl` (máximo 100%) | @@ -112,8 +113,13 @@ y muestran una notificación. tty no. - `.xinitrc` arranca también `gammastep` (luz cálida de 20:00 a 8:00, con transición de una hora) y `bateria` (avisa al 15 % y, en rojo, al 5 %; al - 3 % suspende con `sudo -n zzz`, permitido sin contraseña en - `sistema/etc/sudoers.d/zzz`). + 3 % suspende con `sudo -n zzz`). Suspender, apagar y reiniciar no piden + contraseña (`sistema/etc/sudoers.d/energia`). +- Pantallas: `autorandr` las pone en fila (la del portátil a la izquierda y + como principal) al arrancar y cada vez que se conecta o desconecta una + (regla de udev en `sistema/`), y vuelve a pintar el fondo. +- `~/.ssh/config` con alias: `ssh server` (10.0.0.10) y `forgejo`. Sin + claves: las da gpg-agent. - Tras 30 minutos sin tocar nada se bloquea con slock (`xss-lock`) y un minuto después se apaga la pantalla. - Memorias USB y tarjetas SD: el servicio `automontaje` (runit, como root) diff --git a/home/.config/autorandr/postswitch b/home/.config/autorandr/postswitch new file mode 100755 index 0000000..ddbf9fb --- /dev/null +++ b/home/.config/autorandr/postswitch @@ -0,0 +1,6 @@ +#!/bin/sh +# Tras cambiar de pantallas: la interna del portátil (eDP*/LVDS*) como +# principal y el fondo pintado de nuevo con la geometría nueva. +interna=$(xrandr | awk '/^(eDP|LVDS)[^ ]* connected/ { print $1; exit }') +[ -n "$interna" ] && xrandr --output "$interna" --primary +feh --no-fehbg --bg-fill "$HOME/.local/share/wallpaper.jpg" diff --git a/home/.local/bin/apagado b/home/.local/bin/apagado new file mode 100755 index 0000000..02eede4 --- /dev/null +++ b/home/.local/bin/apagado @@ -0,0 +1,28 @@ +#!/bin/sh +# Menú de apagado con dmenu (Mod+Shift+Escape en dwm). Apagar, reiniciar y +# salir de dwm piden confirmación. Suspender, apagar y reiniciar usan sudo +# sin contraseña (sistema/etc/sudoers.d/energia). + +menu() { + dmenu -i -p "$1" -fn "Fira Code:size=11" \ + -nb "#2d353b" -nf "#d3c6aa" -sb "#a7c080" -sf "#2d353b" +} + +confirmar() { + [ "$(printf 'No\nSí\n' | menu "¿$1?")" = "Sí" ] +} + +opcion=$(printf '%s\n' \ + "󰌾 Bloquear" \ + "󰤄 Suspender" \ + "󰍃 Salir de dwm" \ + "󰜉 Reiniciar" \ + "󰐥 Apagar" | menu "Sesión:") + +case $opcion in +*Bloquear) slock ;; +*Suspender) sudo -n zzz ;; +*Salir*) confirmar "Salir de dwm" && pkill -TERM -x dwm ;; +*Reiniciar) confirmar "Reiniciar" && sudo -n reboot ;; +*Apagar) confirmar "Apagar" && sudo -n poweroff ;; +esac diff --git a/home/.ssh/config b/home/.ssh/config new file mode 100644 index 0000000..f7c5259 --- /dev/null +++ b/home/.ssh/config @@ -0,0 +1,22 @@ +# Alias de mis máquinas. Aquí no hay claves: las da gpg-agent (SSH_AUTH_SOCK +# en .bashrc), así que este archivo puede ir en el repo sin problema. + +# Servidor de casa (solo desde la red local) +Host server + HostName 10.0.0.10 + User alejandro + +# Forgejo: "git clone forgejo:alejandrogs73/suckless.git" +Host forgejo + HostName ssh.alejandrogs.es + User forgejo + +Host ssh.alejandrogs.es + User forgejo + +Host github.com + User git + +Host * + # Mantener vivas las conexiones inactivas (evita cortes del router) + ServerAliveInterval 60 diff --git a/home/.xinitrc b/home/.xinitrc index 3c73f27..ea7d7bd 100644 --- a/home/.xinitrc +++ b/home/.xinitrc @@ -18,8 +18,11 @@ fi export QT_QPA_PLATFORMTHEME=qt5ct # Teclado y monitores primero; el fondo se pinta después con la geometría final. +# autorandr pone las pantallas conectadas en fila (la del portátil a la +# izquierda); al conectar o desconectar una, lo repite solo (regla de udev en +# sistema/) y vuelve a pintar el fondo (~/.config/autorandr/postswitch). setxkbmap es -xrandr --output eDP --primary --auto --output HDMI-A-0 --mode 1280x720 --rate 60.00 --right-of eDP +autorandr --change --default horizontal feh --no-fehbg --bg-fill "$HOME/.local/share/wallpaper.jpg" & pipewire & diff --git a/install.sh b/install.sh index e6f4736..9fff2fd 100755 --- a/install.sh +++ b/install.sh @@ -17,7 +17,7 @@ PAQUETES=" libXrender-devel xorgproto imlib2-devel zlib-devel libxcrypt-devel xorg xinit setxkbmap xrandr dbus elogind polkit - picom dunst libnotify feh maim xclip gammastep xss-lock + picom dunst libnotify feh maim xclip gammastep xss-lock autorandr pipewire wireplumber libspa-bluetooth alsa-pipewire rtkit pavucontrol NetworkManager bluez blueman acpid chrony tlp tlp-rdw font-firacode nerd-fonts-symbols-ttf papirus-icon-theme papirus-folders @@ -80,6 +80,8 @@ enlaces() { # Las carpetas de home/.config/user-dirs.dirs (y la de las capturas) mkdir -p "$HOME/Documents" "$HOME/Downloads" "$HOME/Images/Screenshots" + # ssh no quiere ~/.ssh accesible para otros + chmod 700 "$HOME/.ssh" } # Compila el tema GTK Everforest (verde, oscuro, paleta medium) en ~/.themes diff --git a/sistema/etc/sudoers.d/energia b/sistema/etc/sudoers.d/energia new file mode 100644 index 0000000..cc4f1fa --- /dev/null +++ b/sistema/etc/sudoers.d/energia @@ -0,0 +1,4 @@ +# Suspender, apagar y reiniciar sin contraseña para los de wheel (solo esos +# comandos y sin argumentos). Los usan el script bateria (suspender al +# agotarse) y el menú de apagado (home/.local/bin/apagado). +%wheel ALL=(root) NOPASSWD: /usr/bin/zzz "", /usr/bin/poweroff "", /usr/bin/reboot "" diff --git a/sistema/etc/sudoers.d/zzz b/sistema/etc/sudoers.d/zzz deleted file mode 100644 index f6410a6..0000000 --- a/sistema/etc/sudoers.d/zzz +++ /dev/null @@ -1,3 +0,0 @@ -# El script bateria suspende con "sudo -n zzz" cuando la batería llega al -# límite. Solo zzz sin argumentos, sin contraseña, para los de wheel. -%wheel ALL=(root) NOPASSWD: /usr/bin/zzz "" diff --git a/sistema/etc/udev/rules.d/40-monitor-hotplug.rules b/sistema/etc/udev/rules.d/40-monitor-hotplug.rules new file mode 100644 index 0000000..2e5edd7 --- /dev/null +++ b/sistema/etc/udev/rules.d/40-monitor-hotplug.rules @@ -0,0 +1,4 @@ +# Sustituye a la regla de autorandr (/usr/lib/udev/rules.d): al conectar o +# desconectar una pantalla, colocarlas todas en fila ("horizontal") en vez +# de buscar un perfil guardado llamado "default". +ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/bin/autorandr --batch --change --default horizontal" diff --git a/suckless/dwm/config.h b/suckless/dwm/config.h index 7c083c7..720799e 100644 --- a/suckless/dwm/config.h +++ b/suckless/dwm/config.h @@ -136,6 +136,7 @@ static const Key keys[] = { { MODKEY|ShiftMask, XK_l, spawn, {.v = lockcmd } }, { MODKEY, XK_n, spawn, SHCMD("dunstctl history-pop") }, { MODKEY|ShiftMask, XK_n, spawn, SHCMD("dunstctl close-all") }, + { MODKEY|ShiftMask, XK_Escape, spawn, SHCMD("apagado") }, { MODKEY, XK_b, togglebar, {0} }, { MODKEY, XK_j, focusstack, {.i = +1 } }, { MODKEY, XK_k, focusstack, {.i = -1 } },