web-dev-qa-db-fra.com

Exécuter gnome-terminal sans bordure de fenêtre au démarrage de xubuntu 12.10

J'ai créé un script pour lancer une session de gnome-terminal lorsque je me connecte à xubuntu. Je le voulais spécifiquement dans une position spécifique sur la fenêtre, et sans bordure de fenêtre (étonnamment, il n'y a pas d'option facile pour cela dans gnome-terminal, contrairement à xfce4-terminal).

Après un tas de recherches sur Google et l’essai d’une dizaine de méthodes qui ne fonctionnaient pas, j’ai fini avec les scripts suivants, en bash et en python.

Mon script bash exécutable, que j'ai placé dans $ HOME/bin:

#!/bin/bash

flags[0]="--hide-menubar"
flags[1]="--geometry=80x54+0-0"
flags[2]="--window-with-profile=default2"
flags[3]="--working-directory={$HOME}"

gnome-terminal ${flags[@]} -x bash -c 'sleep 5 ;{$HOME}/bin/undecor.py ;bash'

L'exécutable correspondant python script, dans le même répertoire:

#!/usr/bin/python
import gtk.gdk

root_window = gtk.gdk.get_default_root_window()
root_xid = root_window.property_get("_NET_ACTIVE_WINDOW")[2][0]
w = gtk.gdk.window_foreign_new(root_xid)
w.set_decorations(False)
gtk.gdk.window_process_all_updates()

J'ai placé les drapeaux dans un tableau dans le script bash afin de pouvoir facilement savoir ce qui se passait si je devais modifier l'arrangement particulier plus tard. Remarque: je le fais dans python 2.7.3. Je ne l'ai pas testé dans python 3.x

La plupart des bizarreries dans la dernière ligne du bashscript est due au fait que j'ai trouvé très difficile d'exécuter une commande dans une nouvelle fenêtre gnome-terminal et de la garder ouverte une fois l'exécution de la commande terminée.

Le deuxième grand problème est qu'au démarrage, sans exécuter la commande sleep, mon script python s'exécute avant que la fenêtre ne soit officiellement créée (je pense ...) et quelque part dans le script python Je commence à obtenir NoneTypes à la place des objets de fenêtre réels, etc., et pyscript ne décore jamais avec succès la fenêtre.

Donc, ce que je demande, c'est si quelqu'un peut penser à une façon moins astucieuse de le faire. J'aimerais vraiment utiliser uniquement du python, mais je ne pouvais pas trouver un moyen facile de le faire, ni dans le module os, ni dans le module gtk. J'ai lu quelques autres solutions qui impliquaient des choses comme Compiz ou Openbox, mais je voulais un moyen de le faire sans installer quoi que ce soit de nouveau. Je ne suis même pas sûr que cela fonctionne dans d'autres environnements.

Merci! Désolé si cette question est longue, je voulais d'abord faire mes devoirs.

(Remarque également pour les utilisateurs de xubuntu, vous devez vous assurer de lancer les services GNOME au démarrage.)

4
lxvk

Vous pouvez faire ça avec devilspie. Installez le paquet devilspie et écrivez le fichier de configuration suivant (enregistrez sous ~/.devilspie/gnome-terminal.ds)

(if (is (window_role) "borderless") 
  (begin
    (geometry "+0+0")
    (maximize_vertically)
    (undecorate)
  )
)

À présent, vous n’exécutez que devilspie lorsque vous vous connectez (par exemple, en l’ajoutant aux applications de démarrage), puis chaque fois qu’une fenêtre avec le rôle "sans bordure" apparaît, elle est déplacée vers la position (0,0), agrandie verticalement, et les décorations enlevées.

Vous spécifiez le rôle de gnome-terminal avec l'option --role.

gnome-terminal --role=borderless
7
geirha