
#!/bin/sh
xfce4-terminal
zenity --info
exit
스크립트가 키보드 단축키를 통해 실행될 때 Xfce4 데스크탑에서 예상되는 동작은 다음과 같습니다.단말기창이 나타납니다. 내가 같은 것을 닫을 때만 그래야합니다제니티그러면 창이 나타납니다.
일반적으로 이것이 정확히 일어나는 일입니다. 그러나 Xfce4를 처음 열면단말기창을 열고 테마 스크립트를 명령하면(다시 키보드 단축키를 통해) 다른 터미널 창이 (예상대로) 나타나지만 동시에제니티창문. 이는 환영받지 못하는 행동입니다.
wait
나는 명령과 줄 terminal
뒤에 추가하는 것을 포함하여 많은 것을 시도했습니다 &&
.
이런 일이 발생하는 원인은 무엇이며 어떻게 해결합니까?
답변1
한번 시도해 보세요. 테스트해 보았는데 괜찮아 보입니다.
xfce4-terminal -x bash -c 'trap "zenity --info" EXIT; bash'
실행되면 새로운 xfce4 터미널이 열리고 다음 명령이 실행됩니다. 이 명령은 쉘입니다 trap
. 이는 동일한 프로세스(새로 열린 터미널)가 EXIT 신호를 수신하면 참조된 명령이 실행된다는 것을 의미합니다. 마지막으로 bash
트랩을 설정한 후 다음과 같은 프롬프트가 표시됩니다.우편 엽서. 저도 시도해 보았 -H
으나 원하는 효과를 얻지 못했습니다.
답변2
이것https://bugzilla.xfce.org/show_bug.cgi?id=14544
이건 10년 전이야https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=434863
제안:xfce4-terminal --disable-server -e "command args ..."
그리고 제가 느낀 바로는 부작용은 없는 것 같습니다.
-e 옵션 없이도 작동합니다. 내 자신의 사용법과 이전 버그 보고서의 사용법에는 -e가 필요하므로 "-e에 대한 영향"에 대해서만 이야기하지만 OP 사용법에는 -e가 포함되지 않으며 옵션으로 인해 일반 새 터미널 자체가 차단됩니다. 그리고 -e로 지정된 명령만이 아닙니다.
분명히 무슨 일이 일어나고 있는지(플래그 없이) 터미널을 직접 생성하지 않고 단지 클라이언트 역할을 하며 서버가 터미널을 생성하도록 서버에 요청을 제출한다는 것입니다. 수행하는 작업은 작은 메시지를 보내는 것뿐이고 실제 터미널은 다른 곳에서 발생하는 관련 없는 프로세스이기 때문에 즉시 종료됩니다.
서버와 클라이언트는 동일한 바이너리입니다. 서버가 아직 실행 중이 아닌 경우 그 중 하나가 시작되어 사용되며 열려 있는 터미널 창이 있는 한 존재합니다.
그러나 모든 경우에 처음 호출되었는지 여부에 관계없이 시작 프로세스는 즉시 종료됩니다.
터미널 앱을 사용하려는 다른 모든 프로그램과의 모든 기대와 상호 운용성을 깨뜨리지 않는다면 이는 반드시 나쁜 시나리오는 아닙니다.
이전 버그 보고서는 임시 파일을 생성하고, 터미널에서 텍스트 편집기를 실행하여 해당 임시 파일을 편집하고, 터미널이 종료될 때까지 차단한 후 임시 파일을 선택하여 작업을 수행할 수 있을 것으로 예상되는 애플리케이션에 관한 것이었습니다. 이후 운영 사용자가 편집했습니다. 이것은 세계의 다른 모든 것에서는 작동하지만 xfce4-terminal에서는 작동하지 않습니다. 그러나 xfce4 개발자는 사용자가 수십 번 잘못했다고 말합니다.
--disable-server 옵션은 문제를 해결하는 것처럼 보이지만 거기에서도 실제로 수행되는 작업을 유용한 방식으로 언급하지 않기 위해 많은 노력을 기울이는 것 같습니다. 사용자가 이 문제에 직면하면 옵션이 이미 존재하며 설명에서는 이것이 원하는 동작을 얻는 방법이라는 것을 전혀 암시하지 않습니다.
xfce4-terminal --help는 해당 옵션이 무엇을 하는지가 아니라 해당 옵션이 존재한다는 것만 보여줍니다.
"man xfce4-terminal"은 (오늘까지)만 말합니다:
--disable-server
Do not register with the D-BUS session message bus
무엇?