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 서버에는 사용자 정의 전역 데이터를 위한 공간이 없지만 언제든지 변경할 수 있는 사용자 정의 전역 구성을 위한 공간이 있습니다. 이는 여기에서 우리의 목적에 충분히 가깝습니다.XResources. 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:)

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

답변2

fortune다른 zsh 쉘이 실행되고 있지 않은 경우에만 시작됩니다.

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

관련 정보