GTK 애플리케이션(예: Firefox)이 완전히 로드되어 최대화할 준비가 되었는지 확인하는 가장 쉬운 방법

GTK 애플리케이션(예: Firefox)이 완전히 로드되어 최대화할 준비가 되었는지 확인하는 가장 쉬운 방법

Linux 키오스크에서는 "뒤에서"(화면 보호기가 화면을 비우는 경우) 일부 응용 프로그램의 상태를 재설정하기 위해 다음을 포함하는 BASH 스크립트를 사용합니다.제어판, Firefox 창을 최대화하는 작업을 담당합니다.

"wmctrl"은 먼저 "창 ID"를 찾기 위해 창 관리자(내 경우에는 XFWM)에 (비동기?) 메시지를 보냅니다.

FF_WID=$(wmctrl -l | grep ' - Mozilla Firefox' | cut -d ' ' -f1)

그런 다음 전체 화면으로 최대화합니다.

wmctrl -ir $FF_WID -b add,fullscreen

문제는 Firefox 창이 어떤 방식으로든 "완전히 로드되지 않은" 경우(즉, 창 관리자가 이미 창 ID를 할당했지만 아마도 완료 중이기 때문에) 후자의 호출이 자동으로 실패한다는 것입니다("세부 정보"를 사용하더라도). 스위치) 위젯을 그리시겠습니까? - 또한 필요한 작업을 수행할 수 없습니다(최대화).

sleep N해결 방법: 기본적으로 최대화 명령 앞에 임의의 지연을 추가하는 경우 다음을 수행하십시오.

그러나 두 가지 단점이 있습니다. 각 컴퓨터에는 서로 다른 지연이 필요합니다. 또한 지연이 너무 길면 데스크톱이 비어 있어도 분명한 순간에 표시되므로 사용자에게는 우아하지 않습니다.

(너무) 짧은 지연으로 인해 프로세스(Firefox)가 생성되었지만 WM의 "창 ID"가 아직 할당되지 않은 순간이 있는 것 같습니다. 가능한 더 나은 해결책은 다음과 같습니다.

while FF_WID=$(wmctrl -l | grep ' - Mozilla Firefox' | cut -d ' ' -f1) ; do
    true
done    
wmctrl -ir $FF_WID -b add,fullscreen

하지만 안타깝게도 "창 ID"만으로는 충분하지 않습니다. 이는 최대화 요청을 어느 정도 차단하는 보류 중인 GTK 이벤트가 있기 때문일 수 있습니다.


Firefox를 다른 GTK 애플리케이션(예: "xfce4-terminal")으로 교체해도 동일한 동작을 관찰할 수 있습니다.


또 다른 해결 방법 - 그러나 이것은 Firefox 측에서만 작동하지만 일반적인 솔루션을 찾고 있습니다 - 응용 프로그램 측에서 로깅을 활성화하고 로딩 단계 동안 이벤트를 모니터링하여 "응용 프로그램 준비" 등을 찾는 것일 수 있습니다. 이를 위해 Firefox 로깅 도구(NSPR_LOG_MODULES)를 사용하여 몇 가지 실험을 수행하겠습니다.

또 다른 부분적인 해결 방법으로 키오스크(전체 화면) 모드에서 몇 가지 Firefox 추가 기능을 시도했지만 UI 사용자 정의 측면에서 약간 다른 동작이 필요(및 구현)했습니다.

말할 필요도 없이, -fullscreen다른 곳에 문서화된 Firefox 스위치는 Linux 버전에서 작동하지 않습니다.


독서로이것은 또 다른 질문입니다, 그리고 많은 실험을 통해 스위치를 사용하거나 사용하지 않고 (이름 또는 정수 형식으로) -i호출할 때 "wmctrl"이 발생할 수 있는 다양한 동작과 관련된 문제를 배제하는 경향이 있습니다.


이 문제에 대해 Google에서 많이 검색했지만 보편적이고 "너무 지저분하지 않은" 해결책을 찾지 못했습니다.

답변: 불완전한 GTK 대기열 소진으로 인해 문제가 발생하는 것이 실제로 가능합니까?

두번째:(A가 참인 경우)위에서 설명한 대로 대기열이 소진되는 지점으로 지연을 제한하는 BASH 스크립트 기술이 있습니까?

  • Python이나 PERL 바인딩 등 GTK 엔진과 상호작용하는 방법이 여러 가지 있다는 것을 알고 있습니다.
  • GTK와 BASH 스크립트 간의 상호 작용에 적합한 "gtk-server"도 있습니다.
  • BASH 스크립트에서 직접 공유 라이브러리(GTK, 모든 공유 라이브러리 포함)를 호출하기 위해 BASH 플러그인으로 작업할 수 있는 FFI 인터페이스(ctypes.sh)도 있습니다.

물론, 이상적인 솔루션은 가능한 가장 수평적인 것(Firefox뿐만 아니라 모든 GTK 애플리케이션에 대해)이며 가능한 가장 작은 숫자가 필요합니다.프로그램 | 버전 의존적 해킹 |설치 및 유지 관리...

(매우 긴) 읽어주셔서 정말 감사합니다. 좋은 하루 보내세요

관련 정보