web-dev-qa-db-fra.com

Comment masquer automatiquement le lanceur via un script lorsque je maximise le navigateur?

J'essayais de contrôler le comportement de Ubuntu 14.4.1 Launcher. Je veux qu'il se cache automatiquement chaque fois que j'ai une fenêtre de navigateur comme firefox maxmaized. J'ai trouvé cette solution:

#!/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;

mais cela semble trop vieux pour fonctionner alors j'ai trouvé ceci

J'ai essayé de combiner les deux scripts, alors voici ce que j'ai fait:

#!/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;

Mais le script ne fonctionne pas. Quelqu'un peut-il affiner ce script et le faire fonctionner?

6
Misho21

Ci-dessous deux versions d'un script pour masquer automatiquement le programme de lancement lorsque la fenêtre d'une application est agrandie. Les scripts sont testés le 14.04/14.10/16.04

Les différences

  • La première version est une version "générale", elle permet au lanceur de se masquer automatiquement chaque fois qu'une fenêtre de une application est agrandie.
  • La seconde fait que le lanceur se cache automatiquement, mais uniquement sur les applications que vous définissez spécifiquement dans la section têtes du script.

Les deux scripts reconnaissent que les fenêtres sont iconisées, il n'y a donc aucune raison de masquer automatiquement et les deux scripts fonctionnent en fonction de l'espace de travail; le lanceur active uniquement le masquage automatique sur les espaces de travail dans lesquels une ou plusieurs fenêtres sont agrandies.

Installation de wmctrl

Les scripts utilisent wmctrl pour mapper les fenêtres actuellement ouvertes. Vous devrez peut-être l'installer:

Sudo apt-get install wmctrl

Les scripts


Les deux scripts ci-dessous ont été mis à jour/réécrits en mars 2017.


1. La version "de base" agit sur les fenêtres maximisées de toutes les applications

#!/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. La version spécifique à l'application:

#!/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

Comment utiliser:

Copiez l’un des scripts dans un fichier vide,
[définissez, si vous choisissez la seconde, vos applications à masquer]
et enregistrez-le sous le nom autohide.py.

Exécutez-le à l'aide de la commande:

python3 /path/to/autohide.py

Si cela vous convient, ajoutez-le à vos applications de démarrage.
N.B. Si vous l'utilisez comme application de démarrage, vous devriez supprimer le commentaire de la ligne:

time.sleep(10)

Dans la section head du script. Le script peut se bloquer s'il est appelé avant le chargement complet du bureau. Modifiez la valeur (10) en fonction de votre système.

Explication

En boucle le script:

  • [vérifie les pids possibles des applications du set]
  • vérifie la résolution de l'écran, pour voir où les fenêtres sont positionnées (par rapport à l'espace de travail actuel)
  • crée une liste des fenêtres actuelles, leur état
  • vérifie le mode masqué actuel (0 pour non masquer automatiquement ou 1 pour masquer automatiquement)

(uniquement) si une modification du mode masqué doit être effectuée, le script modifie le paramètre.

5
Jacob Vlijm

Ici vous allez les gars. Testé sur mon Ubuntu 14.04 avec l’environnement Unity original. J'espère que quelqu'un apprécie mon petit travail ...

Il convient à une fenêtre de navigateur

#!/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;

Plus ancien script

4
Paul B