web-dev-qa-db-fra.com

Comment afficher le lanceur Unity dans un seul espace de travail?

Je veux que le programme de lancement ne soit actif que dans l'espace de travail principal. Par exemple. J'aime garder la fenêtre Citrix en mode plein affichage sans lanceur (dans l'espace de travail II).

6
Bugger_man

Comme beaucoup de choses, il n’existe pas, autant que je sache, MAIS, cela peut se faire avec un peu de créativité et les bons outils.

enter image description here

Comment cela peut être fait

En supposant que vous soyez sur 14.04 (avec python3), vous pouvez utiliser un script à exécuter en arrière-plan, qui garde une trace de votre fenêtre d'affichage actuelle et définit le lanceur à masquer ou non, selon la fenêtre d'affichage actuelle.

  • Ce que vous devez d’abord faire est d’installer wmctrl:

    Sudo apt-get install wmctrl
    

    Nous avons besoin de wmctrl pour obtenir des informations sur la taille totale de toutes les fenêtres et pour pouvoir lire des informations sur la section actuelle dans laquelle nous nous trouvons.

  • Ceci fait, copiez le script ci-dessous dans un fichier vide et protégez-le sous le nom autohide_launcher.py (conservez le nom ainsi) et rendez-le exécutable (!) .

    Dans la ligne hide_launcher, déterminez les fenêtres dans lesquelles vous voulez masquer automatiquement le programme de lancement (définissez "True") et utilisez le nombre correct d'entrées correspondant à votre nombre de fenêtres. La liste se lit par ligne de fenêtre, de gauche à droite.

#!/usr/bin/env python3

import subprocess
import time

# set the hide-launcher values for your viewports; in rows/columns
hide_launcher = (False, True, True, True)

# don't change anything below (or it must be the time.sleep(2) interval)
key = " org.compiz.unityshell:/org/compiz/profiles/unity/plugins/unityshell/ "
pr_get = "gsettings get "; pr_set = "gsettings set "
check = pr_get+key+"launcher-hide-mode"
hide = pr_set+key+"launcher-hide-mode 1"
show = pr_set+key+"launcher-hide-mode 0"

def get_value(command):
    return subprocess.check_output(
        ["/bin/bash", "-c", command]).decode('utf-8').strip()

# get screen resolution
output = get_value("xrandr").split(); idf = output.index("current")
screen_res = (int(output[idf+1]), int(output[idf+3].replace(",", "")))

while True:
    # get total span size all viewports, position data
    wsp_info = get_value("wmctrl -d").strip()
    scr_data = [item.split("x") for item in wsp_info.split(" ") if "x" in item][0]
    # get current position (viewport coordinates)
    VP = eval(wsp_info[wsp_info.find("VP: "):].split(" ")[1])
    # calculated viewports rows / columns
    VP_hor = int(scr_data[0])/int(screen_res[0])
    VP_vert = int(scr_data[1])/int(screen_res[1])
    # calculated viewport positions
    range_hor = [i*screen_res[0] for i in range(int(VP_hor))]
    range_vert = [i*screen_res[1] for i in range(int(VP_vert))]
    viewports = [(h, range_vert[i])for i in range(len(range_vert)) for h in range_hor]
    current_viewport = viewports.index(VP); a_hide = get_value(check)
    if (hide_launcher[current_viewport], a_hide == "0") == (True, True):
        subprocess.Popen(["/bin/bash", "-c", hide])
    Elif (hide_launcher[current_viewport], a_hide == "0") == (False, False):
        subprocess.Popen(["/bin/bash", "-c", show])
    else:
        pass
    time.sleep(1)
  • Vous pouvez démarrer le script avec la commande:

    /path/to/autohide_launcher.py
    

Activer/Désactiver l'auto-masquage par fenêtre

Cependant, il est plus pratique d'utiliser le script ci-dessous pour avoir une commande permettant d'activer/désactiver le script.

Copiez le script ci-dessous dans un fichier vide et enregistrez-le sous le nom start_stop.py, dans le même dossier que le script autohide_launcher.py. Rendez-le également exécutable (!). Maintenant, vous pouvez basculer la fonction de masquage automatique avec la commande

/path/to/start_stop.py

Le script start/stop:

#!/usr/bin/env python3

import os
import subprocess

script_dir = os.path.dirname(os.path.abspath(__file__))
cmd = "ps -ef | grep autohide_launcher.py"
run = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").split("\n")
match = [line for line in run if script_dir+"/"+"autohide_launcher.py" in line]

if len(match) != 0:
    subprocess.Popen(["kill", match[0].split()[1]])
    subprocess.Popen(["notify-send", "autohide per viewport stopped..."])
else:
    subprocess.Popen(["/bin/bash", "-c", script_dir+"/"+"autohide_launcher.py"])
    subprocess.Popen(["notify-send", "autohide per viewport started..."])

enter image description here

Autres moyens de démarrer ou d'arrêter le script

Il existe plusieurs autres moyens de basculer le script de manière pratique:

Ajoutez le script à vos apoplications de démarrage

Si vous souhaitez exécuter le script de manière permanente en arrière-plan:

  • Ouvrez les applications de démarrage et choisissez "Ajouter".
  • Ajoutez la commande:

    /path/to/autohide_launcher.py
    
  • Donnez-lui un nom à votre goût

Définissez un raccourci clavier pour basculer le script

  • Ouvrez les Paramètres système et choisissez: "Clavier"> "Raccourcis"> "Raccourcis personnalisés".
  • Créez un nouveau raccourci de votre choix, avec la commande:

    /path/to/start_stop.py
    

    Vous pouvez maintenant basculer entre les zones de masquage automatique par fenêtre avec la combinaison de touches.


posté sur Gist.gisthub

7
Jacob Vlijm

Introduction

Unity Launcher et Compiz ne disposent pas d'un paramètre permettant d'afficher uniquement le programme de lancement dans une fenêtre spécifique. Toutefois, il est possible d'utiliser le paramètre hide launcher pour rechercher les modifications dans la fenêtre et modifier ce paramètre en conséquence. La fenêtre en haut à gauche serait les coordonnées 0,0, donc il doit y avoir une interrogation pour savoir si nous sommes ou non sur cette fenêtre - sinon lanceur non défini.

Le script ci-dessous fait exactement cela.

Obtenir le script

Le code source peut être copié à partir d’ici directement ou téléchargé à partir de mon référentiel git en exécutant les commandes suivantes (évidemment dans le terminal):

  1. Sudo apt-get install git
  2. cd /opt ; Sudo git clone https://github.com/SergKolo/sergrep.git
  3. Sudo chmod -R +x sergrep

Le fichier s'appelle toggle_unity_launcher.sh

Comment fonctionne le script

Le script peut être appelé sans options (pour afficher le lanceur uniquement dans la fenêtre en haut à gauche) ou avec les options -x et -y pour définir une fenêtre spécifique, comme ceci

 toggle_unity_launcher.sh -x 1366 -y 0

Le drapeau -h imprimera l'utilisation.

Faire exécuter le script à la connexion

Le script peut être lancé lors de la connexion en ajoutant un chemin complet au fichier (y compris les options -x et -y]) et des arguments dans les applications de démarrage, comme suit.

