Dans ma configuration actuelle, j'ai un dock (qui affiche des icônes d'application) à gauche de l'écran. Je me demandais s'il était possible de déplacer le dock vers le haut lorsque le moniteur est pivoté de 90 degrés (afin d'éviter de réduire la largeur de l'écran). De plus, je souhaite que le dock soit de nouveau dans sa position d'origine lorsque je reviens à l'orientation horizontale du moniteur. Est-ce que quelqu'un pourrait m'aider à faire ça?
Environnement
J'utilise Ubuntu 18.04 et utilise l'environnement de bureau gnome par défaut. Mon ordinateur est un ordinateur portable 2 en 1 qui fait automatiquement pivoter l'écran en fonction de l'orientation de l'appareil.
Tentative actuelle
J'ai regardé dans les extensions de gnome possibles qui feraient ceci, mais Dash to Dock n'avait pas de telles options.
Nous devons modifier les approches selon que votre ordinateur est équipé d'un accéléromètre ou non. Si votre ordinateur est livré avec un accéléromètre (généralement un ordinateur portable ou une tablette 2 en 1), il peut être complètement automatisé en détectant les changements d'orientation de l'écran. Sinon, créer un script bash pour changer l’orientation et l’emplacement du quai en même temps vous apporterait suffisamment de commodité.
J'ai écrit un code python3 qui s'exécute au démarrage. Le script écoute les changements de rotation de l'écran et modifie la position du dock en conséquence.
#!/usr/bin/env python3
import os
import subprocess
import dbus
from dbus.mainloop.glib import DBusGMainLoop
from gi.repository import GObject as gobject
def run_command(command, Shell=False):
""" Takes a string to run a command on bash
"""
p = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
output = p.communicate()[0]
return output.decode()
def enable_view_rotation_lock():
os.environ["GIO_EXTRA_MODULES"] = "/usr/lib/x86_64-linux-gnu/gio/modules/"
def rotation_locked():
locked = run_command("gsettings get \
org.gnome.settings-daemon.peripherals.touchscreen \
orientation-lock")
return locked.strip() == "true"
def move_dash_top():
run_command("gsettings set org.gnome.Shell.extensions.dash-to-dock dock-position TOP")
def move_dash_left():
run_command("gsettings set org.gnome.Shell.extensions.dash-to-dock dock-position LEFT")
def sensor_handler(*args, **kwargs):
if len(args) < 2:
return
dbus_dict = args[1]
key = 'AccelerometerOrientation'
if key not in dbus_dict:
return
orientation = dbus_dict[key]
if not rotation_locked():
if orientation in ["left-up", "right-up"]:
move_dash_top()
else:
move_dash_left()
def main():
enable_view_rotation_lock()
global loop
DBusGMainLoop(set_as_default=True)
loop = gobject.MainLoop()
bus = dbus.SystemBus()
bus.add_signal_receiver(
sensor_handler,
path='/net/hadess/SensorProxy')
loop.run()
if __== "__main__":
main()
chmod +x <filename>
. Si vous avez enregistré votre fichier dans un répertoire appartenant à root à l'étape 2, vous devez exécuter Sudo chmod +x <filename>
à la place.Nom: <any>
Commande: <path to the file>
Commentaire: <any>
Cette approche crée un script bash qui doit être exécuté lorsque vous souhaitez modifier l’orientation de votre affichage.
Télécharger Dash to Dock Extension gnome. Dans mon cas, il n'était pas nécessaire de l'activer, mais cela pourrait être nécessaire.
Avec votre éditeur de texte préféré, créez un fichier bash appelé "drotate" (pour une rotation du tiret), insérez le code suivant et enregistrez-le.
#!/bin/bash
show_help () {
echo "drotate <rotation> [<display number>]"
echo "<rotation> : inverted | left | normal | right "
echo "<display number> : any number between 1 to number of displays connected"
echo " defaults to 1"
}
set_gnome_orientation () {
case "$1" in
inverted)
GNOME_ORIENTATION=LEFT
;;
normal)
GNOME_ORIENTATION=LEFT
;;
left)
GNOME_ORIENTATION=TOP
;;
right)
GNOME_ORIENTATION=TOP
;;
*)
echo "Invalid orientation"
show_help
exit 1
;;
esac
}
if [ $# -eq 0 ] || [ $# -gt 2 ]; then
show_help
exit 1
fi
if [ $# -eq 1 ]; then
DISPLAY_INDEX=1 # any number between 1 to # of displays connected
else
DISPLAY_INDEX=$2
fi
DISPLAY=$( xrandr --current | grep -F connected |\
grep -Fv disconnected | cut -d" " -f 1 | head -${DISPLAY_INDEX} | tail -1 )
if [ -z "$DISPLAY" ]; then
echo Could not find display $DISPLAY_INDEX
exit 1
fi
echo $DISPLAY
ORIENTATION="$1"
GNOME_ORIENTATION=""
set_gnome_orientation $ORIENTATION
xrandr -d :0 --output ${DISPLAY} --rotate ${ORIENTATION}
export GIO_EXTRA_MODULES=/usr/lib/x86_64-linux-gnu/gio/modules/
gsettings set org.gnome.Shell.extensions.dash-to-dock dock-position $GNOME_ORIENTATION
Rendre le code exécutable par la commande chmod +x drotate
. Si vous avez enregistré votre fichier dans un répertoire appartenant à root à l'étape 2, vous devez exécuter Sudo chmod +x drotate
à la place.
Ouvrez ~/.bash
. Créez une nouvelle ligne à la fin du fichier et collez la ligne suivante. export PATH="<path/to/the/directory/with/your/script>:$PATH
. Par exemple, si vous avez enregistré votre fichier dans /usr/local/drotate
, la commande devient export PATH="/usr/local:$PATH
. Notez que drotate
est omis.
Enregistrez le fichier.
Redémarrez votre terminal ou exécutez source .bashrc
. Ils font la même chose. Votre script devrait maintenant pouvoir s'exécuter.
Ouvrez votre terminal (Ctrl-Alt-t) et tapez drotate <rotation> [<display number>]
.
drotate <rotation> [<display number>]
<rotation> : inverted | left | normal | right
<display number> : any number between 1 to number of displays connected
defaults to 1
drotate left
drotate normal
drotate left 2