web-dev-qa-db-ja.com

ブラウザを最大化するときに、スクリプトを使用してランチャーを自動的に非表示にするにはどうすればよいですか?

Ubuntu 14.4.1 Launcherの動作を制御しようとしていました。 firefoxのようなブラウザーウィンドウを最大化するたびに、自動的に非表示にしたいです。私はこの解決策を見つけました:

#!/bin/bash

## Change value of "hide" to the command which worked for you to hide the panel
hide='gsettings set com.canonical.Unity2d.Launcher hide-mode 1;'

## Change value of "show" to the command which worked for you to show the panel when it was hidden
show='gsettings set com.canonical.Unity2d.Launcher hide-mode 0;'

## Look for the grep value, add a new browser or application name followed by "\|" eg: 'firefox\|google\|chromium'
while [ 1 ]
 do z=$(wmctrl -l -p | grep -i 'firefox\|google');
    if [ -n "$z" ]; then 
        eval $hide
    else
        eval $show
    fi;
    sleep 2;
done;

しかし、動作するには古すぎるようで、私は this を見つけました

2つのスクリプトを一緒に組み合わせようとしたので、次のようにしました。

#!/bin/bash

AUTOHIDE=$(dconf read /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode)
if [[ $AUTOHIDE -eq 1 ]]
then
     dconf write /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode 0
else
     dconf write /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode 1
fi

## Look for the grep value, add a new browser or application name followed by "\|" eg: 'firefox\|google\|chromium'
while [ 1 ]
 do z=$(wmctrl -l -p | grep -i 'firefox\|google');
    if [ -n "$z" ]; then 
        eval $hide
    else
        eval $show
    fi;
    sleep 2;
done;

しかし、スクリプトは機能しません。誰かがこのスクリプトを改良して私に機能させることができますか?

6
Misho21

アプリケーションのウィンドウが最大化されたときにランチャーを自動非表示にするスクリプトの2つのバージョンの下。スクリプトは14.04/14.10 /16.04でテストされています

違い

  • 最初のバージョンは「一般」バージョンで、anyアプリケーションのウィンドウが最大化されるたびにランチャーを自動的に非表示にします。
  • 2つ目は、ランチャーを自動的に非表示にしますが、スクリプトのヘッドセクションで具体的に定義したアプリケーションでのみです。

両方のスクリプトは、ウィンドウがアイコン化されることを認識するため、自動非表示にする理由はなく、両方のスクリプトはワークスペース固有に機能します。ランチャーは、実際に1つ以上のウィンドウが最大化されているワークスペースでのみ自動非表示に切り替わります。

Wmctrlのインストール

スクリプトはwmctrlを使用して、現在開いているウィンドウをマップします。あなたはそれをインストールする必要があるかもしれません:

Sudo apt-get install wmctrl

スクリプト


以下の両方のスクリプトは2017年3月に更新/書き直されました。


1。 「基本」バージョンは、すべてのアプリケーションの最大化されたウィンドウに作用します

#!/usr/bin/env python3
import subprocess
import time

mx = "_NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_MAXIMIZED_HORZ"
key = ["org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/",
       "launcher-hide-mode"]

def get(cmd):
    try:
        return subprocess.check_output(cmd).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

def force_get(cmd):
    # both xprop and wmctrl break once and a while, this is to retry if so
    val = None
    while not val:
        val = get(cmd)
    return val

def get_res():
    # look up screen resolution
    scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
    return [int(n) for n in scrdata[resindex].split("+")[0].split("x")]

res = get_res()
hide1 = False

while True:
    time.sleep(2)
    hide = False
    wlist = [l.split() for l in force_get(["wmctrl", "-lpG"]).splitlines()]
    # only check windows if any of the apps is running
    for w in wlist:
        xpr = force_get(["xprop", "-id", w[0]])
        if all([
            mx in xpr, not "Iconic" in xpr,
            0 <= int(w[3]) < res[0], 0 <= int(w[4]) < res[1],
            ]):
            hide = True
            break
    if hide != hide1:
        nexts = "0" if hide == False else "1"
        currset = get(["gsettings", "get", key[0], key[1]])
        if nexts != currset:
            subprocess.Popen([
            "gsettings", "set", key[0], key[1], nexts
            ])
    hide1 = hide

2。アプリケーション固有のバージョン:

#!/usr/bin/env python3
import subprocess
import time

apps = ["gnome-terminal", "firefox"]
mx = "_NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_MAXIMIZED_HORZ"
key = ["org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/",
       "launcher-hide-mode"]

def get(cmd):
    try:
        return subprocess.check_output(cmd).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

def force_get(cmd):
    # both xprop and wmctrl break once and a while, this is to retry if so
    val = None
    while not val:
        val = get(cmd)
    return val