enter image description here

Code source

#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: [email protected] 
# Date: April 8th , 2016
# Purpose: Set Unity launcher to show up only on
#          specific viewport. By default - viewport 0,0
# Written for: http://askubuntu.com/q/349247/295286
# Tested on: Ubuntu 14.04 LTS
###########################################################
# Copyright: Serg Kolo , 2016
#    
#     Permission to use, copy, modify, and distribute this software is hereby granted
#     without fee, provided that  the copyright notice above and this permission statement
#     appear in all copies.
#
#     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
#     THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
#     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
#     DEALINGS IN THE SOFTWARE.

ARGV0="$0"
ARGC=$#

print_usage()
{
  cat << EOF

Copyright 2016 Serg Kolo
Usage: toggle_unity_launcher.sh [-x INT -y INT] [-h]

The script toggles Unity Launcher on user-defined viewport
By default - launcher appears only on 0, 0

-x and -y flags serve to set custom viewport 

Use 'xprop -root -notype _NET_DESKTOP_VIEWPORT' to find
the exact coordinates of a viewport you want to set
EOF
}

get_viewport() 
{
    xprop -root -notype _NET_DESKTOP_VIEWPORT | awk -F '=' '{printf "%s",substr($2,2)}'
} 

set_launcher_mode()
{
  dconf write /org/compiz/profiles/unity/plugins/unityshell/launcher-hide-mode $1

}

poll_viewport_change()
{
  while [ "$(get_viewport)" = "$VIEWPORT" ]  
  do
    set_launcher_mode 0
    sleep 0.25
  done
}

parse_args()
{
  local OPTIND opt
  while getopts "x:y:h" opt
  do
   case ${opt} in
      x) XPOS=${OPTARG} 
        ;;
      y) YPOS=${OPTARG}
        ;;
      h) print_usage
         exit 0
        ;;
     \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    esac
  done
  shift $((OPTIND-1))
}

main()
{
 local XPOS=0
 local YPOS=0
 parse_args "$@"
 local VIEWPORT=$(printf "%s, %s" "$XPOS" "$YPOS"  )  
 while true
 do
  poll_viewport_change 
  set_launcher_mode 1 # happens only when 
                      # previous function exits
  sleep 0.25
 done
}

main "$@"
4