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).
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.
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
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..."])
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:
Ajoutez la commande:
/path/to/autohide_launcher.py
Donnez-lui un nom à votre goût
Définissez un raccourci clavier pour basculer le script
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
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.
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):
Sudo apt-get install git
cd /opt ; Sudo git clone https://github.com/SergKolo/sergrep.git
Sudo chmod -R +x sergrep
Le fichier s'appelle toggle_unity_launcher.sh
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.
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.
#!/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 "$@"