시스템 사용자 서비스는 xclip 명령을 어떻게 실행합니까?

시스템 사용자 서비스는 xclip 명령을 어떻게 실행합니까?

몇 초 사용 후 자동으로 클립보드를 지우고 싶습니다.

#!/usr/bin/env bash

LOCKFILE=/tmp/.clearclip-lock
if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then
  exit 1
fi
trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT
touch ${LOCKFILE}
echo $$ > ${LOCKFILE}

if xclip -o -selection clipboard 1>&2 2>/dev/null; then
  if watch -n 0.5 -t --chgexit xclip -o -selection clipboard @>/dev/null; then
    sleep 10
    xsel -bc
  fi
fi

rm -f ${LOCKFILE}

저는 방금 이 대략적인 실행 파일 작업을 시작했으며 ~/mypath/clearclip사용자 로컬 시스템 타이머를 사용하여 실행하고 싶습니다. 그럼에도 불구하고 서비스에서 오류가 발생합니다.Error opening terminal: unknown.

# ~/.local/share/systemd/user/clearclip.service
[Unit]
Description=clear the clipboard
ConditionFileIsExecutable=%h/_path/clearclip.sh

[Service]
Environment=DISPLAY=:0
ExecStart=%h/_path/clearclip.sh
Type=oneshot

내 주요 질문은 다음과 같습니다.

동일한 기능을 수행하지만 비대화식으로 수행하는 도구가 있습니까 watch -g? 당신의 접근 방식은 무엇입니까? 출력을 비교하거나 예상대로 복원하거나 다른 작업을 수행하기 위해 while 루프에서 tmp 파일에 출력을 쓰시겠습니까?

또 다른 질문: 듀얼 타이머 설정은 어떻게 생겼나요?

예를 들어, 타이머는 클립보드가 변경되는 시기를 확인하고 클립보드 선택을 지우는 다른 타이머를 트리거(또는 다시 시작)합니다.

2018년 7월 25일에 수정됨:

이번 주에 나는 사용자 타이머와 함께 이 스크립트를 사용하는 것을 포기했습니다. opening terminal오류를 제거하기 위해 터미널을 에뮬레이트하기 위해 zpty를 사용하고 있지만 궁극적으로 clearclip &~/.config/zsh/.zlogin.

#!/usr/bin/env zsh
# zmodload zsh/zpty

oclip=""
let count='-1'
let timeout=70

clipchanged() {
  if ! xclip -o -selection clipboard 2>/dev/null 1>&2; then
    count='-1'
    return 1
  fi
  clip="$(xclip -o -selection clipboard)"
  if [[ -z "$clip" ]] || [[ "$oclip" == "$clip" ]]; then
    return 1
  elif [[ -z "$oclip" ]]; then
    oclip="$clip"
    return 1
  else
    (( count=timeout ))
    oclip="$clip"
    return 0
  fi
}

while true; do
  if (( count > 0 )); then
    ((count--))
    # echo -n "\r\033[K$count"
  fi
  if (( count == 0 )); then
    xsel -bc
  fi
  if clipchanged; then
    (( count=timeout ))
  fi
  sleep .5
done

2020년 9월 7일에 수정됨:

제목에 적절한 질문을 추가했지만 금방 아이디어를 포기했습니다. 클립보드를 지우거나 변경 사항에 대해 조치를 취하려면 --watch다음 옵션을 사용합니다 wl-copy(1).

--watch command...
    Instead of pasting once and exiting, continuously watch the clipboard for changes, and run the specified command each time a new selection appears. The spawned process can read the clipboard contents from its standard input. This mode requires a compositor that supports the wlroots data-control protocol.

관련 정보