GNU/Linux >> Tutoriels Linux >  >> Linux

Configurer Toggleshowdesktop dans Openbox pour n'agir que sur le calque spécifié ?

J'ai un raccourci clavier pour ToggleShowDesktop . Lorsque j'appuie sur Menu , toutes les fenêtres sont réduites et je vois mon fond d'écran (comme prévu) :

<keybind key="Menu">
  <action name="ToggleShowDesktop"/>
</keybind>

Maintenant, le problème est que je ne veux pas voir mon fond d'écran. J'utilise terminator comme fond d'écran, c'est-à-dire lorsque je lance terminator , il est placé sur le calque du dessous :

<application name="terminator">
  <focus>yes</focus>
  <layer>below</layer>
  <desktop>1</desktop>
  <position>
    <y>0</y>  
    <x>0</x>
  </position> 
  <skip_taskbar>yes</skip_taskbar>
  <maximized>true</maximized>
</application>

Est-il possible de configurer ToggleShowDesktop de sorte qu'il laisse la couche "inférieure" inchangée ? c'est-à-dire que je veux que seules les fenêtres normales soient minimisées, mais pas terminator . En d'autres termes, je veux que le terminateur se comporte comme un fond d'écran normal - ne soit pas affecté par ToggleShowDesktop .

J'utilise Debian Wheezy avec LXDE .

(en utilisant la méthode suggérée par @Suchipi) :

J'ai omis quelques détails de ma question initiale, et maintenant ces détails semblent pertinents après tout :

Ma configuration a 2 moniteurs et 4 bureaux virtuels. J'ai donc "8 fonds d'écran" à remplir avec terminator . D'après ce que j'ai lu précédemment, j'ai supposé que ces 8 fenêtres devront être distinguables, j'ai donc créé 8 symliks à terminator , c'est-à-dire :

/usr/bin/terminator-wallpaper-1a  -> terminator
/usr/bin/terminator-wallpaper-1b  -> terminator
/usr/bin/terminator-wallpaper-2a  -> terminator
...

En effet créé 8 applications différentes (avec des noms différents).

De même, dans .config/openbox/lxde-rc.xml Je n'ai pas 1, mais 8 définitions :

<application name="terminator-wallpaper-1a">
  <desktop>1</desktop>
  <position>
    <monitor>1</monitor>
  </position>
  ...
</application>

<application name="terminator-wallpaper-1b">
  <desktop>1</desktop>
  <position> 
    <monitor>2</monitor>
  </position>
  ...
</application>

<application name="terminator-wallpaper-2a">
  <desktop>2</desktop>  
  <position> 
    <monitor>1</monitor>
  </position>
  ...
</application>

Et enfin, dans /.config/autostart J'ai 8 *.desktop fichiers, à démarrer automatiquement après la connexion :

/.config/autostar/terminator-wallpaper-1a.desktop
/.config/autostar/terminator-wallpaper-1b.desktop
/.config/autostar/terminator-wallpaper-2a.desktop

Cela me semble assez compliqué et inélégant, mais je n'ai pas vu de meilleure façon de le faire.

Maintenant, lorsque je suis les instructions de @Suchipi, voici ce qui se passe :

1) la partie avec devilspie fonctionne bien. Il s'avère que j'ai besoin d'une seule définition qui couvre toutes mes 8 fenêtres (en remplaçant matches pour is ):

$ cat .devilspie/terminator.ds 
(if
(matches (application_name) "terminator-wallpaper")
(begin
(wintype "desktop")
)
)

Et je peux voir avec obxprop que cela fonctionne comme prévu.

$ obxprop | egrep '(_OB_APP|_NET_WM_WINDOW_TYPE)'
_OB_APP_TYPE(UTF8_STRING) = "normal"
_OB_APP_TITLE(UTF8_STRING) = "None"
_OB_APP_CLASS(UTF8_STRING) = "Terminator-wallpaper-1"
_OB_APP_NAME(UTF8_STRING) = "terminator-wallpaper-1"
_OB_APP_ROLE(UTF8_STRING) = 
_NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DESKTOP

2) maintenant la partie avec xdotool est plus délicat :
tout d'abord, utiliser 100% car la résolution ne fonctionne pas, c'est-à-dire que la fenêtre disparaît (je ne la vois pas). Lors de l'utilisation de statique :

xdotool search --class "Terminator-wallpaper-1a" windowunmap --sync windowmap windowsize %1 1920 1056

cela fonctionne pour le moniteur 1 du bureau 1. Mais lorsque je l'exécute pour d'autres bureaux, cela n'a aucun effet, c'est-à-dire :

xdotool search --class "Terminator-wallpaper-2a" windowunmap --sync windowmap windowsize %1 1920 1056

En fait, cela fonctionne également pour d'autres ordinateurs de bureau, mais seulement si j'exécute le xdotool commande sur le bureau spécifique, que je veux affecter. c'est-à-dire que je dois passer au bureau 2 et lancez xdotool search --class "Terminator-wallpaper-2a" et puis ça marche.

Aussi, je me demandais si le windowsize %1 joue n'importe quel rôle ici.

MISE À JOUR 2019-12-07 :

donc, j'essaie maintenant de configurer le même système sur Debian Buster (Openbox 3.6) et je rencontre un nouveau problème. Je soupçonne que certaines propriétés ont changé dans la nouvelle version d'openbox.

Tout semble comme avant, c'est-à-dire :

