web-dev-qa-db-fra.com

Ubuntu 18.04: Modification de l'emplacement du dock lors de la rotation du moniteur

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.

3
James Parker

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é.

Ordinateur portable avec accéléromètre

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.

  1. 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.
  2. Avec votre éditeur de texte préféré, créez un fichier python3, insérez le code suivant et enregistrez-le. Vous pouvez choisir n'importe quel nom ou emplacement du fichier, à condition que vous vous en souveniez, afin de pouvoir vous y référer aux étapes 3 et 4. Je l'ai appelé "dock_rotator.py".
#!/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()
  1. Rendre le code exécutable par la commande 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.
  2. Ouvrez "Application de démarrage" et ajoutez une nouvelle entrée à diriger vers le fichier python que vous venez de créer.

Nom: <any>
Commande: <path to the file>
Commentaire: <any>

  1. Redémarrez votre ordinateur.

Ordinateur sans accéléromètre

Cette approche crée un script bash qui doit être exécuté lorsque vous souhaitez modifier l’orientation de votre affichage.

  1. 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.

  2. 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
  1. 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.

  2. 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.

  3. Enregistrez le fichier.

  4. Redémarrez votre terminal ou exécutez source .bashrc. Ils font la même chose. Votre script devrait maintenant pouvoir s'exécuter.

Usage

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
  1. Faites pivoter l'affichage principal vers la gauche: drotate left
  2. Revenez à l'affichage normal de l'écran principal: drotate normal
  3. Faites pivoter votre sous-affichage vers la gauche: drotate left 2
3
James Parker