web-dev-qa-db-ja.com

起動時に自動起動した後、プログラムのGUIを非表示にする

Redshiftのバグ に悩まされた後、素晴らしい代替品 Iris。 を見つけました

Irisフォルダをhomeディレクトリに配置し、次のコマンドをスタートアップアプリケーションに追加しましたsh /home/arun/Iris/Iris.sh

これはすべてうまく機能しますが、起動時に設定GUIウィンドウも起動します。本当に必要なのは、小さなパネルインジケータアイコンだけです。 OS Xの「ログイン項目」の「非表示」機能のようなものです。

これは達成できますか?

アイリス設定ウィンドウ

アイリスの設定ウィンドウをXで閉じると、一見閉じられます。

同じことをすると、wmctrlwmctrl -ic <window_id>)の助けを借りて、windowが閉じているだけでなく、アプリケーション全体が閉じていることがわかります。

私の結論は、ウィンドウが実際にはclosedではなく、Xを押したときにnmappedであるということです。

xdotoolを使用して同じことを行うことができます。この回答の編集バージョン: 起動時にプログラムを実行するにはどうすればよいですか? 設定ウィンドウを表示せずにIrisを起動できます。

アイリスの起動なし設定ウィンドウ(スクリプト)

  1. スクリプトはwmctrlxdotoolの両方を使用します:

    Sudo apt-get install wmctrl xdotool
    
  2. 以下のスクリプトを空のファイルにコピーし、Iris.shとしてstart_iris.pyファイルと同じディレクトリに保存します(これらは同じディレクトリにまとめられます)。

    #!/usr/bin/env python3
    import subprocess
    import time
    import sys
    import os
    
    command = os.path.dirname(sys.argv[0])+"/Iris.sh"
    subprocess.Popen(["/bin/bash", "-c", command])
    
    def get(cmd):
        return subprocess.check_output(cmd).decode("utf-8").strip()
    
    t = 0
    
    while t < 12:
        time.sleep(1)
        try:
            w_list = [l.split()[0] for l in get(["wmctrl", "-l"]).splitlines() if "Iris" in l]
            for w in w_list:
                check = [l for l in get(["xprop", "-id", w]).splitlines()\
                         if "WM_CLASS(STRING)" in l][0]
                if "Iris" in check:
                    subprocess.Popen(["xdotool", "windowunmap", w])
                    break
            break
        except (IndexError, subprocess.CalledProcessError):
            pass
        t += 1
    
  3. 元のコマンドの代わりに次のコマンドを実行して、Irisを開始します。

    python3 /path/to/start_iris.py
    

設定ウィンドウは表示されなくなります!

説明

  • スクリプトは、ファイルIris.shits ownディレクトリを検索して起動します。
  • 続いて、WM_CLASSIris(設定ウィンドウ)の新しいウィンドウの作成を監視します。
  • ターゲットのウィンドウが見つかった場合は、nmapsxdotoolコマンドを使用したウィンドウ:

    xdotool windowunmap <window_id>
    

ノート

  1. もちろん、設定ウィンドウのXをクリックしてもウィンドウのマッピングが解除されます。
    明らかにこれはxdotoolとは異なる方法で行われます。その結果、Irisを再起動しないと、(インジケーターメニューから)設定ウィンドウにアクセスできません。

    ただし、通常は設定ウィンドウまったくは必要ありません。

  2. Startup APplicationsからGUIアプリケーションを起動する場合(特に、画面設定が関係する場合)は、正常に機能するように少しブレークを組み込む必要があることに注意してください。スタートアップアプリケーションから機能しない場合は、コマンドを次のようにStratupアプリケーションに追加するように変更します。

    /bin/bash -c "sleep 10 && python3 /path/to/start_iris.py"
    
1
Jacob Vlijm