def get_res():
    # look up screen resolution
    scrdata = get("xrandr").split(); resindex = scrdata.index("connected")+2
    return [int(n) for n in scrdata[resindex].split("+")[0].split("x")]

res = get_res()
hide1 = False

while True:
    time.sleep(2)
    hide = False
    wlist = [l.split() for l in force_get(["wmctrl", "-lpG"]).splitlines()]
    pids = [get(["pgrep", app]) for app in apps]
    # only check windows if any of the apps is running
    if any(pids):
        for w in wlist:
            xpr = force_get(["xprop", "-id", w[0]])
            if all([
                mx in xpr, not "Iconic" in xpr,
                0 <= int(w[3]) < res[0], 0 <= int(w[4]) < res[1],
                any([w[2] == pid for pid in pids]),
                ]):
                hide = True
                break
        if hide != hide1:
            nexts = "0" if hide == False else "1"
            currset = get(["gsettings", "get", key[0], key[1]])
            if nexts != currset:
                subprocess.Popen([
                "gsettings", "set", key[0], key[1], nexts
                ])
        hide1 = hide

使い方:

いずれかのスクリプトを空のファイルにコピーし、
[設定、2番目のオプションを選択した場合、アプリケーションを非表示にする]
autohide.pyとして保存します。

次のコマンドで実行します:

python3 /path/to/autohide.py

希望どおりに動作する場合は、スタートアップアプリケーションに追加します。
N.B。スタートアップアプリケーションとして使用する場合は、次の行のコメントを解除する必要があります。

time.sleep(10)

スクリプトのヘッドセクション。デスクトップが完全にロードされる前にスクリプトが呼び出されると、スクリプトがクラッシュする可能性があります。システムに応じて、値(10)を変更します。

説明

ループ内でスクリプト:

  • [設定されたアプリケーションの可能なpidを確認します]
  • 画面の解像度をチェックして、ウィンドウがどこに配置されているかを確認します(現在のワークスペースに対して)
  • 現在のウィンドウとその状態のリストを作成します
  • 現在の非表示モードをチェックします(非自動非表示の場合は0、自動非表示の場合は1)

(のみ)非表示モードを変更する必要がある場合、スクリプトは設定を変更します。

5
Jacob Vlijm

ここに行きます。オリジナルのUnity環境を使用して、私のUbuntu 14.04でテストしました。誰かが私の小さな仕事に感謝することを願っています...

1つのブラウザウィンドウに適しています

#!/bin/bash
## Tested with Ubuntu 14.04 Unity
## Auto hide Unity Launcher when web browser is maximized 
## wmctrl is required: Sudo apt-get install wmctrl
## ~pba


## Change value of "key" to the command which worked for you
key='gsettings set org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ launcher-hide-mode';

while [ 1 ];
 do
 p=$(wmctrl -lG);
 a=($(echo -E "$p" | grep -i "unity-launcher"));
 w=($(echo -E "$p" | grep -i "firefox\|google\|chromium\|opera"));
 if [ ${w[0]} ]; then
 e=$(xwininfo -all -id ${w[0]});
 l=( $(echo -E "$e" | grep -ci '   Hidden')
     $(echo -E "$e" | grep -ci '   Maximized Vert')
     $(echo -E "$e" | grep -ci '   Maximized Horz') );
 b=($(echo -E "$p" | grep -i "unity-panel"));
 if [ ${l[0]} -ne "1" -a ${l[1]} -eq "1" -a ${l[2]} -eq "1" -a ${w[2]} -eq ${a[4]} -a ${w[3]} -eq ${b[5]} ]; then 
  eval "$key 1"; 
   Elif [ ${l[0]} -ne "1" -a ${l[1]} -ne "1" -a ${l[2]} -ne "1" -a ${a[3]} -lt "0" ]; then 
    eval "$key 0";
   Elif [ ${l[0]} -eq "1" -a ${a[3]} -lt "0" -a ${w[2]} -ne "1" ]; then 
    eval "$key 0";
   Elif [ ${l[0]} -ne "1" -a ${l[1]} -eq "1" -a ${l[2]} -eq "1" -a ${a[3]} -lt "0" -a ${w[2]} -ne "0" ]; then 
    eval "$key 0";
   Elif [ ${l[0]} -ne "1" -a ${l[1]} -eq "1" -a ${l[2]} -eq "1" -a ${a[3]} -lt "0" -a ${w[3]} -ne ${b[5]} -a ${w[3]} -ne "0" ]; then 
    eval "$key 0";
 fi;
 Elif [ ${a[3]} -lt "0" ]; then eval "$key 0";
 fi;
 sleep 2;
done;

古い スクリプト

4
Paul B