使用修饰键修改文件关联

使用修饰键修改文件关联

在笔记本电脑上观看电影时,它应该巧妙地禁用其屏幕:

  • 如果没有插入外部屏幕,请不要禁用。
  • 如果使用修饰键打开电影,请不要禁用。
  • 如果插入了外接屏幕并且未使用修改器,则禁用笔记本电脑屏幕。
  • 当媒体播放器退出时,恢复笔记本电脑屏幕。

我写了以下脚本:

#!/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

相关内容