Ao assistir a um filme em um laptop, ele deve desabilitar sua tela de maneira inteligente:
- Se nenhuma tela externa estiver conectada, não desative.
- Se uma tecla modificadora for usada para abrir o filme, não desative.
- Se uma tela externa estiver conectada e nenhum modificador for usado, desative a tela do laptop.
- Quando o media player sair, restaure a tela do laptop.
Eu escrevi o seguinte 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 a tela do laptop, VGA1 a tela externa. O script é usado associando arquivos de filme ~/.local/share/applications/mimeapps.list
ao seguinte arquivo da área de trabalho:
[Desktop Entry]
Name=VLC
Comment=
Exec=path/to/the/above/script
Icon=vlc
Terminal=false
Type=Application
StartupNotify=true
Você pode sugerir uma maneira de modificar o script ou o arquivo da área de trabalho, ou qualquer outra maneira de verificar uma chave modificadora - a única restrição é que uma única ação deve ser usada para abrir o filme.
Responder1
Parece não haver solução pronta para uso. No entanto, não é difícil usar Xlib e Xkb diretamente.
Crie um arquivo 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 );
}
e compilá-lo com -lX11
, por exemplo
make LDLIBS="-lX11" getmodkey
O código de status de saída do programa seria 0
se a tecla Shift fosse pressionada, 1
caso contrário. Para testar um modificador diferente, ajuste a (r.mods & keymask)
condição (a máscara para Shift é 1).
Então, este programa deve ser fácil de integrar,
if getmodkey; then
echo "shift!"
else
echo "no shift"
fi