Al mirar una película en una computadora portátil, debería desactivar inteligentemente su pantalla:
- Si no hay ninguna pantalla externa conectada, no la desactive.
- Si se utiliza una tecla modificadora para abrir la película, no la desactive.
- Si se conecta una pantalla externa y no se utiliza ningún modificador, desactive la pantalla del portátil.
- Cuando se cierre el reproductor multimedia, restaure la pantalla de la computadora portátil.
He escrito el siguiente script:
#!/bin/bash
if [ "$(cat /sys/class/drm/card0-VGA-1/status)" = connected ]
then
xrandr --output eDP1 --off
vlc "$1"
while [ "$(pidof vlc)" > 0 ]
do
sleep 1
done
xrandr --output eDP1 --auto --below VGA1
else
vlc "$1"
fi
eDP1 representa la pantalla del portátil, VGA1 la pantalla externa. El script se utiliza asociando archivos de película ~/.local/share/applications/mimeapps.list
con el siguiente archivo de escritorio:
[Desktop Entry]
Name=VLC
Comment=
Exec=path/to/the/above/script
Icon=vlc
Terminal=false
Type=Application
StartupNotify=true
¿Puede sugerir una forma de modificar el script o el archivo del escritorio, o cualquier otra forma de buscar una tecla modificadora? La única restricción es que se debe utilizar una sola acción para abrir la película.
Respuesta1
No parece haber una solución estándar. Sin embargo, no es difícil utilizar Xlib y Xkb directamente.
Crea un archivo getmodkey.c
:
#include <X11/Xlib.h>
#include <stdio.h>
#include <X11/XKBlib.h>
int main() {
XkbStateRec r;
Display* d = XOpenDisplay(NULL);
XkbGetState(d, XkbUseCoreKbd, &r);
printf("mod: 0x%x\n", r.mods);
XCloseDisplay(d);
return !( r.mods & 1 );
}
y compilarlo con -lX11
, por ejemplo
make LDLIBS="-lX11" getmodkey
El código de estado de salida del programa sería 0
si se presionara la tecla Shift; 1
de lo contrario. Para probar un modificador diferente, ajuste la (r.mods & keymask)
condición (la máscara para Shift es 1).
Entonces, este programa debería ser fácil de integrar,
if getmodkey; then
echo "shift!"
else
echo "no shift"
fi