Redshiftのバグ に悩まされた後、素晴らしい代替品 Iris。 を見つけました
Iris
フォルダをhome
ディレクトリに配置し、次のコマンドをスタートアップアプリケーションに追加しましたsh /home/arun/Iris/Iris.sh
。
これはすべてうまく機能しますが、起動時に設定GUIウィンドウも起動します。本当に必要なのは、小さなパネルインジケータアイコンだけです。 OS Xの「ログイン項目」の「非表示」機能のようなものです。
これは達成できますか?
アイリスの設定ウィンドウをX
で閉じると、一見閉じられます。
同じことをすると、wmctrl
(wmctrl -ic <window_id>
)の助けを借りて、windowが閉じているだけでなく、アプリケーション全体が閉じていることがわかります。
私の結論は、ウィンドウが実際にはclosedではなく、X
を押したときにnmappedであるということです。
xdotool
を使用して同じことを行うことができます。この回答の編集バージョン: 起動時にプログラムを実行するにはどうすればよいですか? 設定ウィンドウを表示せずにIris
を起動できます。
スクリプトはwmctrl
とxdotool
の両方を使用します:
Sudo apt-get install wmctrl xdotool
以下のスクリプトを空のファイルにコピーし、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
元のコマンドの代わりに次のコマンドを実行して、Iris
を開始します。
python3 /path/to/start_iris.py
設定ウィンドウは表示されなくなります!
Iris.sh
のits ownディレクトリを検索して起動します。WM_CLASS
Iris
(設定ウィンドウ)の新しいウィンドウの作成を監視します。ターゲットのウィンドウが見つかった場合は、nmapsxdotool
コマンドを使用したウィンドウ:
xdotool windowunmap <window_id>
もちろん、設定ウィンドウのX
をクリックしてもウィンドウのマッピングが解除されます。
明らかにこれはxdotool
とは異なる方法で行われます。その結果、Iris
を再起動しないと、(インジケーターメニューから)設定ウィンドウにアクセスできません。
ただし、通常は設定ウィンドウまったくは必要ありません。
Startup APplicationsからGUIアプリケーションを起動する場合(特に、画面設定が関係する場合)は、正常に機能するように少しブレークを組み込む必要があることに注意してください。スタートアップアプリケーションから機能しない場合は、コマンドを次のようにStratupアプリケーションに追加するように変更します。
/bin/bash -c "sleep 10 && python3 /path/to/start_iris.py"