Beim Ansehen eines Films auf einem Laptop sollte dieser seinen Bildschirm geschickt deaktivieren:
- Wenn kein externer Bildschirm angeschlossen ist, nicht deaktivieren.
- Wenn zum Öffnen des Films eine Sondertaste verwendet wird, nicht deaktivieren.
- Wenn ein externer Bildschirm angeschlossen ist und kein Modifikator verwendet wird, deaktivieren Sie den Laptop-Bildschirm.
- Wenn der Media Player beendet wird, stellen Sie den Laptop-Bildschirm wieder her.
Ich habe das folgende Skript geschrieben:
#!/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 stellt den Laptop-Bildschirm dar, VGA1 den externen Bildschirm. Das Skript wird verwendet, indem Filmdateien ~/.local/share/applications/mimeapps.list
mit der folgenden Desktop-Datei verknüpft werden:
[Desktop Entry]
Name=VLC
Comment=
Exec=path/to/the/above/script
Icon=vlc
Terminal=false
Type=Application
StartupNotify=true
Können Sie eine Möglichkeit vorschlagen, das Skript oder die Desktopdatei zu ändern, oder eine andere Möglichkeit, nach einer Modifikatortaste zu suchen? Die einzige Einschränkung besteht darin, dass zum Öffnen des Films eine einzelne Aktion verwendet werden muss.
Antwort1
Es scheint keine Standardlösung zu geben. Es ist jedoch nicht schwierig, Xlib und Xkb direkt zu verwenden.
Erstellen Sie eine Datei 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 );
}
und kompilieren Sie es mit -lX11
, zum Beispiel
make LDLIBS="-lX11" getmodkey
Der Exit-Statuscode des Programms wäre, 0
wenn die Umschalttaste gedrückt wurde, 1
andernfalls. Um auf einen anderen Modifikator zu testen, passen Sie die (r.mods & keymask)
Bedingung an (die Maske für Umschalt ist 1).
Dann sollte dieses Programm einfach zu integrieren sein,
if getmodkey; then
echo "shift!"
else
echo "no shift"
fi