Используйте ключ-модификатор для изменения ассоциации файлов
При просмотре фильма на ноутбуке он должен хитро отключить свой экран:
- Если внешний экран не подключен, не отключайте.
- Если для открытия фильма используется ключ-модификатор, не отключайте его.
- Если внешний экран подключен и модификатор не используется, отключите экран ноутбука.
- Когда медиаплеер выйдет, восстановите экран ноутбука.
Я написал следующий скрипт:
#!/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
Можете ли вы предложить способ изменения сценария или файла рабочего стола или любой другой способ проверки наличия ключа-модификатора - единственное ограничение заключается в том, что для открытия фильма нужно использовать одно действие.
1 ответ
Кажется, нет готового решения. Тем не менее, нетрудно использовать 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