Linux Mint에서 Lightshot용 PrtSc(인쇄 화면) 바로가기를 만드는 방법

Linux Mint에서 Lightshot용 PrtSc(인쇄 화면) 바로가기를 만드는 방법

저는 Linux Mint 18.3 Cinnamon 64비트를 사용합니다. 나는 xdotool그것을 설치했다.

발광로그인 이후 실행 중이므로 실행 애플리케이션 도구를 사용하여 로그인 직후 실행을 생성합니다.

env WINEPREFIX="/home/vlastimil/.lightshot" wine C:\\windows\\command\\start.exe /Unix /home/vlastimil/.lightshot/dosdevices/c:/users/Public/Start\ Menu/Programs/Lightshot/Lightshot.lnk

표적:

(Print Screen 키)를 누르고 PrtSc전체 화면 클리핑 모드로 들어갑니다(실제로 Windows의 Lightshot과 동일한 기능).


작동 방식(에서 실행 시 gnome-terminal):

xdotool key --window $(xdotool search --limit 1 --all --pid $(pgrep Lightshot) --name Lightshot) "Print"

하지만 복사해서 붙여넣으면맞춤설정 추가바로가기 대화상자:

사용자 정의 바로가기 대화상자 추가

왜 이런 일이 발생하는지, 더 중요한 것은 어떻게 작동하게 만드는지 궁금합니다.

답변1

2020년 1월 2일 업데이트됨

당신은 찾을 수 있습니다최신 개정판그리고사용 지침존재하다GitHub 페이지.


원본 게시물

그 이유는 실행할 쉘을 지정하지 않았기 때문일 수 있으므로 다음이 작동합니다.

sh -c 'xdotool key --window $(xdotool search --limit 1 --all --pid $(pgrep Lightshot) --name Lightshot) "Print"'

편집하다:

내가 이제 이에 대한 스크립트를 작성하기로 결정했다는 점은 주목할 가치가 있을 것입니다. 모든 단계를 완전히 검증합니다.

#!/bin/sh

is_number()
{
    # check if exactly one argument has been passed
    test "$#" -eq 1 || print_error_and_exit 5 "is_number(): There has not been passed exactly one argument!"

    # check if the argument is an integer
    test "$1" -eq "$1" 2>/dev/null
}

# ------------------------------------------------------------------------------

print_error_and_exit()
{
    # check if exactly two arguments have been passed
    test "$#" -eq 2 || print_error_and_exit 3 "print_error_and_exit(): There have not been passed exactly two arguments!"

    # check if the first argument is a number
    is_number "$1" || print_error_and_exit 4 "print_error_and_exit(): The argument #1 is not a number!"

    # check if we have color support
    if [ -x /usr/bin/tput ] && tput setaf 1 > /dev/null 2>&1
    then
        bold=$(tput bold)
        red=$(tput setaf 1)
        nocolor=$(tput sgr0)
        echo "$bold$red$2 Exit code = $1.$nocolor" 1>&2
    else
        echo "$2 Exit code = $1." 1>&2
    fi

    exit "$1"
}

# ------------------------------------------------------------------------------

check_for_prerequisite()
{
    # check if exactly one argument has been passed
    test "$#" -eq 1 || print_error_and_exit 2 "check_for_prerequisite(): There has not been passed exactly one argument!"

    # check if the argument is a program which is installed
    command -v "$1" > /dev/null 2>&1 || print_error_and_exit 6 "check_for_prerequisite(): I require $1 but it's not installed :-("
}

# ------------------------------------------------------------------------------

# check if no arguments have been passed to the script
test "$#" -gt 0 && print_error_and_exit 1 "$0: You have passed some unexpected argument(s) to the script!"

# ------------------------------------------------------------------------------

# check for prerequisites
check_for_prerequisite "pgrep"
check_for_prerequisite "xdotool"

# ------------------------------------------------------------------------------

# global constants
lightshot_key="Print"
lightshot_name="Lightshot"

# ------------------------------------------------------------------------------

# get the lightshot pid
lightshot_pid=$(pgrep "$lightshot_name")

# test if a pid has been successfully acquired
is_number "$lightshot_pid" || print_error_and_exit 7 "lightshot_pid: The argument is not a number!\\nLightshot is most probably not running."

# ------------------------------------------------------------------------------

# get the window id from lightshot pid
lightshot_wnd=$(xdotool search --limit 1 --all --pid "$lightshot_pid" --name "$lightshot_name")

# test if a window handler has been successfully acquired
is_number "$lightshot_wnd" || print_error_and_exit 8 "lightshot_wnd: The argument is not a number!\\nLightshot is most probably not running."

# ------------------------------------------------------------------------------

# simulate a print screen key press on the lightshot window
xdotool key --window "$lightshot_wnd" "$lightshot_key"

관련 정보