使用修改鍵修改文件關聯

使用修改鍵修改文件關聯

在筆記型電腦上觀看電影時,應該巧妙地禁用其螢幕:

  • 如果沒有插入外部螢幕,請勿停用。
  • 如果使用修飾鍵開啟電影,請勿停用。
  • 如果插入外部螢幕且未使用修飾符,請停用筆記型電腦螢幕。
  • 當媒體播放器退出時,恢復筆記型電腦螢幕。

我編寫了以下腳本:

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

相關內容