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