훌륭한 질문입니다.
원인
일반적으로 Unity Launcher에서 GUI 애플리케이션을 시작할 때 Launcher는 창이 나타날 때까지 기다립니다. 기다리는 동안 "방적 휠"이 표시됩니다. 그러나 영원히 기다리지는 않을 것입니다. 약 20 초 후에 런처는 창이 나타나지 않고 대기를 포기한다고 가정합니다.
1. 응용 프로그램 실행기의 주요 명령
A의 .desktop
파일, 첫 번째와 직결 Exec=
선을 (주 명령)을 할 수 있습니다 말해 줄에, 기다리거나하지 런처를 :
StartupNotify=true
기다리게하거나
StartupNotify=false
그것을 만들 수 없습니다 기다립니다.
2. 런처의 퀵리스트 항목
그러나 실행기의 빠른 목록 (오른쪽 클릭) 항목의 경우 기본값은 StartupNotify=true
입니다. 불행히도이 값은 고정되어 있으며 어떤 것도 변경할 수 없습니다.
당신이 시작하면 그 말은 어떤 유니티 런처에서 실행 아이콘을 마우스 오른쪽 버튼으로 클릭에서 명령을 실행 프로그램은 물레를 보여, 그것을 위해 창을 대기를 기대하고있다.
결론은 설명 할 수 있지만 현재 문제에 대한 해결책은없는 것 같습니다. 다른 방법은 스크립트 전용 실행기를 작성 StartupNotify=false
하고 파일에 줄 을 추가하는 것 입니다.
증거
직접 행동을 테스트 할 수 있습니다. 두 발사기를 만듭니다.
[Desktop Entry]
Name=Test
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
Type=Application
StartupNotify=true
과:
[Desktop Entry]
Name=Test
Exec=sh /home/myusername/Documents/xdotool_sh/minimize.sh firefox
Type=Application
StartupNotify=false
그들을 저장 test1.desktop
하고 test2.desktop
, 유니티 런처에 모두에 발사기를 끕니다. 그들을 클릭하고 행동의 차이점을 참조하십시오.
편집하다; 그것이 정말로 당신을 귀찮게한다면, Unity에게 가짜 창을 먹이십시오.
당신이 경우 많은 퀵리스트에서 스크립트 및 / 또는 정말 당신을 귀찮게 다른 화장품 해결책이; 우리는 가짜 , 보이지 않는 (완전히 투명한) 창을 표시하여 스크립트에 포함시킬 수 있습니다. 그러면 스크립트는 (예)
#/bin/bash
name=$1
for i in $(xdotool search --class "$name"); do
xdotool windowminimize $i
done
fake_window
여기서 명령 fake_window
은 (가짜) 창을 호출하여 Unity가 물레를 종료시킵니다.
설정 방법
- 존재하지 않는 경우 디렉토리를 작성하십시오.
~/bin
아래 스크립트를 빈 파일로 복사하고 fake_window
(확장자 없음) 으로 저장 한 ~/bin
후 실행 파일로 만드십시오
#!/usr/bin/env python3
from gi.repository import Gtk
from threading import Thread
import time
import subprocess
"""
This is a self-destroying window, to "feed" Unity a fake-window, preventing
the launcher to show a spinning wheel, waiting for a window to appear.
Include the command to run this script at the end of the (your) script.
"""
class FakeWin(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="1526closeme")
Thread(target = self.close).start()
def close(self):
t = 0
while t < 150:
time.sleep(0.2)
try:
pid = subprocess.check_output(["pgrep", "-f", "fake_window"])\
.decode("utf-8").strip()
subprocess.Popen(["kill", pid])
break
except subprocess.CalledProcessError:
pass
t += 1
def fakewindow():
window = FakeWin()
# make our window transparent
window.set_opacity(0)
window.set_default_size(0,0)
window.show_all()
Gtk.main()
fakewindow()
스크립트의 맨 끝에 다음 명령을 추가하십시오.
fake_window
로그 아웃했다가 다시 (또는 실행source ~/.profile
)
이제 스크립트가 실행되는 동안 휠이 회전합니다.
설명
스크립트 는 최소한의 창을 만듭니다. 그러나 창은 완전히 투명하며 크기는 0x0 픽셀이므로 보이지 않습니다. 일단 존재하면 즉시 파괴됩니다.
스크립트가 끝날 때 창을 호출하면 바퀴가 돌아 가지 않도록 창에 대한 Unity의 희망을 충족시킵니다.