Verwenden Sie einen Änderungsschlüssel, um die Dateizuordnung zu ändern

567
pouzzler

Wenn Sie einen Film auf einem Laptop ansehen, sollte er den Bildschirm geschickt deaktivieren:

  • Wenn kein externer Bildschirm angeschlossen ist, deaktivieren Sie ihn nicht.
  • Deaktivieren Sie nicht, wenn Sie eine Modifizierungstaste zum Öffnen des Films verwenden.
  • Wenn ein externer Bildschirm angeschlossen ist und kein Modifikator verwendet wird, deaktivieren Sie den Laptopbildschirm.
  • Wenn der Media Player beendet ist, stellen Sie den Laptop-Bildschirm wieder her.

Ich habe folgendes 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 steht für den Laptopbildschirm, VGA1 für den externen Bildschirm. Das Skript wird verwendet, um Filmdateien ~/.local/share/applications/mimeapps.listmit der folgenden Desktopdatei zu verknüpfen :

[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 Desktop-Datei zu ändern, oder eine andere Möglichkeit, nach einem Modifiziererschlüssel zu suchen - die einzige Einschränkung besteht darin, dass zum Öffnen des Films eine einzige Aktion verwendet werden muss.

2

1 Antwort auf die Frage

2
Rudolf Mühlbauer

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 -lX11beispielsweise mit

make LDLIBS="-lX11" getmodkey 

Der Exit-Statuscode des Programms wäre, 0wenn die Shift-Taste gedrückt wurde, 1andernfalls. Um einen anderen Modifikator zu testen, passen Sie die (r.mods & keymask)Bedingung an (die Maske für Shift ist 1).

Dann sollte dieses Programm einfach zu integrieren sein.

if getmodkey; then  echo "shift!" else echo "no shift" fi 
Ich werde es mir später heute ansehen, aber ich wollte mich in der Zwischenzeit bei Ihnen bedanken. pouzzler vor 11 Jahren 0