수정자 키를 사용하여 파일 연결 수정

수정자 키를 사용하여 파일 연결 수정

노트북에서 영화를 볼 때 화면을 교묘하게 비활성화해야 합니다.

  • 외부 화면이 연결되어 있지 않으면 비활성화하지 마십시오.
  • 수정자 키를 사용하여 영화를 여는 경우 비활성화하지 마십시오.
  • 외부 화면이 연결되어 있고 수정자를 사용하지 않는 경우 노트북 화면을 비활성화합니다.
  • 미디어 플레이어가 종료되면 노트북 화면을 복원합니다.

나는 다음 스크립트를 작성했습니다.

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

프로그램의 종료 상태 코드는 0Shift 키를 누른 경우이고, 1그렇지 않은 경우입니다. 다른 수정자를 테스트하려면 (r.mods & keymask)조건을 조정하십시오(Shift의 마스크는 1임).

그러면 이 프로그램은 통합하기 쉬워야 합니다.

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

관련 정보