Используйте ключ-модификатор для изменения ассоциации файлов

494
pouzzler

При просмотре фильма на ноутбуке он должен хитро отключить свой экран:

  • Если внешний экран не подключен, не отключайте.
  • Если для открытия фильма используется ключ-модификатор, не отключайте его.
  • Если внешний экран подключен и модификатор не используется, отключите экран ноутбука.
  • Когда медиаплеер выйдет, восстановите экран ноутбука.

Я написал следующий скрипт:

#!/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 представляет собой экран ноутбука, VGA1 - внешний экран. Сценарий используется для связывания файлов фильмов ~/.local/share/applications/mimeapps.listсо следующим файлом рабочего стола:

[Desktop Entry] Name=VLC Comment= Exec=path/to/the/above/script Icon=vlc Terminal=false Type=Application StartupNotify=true 

Можете ли вы предложить способ изменения сценария или файла рабочего стола или любой другой способ проверки наличия ключа-модификатора - единственное ограничение заключается в том, что для открытия фильма необходимо использовать одно действие.

2

1 ответ на вопрос

2
Rudolf Mühlbauer

Кажется, нет готового решения. Тем не менее, нетрудно использовать Xlib и Xkb напрямую.

Создать файл 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 ); } 

и скомпилировать его -lX11, например, с

make LDLIBS="-lX11" getmodkey 

Код состояния выхода из программы будет, 0если клавиша Shift была нажата, в 1противном случае. Чтобы проверить другой модификатор, отрегулируйте (r.mods & keymask)условие (маска для Shift равна 1).

Тогда эта программа должна легко интегрироваться,

if getmodkey; then  echo "shift!" else echo "no shift" fi 
Я посмотрю на это позже сегодня, но я хотел поблагодарить вас. pouzzler 12 лет назад 0

Похожие вопросы