X 세션의 첫 번째 셸 시작 시 명령을 실행하는 방법은 무엇입니까?

X 세션의 첫 번째 셸 시작 시 명령을 실행하는 방법은 무엇입니까?

저는 Pop-OS에서 Gnome을 실행하고 있습니다! 20.04.

나는 쉘을 사용하고 terminator있습니다 zsh. fortuneX 세션에서 zsh 쉘을 처음 사용할 때만 실행하고 싶습니다 .

나는 다음과 같은 종류의 것들을 시도했습니다 .zshrc.

### count the lines of
ps -ax | grep zsh
ps -ax | grep /zsh

###
[ -z "$(pidof zsh)" ] && fortune

추신: 이 질문에 적합한 태그를 찾는 데 어려움을 겪었습니다.

답변1

"X 세션당 한 번"이라는 정확한 요구 사항을 고려할 때 현재 X 세션에서 이미 수행된 정보를 저장하는 가장 자연스러운 장소는 X 서버 상태입니다. X 서버에는 사용자 정의 전역 데이터를 위한 의도된 위치가 실제로 없지만 언제든지 변경할 수 있는 사용자 정의 전역 구성을 위한 장소가 있습니다. 이는 여기 목적에 충분히 가깝습니다.X 자원. X 자원을 조작하는 명령줄 도구는 다음과 같습니다.xrdb.

xrdb이는 기발한 일이며 X.org 구현에는 매우 오래된 버그가 있음을 주의하십시오 . 아마도 xrdb -load(문서화된 대로 이전에 로드된 모든 구성을 제거하는) 또는 xrdb -remove(예상된 것과 달리 이전에 로드한 모든 구성을 제거하는)를 사용하고 싶지 않을 것입니다 .

다음에 대한 테스트되지 않은 코드 .zshrc:

if [[ -n ${DISPLAY:+set} ]] && whence xrdb >/dev/null; then
  if xrdb -query | grep -q '^pietrodito\.session\.ran-fortune:.*true'; then
    fortune
    xrdb -merge <<<'pietrodito.session.ran-fortune: true'
  fi
fi

테스트 옵션을 설정 해제하려면 다음 안내를 따르세요.

xrdb -load <(xrdb -query | grep -v '^pietrodito\.session\.ran-fortune:)

이것은 원자적이지 않습니다. fortune거의 동시에 zsh 인스턴스를 시작하면 여러 번 실행될 수 있습니다.

답변2

이것은 fortune실행 중인 다른 zsh 쉘이 없는 경우에만 시작됩니다.

[[ "$(pidof zsh)" == *' '* ]] || fortune

관련 정보