terminator-wallpaper-1a --profile wallpaper -b &
terminator-wallpaper-1b --profile wallpaper -b &
xdotool search --class 'Terminator-wallpaper-1a' windowunmap --sync windowmap windowsize %1 1920 1180 
xdotool search --class 'Terminator-wallpaper-1b' windowunmap --sync windowmap windowsize %1 1920 1180

Je reçois deux terminaux en fond d'écran. Mais le problème est qu'un seul de ces terminaux est réellement utilisable. L'autre est "non focalisé" et même lorsque je clique dessus avec la souris, je ne peux pas le mettre au point. C'est-à-dire que je peux voir le terminal, mais je ne peux pas taper dedans.

Connexe :Configurer postfix pour accepter le courrier de deux WAN ?

Ce problème n'existait pas auparavant, dans l'ancienne version d'Openbox

Comment puis-je résoudre ce problème ?

Réponse acceptée :

Openbox donnera la fonctionnalité que vous recherchez aux fenêtres dont le _OB_APP_TYPE la propriété est définie sur "desktop" (vous pouvez utiliser obxprop pour vérifier les propriétés d'une fenêtre).
Nous devons donc définir le _OB_APP_TYPE pour votre fenêtre de terminaison sur "bureau" afin que cela se produise.

Lecture du code source openbox, dans client.c J'ai pu voir que _OB_APP_TYPE est hérité de _NET_WM_WINDOW_TYPE . J'ai donc cherché une application qui pourrait changer _NET_WM_WINDOW_TYPE . L'application que j'ai trouvée s'appelle devilspie .

Commencez par l'installer :

sudo apt-get install devilspie

Ensuite, nous allons créer le dossier pour devilspie fichiers de configuration :

mkdir ~/.devilspie

Nous allons maintenant ajouter un fichier de configuration qui indique devilspie pour rechercher des applications nommées terminator et définissez leur type de fenêtre sur desktop . Mettez ce qui suit dans ~/.devilspie/terminator.ds :

(if
(is (application_name) "terminator")
(begin
(wintype "desktop")
)
)

Maintenant, si vous exécutez devilspie (ou devilspie -a pour affecter les fenêtres existantes au lieu des fenêtres nouvellement créées), vous remarquerez si vous utilisez obxprop sur le terminateur qui _NET_WM_WINDOW_TYPE a changé, mais _OB_APP_TYPE n'a pas encore. Utilisons xdotool pour démapper et remapper la fenêtre (dans la terminologie X11, cela signifie que nous allons arrêter de dessiner et commencer à dessiner la fenêtre), ce qui devrait forcer openbox à remarquer la valeur.

Installez xdotool :

sudo apt-get install xdotool

Ensuite, nous exécutons le script suivant pour trouver le terminator fenêtre, démappez-la, attendez qu'elle soit démappée, puis remappez-la. Nous redimensionnons également la fenêtre car lorsqu'elle a été démappée et remappée, elle a perdu sa maximisation :

xdotool search --class "terminator" windowunmap --sync windowmap windowsize %1 1024 768

Remplacer 1024 768 avec votre résolution. Notez également que les nouvelles versions de xdotool que ceux trouvés dans la prise en charge du référentiel apt de Debian en utilisant 100% 100% au lieu d'une résolution statique. Vous pouvez trouver .deb packages pour les nouvelles versions de xdotool sur la page googlecode de xdotool.

La fenêtre de terminaison deviendra immédiatement non décorée, et si vous utilisez maintenant obxprop , vous verrez que les deux valeurs ont été définies correctement. Si vous appuyez maintenant sur la touche, vous avez lié ToggleShowDesktop à quelques reprises, la fenêtre de terminaison restera toujours active.

Pour rendre cela persistant, vous voudrez exécuter ces commandes lors de la connexion. La page Wiki LXDE pour LXSession montre plusieurs manières différentes de le faire (global, par utilisateur, par profil, etc.). En supposant que vous souhaitiez ces paramètres uniquement pour votre utilisateur et sous le profil LXDE (par défaut), vous souhaiterez modifier ~/.config/lxsession/LXDE/autostart et ajoutez les commandes que nous avons exécutées, en gardant à l'esprit que la commande xdotool doit être exécutée après le rendu de la fenêtre du terminateur, alors faites quelque chose comme (sleep 1s & xdotool ...) . Vous pouvez également configurer ces commandes en tant que raccourcis clavier dans openbox si vous le souhaitez.

En relation :Quelles commandes Unix peuvent être utilisées comme sémaphore/verrou ?
Linux
  1. Comment installer et configurer le client Putty SSH sur le bureau Linux

  2. Comment configurer un pont Linux pour qu'il agisse comme un concentrateur au lieu d'un commutateur

  3. Impossible d'exécuter la commande de configuration :"aucun fichier ou répertoire de ce type" ?

  4. Comment configurer Desktop pour une adresse IP statique ?

  5. Configurez IPTables sur l'hôte KVM pour bloquer le trafic du pont invité

Comment configurer une adresse IP statique sur Ubuntu 18.04 (bureau)

Comment configurer une adresse IP statique sur Fedora Desktop

Comment installer et configurer Sysstat sur Linux Desktop

Comment installer et configurer le serveur Apache SVN sur le bureau Linux

Comment installer et configurer Google Cloud SDK sur Linux Desktop

Existe-t-il un moyen de prendre une capture d'écran dans le bureau KDE en appuyant uniquement sur la touche PrtSc ?