修飾キーを使用してファイルの関連付けを変更する


2

ノートパソコンで映画を見るときは、画面を巧みに無効にする必要があります。

  • 外部画面が接続されていない場合は、無効にしないでください。
  • 修飾キーを使用してムービーを開く場合は、無効にしないでください。
  • 外部画面が接続されていて、修飾子が使用されていない場合は、ラップトップ画面を無効にします。
  • メディアプレーヤーが終了したら、ラップトップ画面を復元します。

次のスクリプトを作成しました。

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

市販のソリューションはないようです。ただし、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

プログラムの終了ステータスコードは、0Shiftキーが押された1場合になります。別の修飾子をテストするには、(r.mods & keymask)条件を調整します(Shiftのマスクは1です)。

次に、このプログラムは簡単に統合できるはずです。

if getmodkey; then 
  echo "shift!"
else
  echo "no shift"
fi

今日は後で見ていきますが、その間に感謝したいと思います。
pouzzler
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.