web-dev-qa-db-fra.com

xdotool comment sélectionner le bureau envoyer F5 et revenir?

Cela semble simple; xdotool sélectionne le bureau, simule F5 appuyez sur la touche et renvoie le focus à la fenêtre/au programme appelant.

Après avoir googlé, cela ne semble plus simple.

Je dois le faire depuis bash/gnome-Shell.

Des idées?


Ce projet est lié à ce Q&A où les icônes tombent de l'écran gauche dans un tout noir à cause de moniteurs de tailles différentes:

Merci à aide de Podesta J'ai créé ce code:

TestIcons () {

    [[ $TestSeconds == "" ]] || [[ $TestSeconds == 0 ]] && TestSeconds=5

    local i Position File
    for (( i=0; i<${#IconsArr[@]}; i=i+ICON_FLD_CNT )) ; do
        File="$ICONS_DIR"/"${IconsArr[((i+ICON_NAME_NDX))]}"
        Position="${IconsArr[((i+ICON_COL_NDX))]},${IconsArr[((i+ICON_ROW_NDX))]}"
        gvfs-set-attribute -t string "$File" \
                'metadata::nautilus-icon-position' "$Position"
    done

    wmctrl -k on        # Show desktop
    xdotool key F5      # Refresh desktop (show icon new positions)
    sleep $TestSeconds  # Pause for view
    wmctrl -k off       # Restore windows

    for (( i=0; i<${#OldIconsArr[@]}; i=i+ICON_FLD_CNT )) ; do
        File="$ICONS_DIR"/"${OldIconsArr[((i+ICON_NAME_NDX))]}"
        Position="${OldIconsArr[((i+ICON_COL_NDX))]},${OldIconsArr[((i+ICON_ROW_NDX))]}"
        gvfs-set-attribute -t string "$File" \
                'metadata::nautilus-icon-position' "$Position"

    done

    wmctrl -k on        # Show desktop
    xdotool key F5      # Refresh desktop (show icon new positions)
    wmctrl -k off       # Restore windows

} # TestIcons

Voici à quoi ressemble l'écran:

iconic 2 optimized.gif

3
WinEunuuchs2Unix

Le script ci-dessous fonctionne de @ WinEunuuchs2Unix et est la solution finale. Ma réponse originale est à la fin.

#!/bin/bash

TestIcons () {

    [[ $TestSeconds == "" ]] || [[ $TestSeconds == 0 ]] && TestSeconds=5

    local i Position File
    for (( i=0; i<${#IconsArr[@]}; i=i+ICON_FLD_CNT )) ; do
        File="$ICONS_DIR"/"${IconsArr[((i+ICON_NAME_NDX))]}"
        Position="${IconsArr[((i+ICON_COL_NDX))]},${IconsArr[((i+ICON_ROW_NDX))]}"
        gvfs-set-attribute -t string "$File" \
                'metadata::nautilus-icon-position' "$Position"
    done

    wmctrl -k on        # Show desktop
    xdotool key F5      # Refresh desktop (show icon new positions)
    sleep $TestSeconds  # Pause for view
    wmctrl -k off       # Restore windows

    for (( i=0; i<${#OldIconsArr[@]}; i=i+ICON_FLD_CNT )) ; do
        File="$ICONS_DIR"/"${OldIconsArr[((i+ICON_NAME_NDX))]}"
        Position="${OldIconsArr[((i+ICON_COL_NDX))]},${OldIconsArr[((i+ICON_ROW_NDX))]}"
        gvfs-set-attribute -t string "$File" \
                'metadata::nautilus-icon-position' "$Position"

    done

    wmctrl -k on        # Show desktop
    xdotool key F5      # Refresh desktop (show icon new positions)
    wmctrl -k off       # Restore windows

} 
TestIcons

Quelques autres commandes xdotools qui peuvent être utiles dans une situation similaire:

Si votre gestionnaire de fenêtres a une commande show desktop, il peut être utile de réduire et de ramener toutes les fenêtres. Il est généralement défini sur ctrl+alt+d:

xdotool key ctrl+alt+d

Si vous souhaitez enregistrer la fenêtre actuellement active, pour la récupérer ultérieurement, vous pouvez utiliser:

myWindow="$(xdotool getactivewindow)"

Ti minimise une fenêtre que vous pouvez utiliser. L'ajouter à une boucle vous permet de minimiser toutes les fenêtres, comme alternative au show dekstop.

xdotool windowminimize $(xdotool getactivewindow)

Pour ramener la fenêtre active que vous avez enregistrée au foyer:

xdotool windowactivate "$myWindow"

Pour fermer la fenêtre active, utilisez:

xdotool getactivewindow windowkill

Et le plus important, toutes ces commandes que vous pouvez utiliser avec la fenêtre active, vous pouvez réellement rechercher et appliquer à des cas spécifiques. Par exemple, rechercher cette fenêtre spécifique, en fonction du titre.

xdotool search --desktop 0 --name "command line - xdotool" windowactivate

Il existe de nombreuses façons différentes de rechercher des fenêtres, en fonction du titre, de la classe, si elles sont visibles, etc. Il peut également manipuler les positions des fenêtres et la souris. La page de manuel de xdotol est très complète. Les combiner avec un script bash donnerait beaucoup de liberté pour réaliser la plupart des choses.

4
Podesta