Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Tag: Interface graphique

Niveau : Star Star Star Empty Empty
Résumé : Xvnc

Supposons une machine sur laquelle vous n'avez pas d'écran. Vous voudriez tout de même pouvoir y accéder en mode graphique. Pour ma part, il s'agit de mettre en place une machine autonome, qui servirait à diffuser la musique sur mon ampli. Pas de place pour l'écran, le problème, il faut bien la commander un peu de temps en temps.

Pour cela il y a plusieurs solutions

Solution A

Dans le cas de diffusion de musique, il est possible de trouver un système purement serveur permettant d'être commandé par une interface web ou un client en ligne de commande. Je pense à des plugins spécifiques à des client habituels ou à des serveurs comme mpd sans interface graphique.

Inconvénient, l'interface est assez peu intuitive et nécessite une certaine bidouille pour être accessible par tous. De plus on passe du temps pour finalement ne faire que de la musique (si on veut que la machine fasse aussi alarme, il faut repartir dans la bidouille.

Solution B

Un solution très unixienne avec interface graphique serait de mettre en place XDMCP sur le service de connexion (gdm, kdm ...). Bonne solution, même pour les clients windows puisque xming permet de faire serveur X sous windows.

Cette solution nous permettrait de disposer de tous les avantages d'un bureau intégré, par exemple, régler le son, configurer une radio ... Par contre, cette solution a l'inconvénient de rendre la machine concernée non autonome. A la moindre déconnexion, pof, plus de musique. Mais expliquons quand même la solution brièvement.

  • Activez XDMCP sur votre *dm
    • gdm : dans /etc/gdm/gdm.conf
    • kdm : dans /etc/kde*/kdm/kdmrc
[xdmcp]
Enable=true
  • Connectez vous avec votre serveur X
    • X86 ou Xorg :
$ X -query machine.distante.net
    • Xming : xlaunch / "One WIndow" / "Open session via XDMCP" / "Connect to Host"

Solution C

Pour pouvoir survivre aux déconnexions, il existe un protocole vnc. On peut utiliser vnc de deux façons :

  • sur un serveur X existant auquel on est connecté
  • sur un serveur X virtuel qui ne fait aucun affichage réel, juste serveur X et serveur vnc

Dans le premier cas on utilisera x11vnc, qu'il est possible de lancer une fois connecté en tant qu'utilisateur. Mais cela ne correspond pas trop à notre cas d'usage.

Dans le Deuxième cas, il suffit de dire à notre *dm de ne pas lancer de serveur X normal, mais un serveur vnc. Pour gdm, il suffit de modifier gdm.conf :

[daemon]
# pour éviter les paramètre incompris de Xvnc
VTAllocation=false

[servers]
# liste des serveur à lancer
0=vnc device=/dev/console

[server-vnc]
# définition d'un serveur X utilisant directement vnc
name=vnc server
command=/usr/bin/Xvnc -PasswordFile=/root/.vnc/passwd -audit 0
flexible=true

Notez que rien ne vous empêche de laisser gdm lancer un serveur X habituel en plus d'un serveur Xvnc (mettre un 1 à la place du 0).

Pour kdm, (attention, pas testé) :

[X-:*-Core]
ServerCmd=/usr/bin/Xvnc
ServerArgsLocal="-PasswordFile=/root/.vnc/passwd"

Notez le stockage du mot de passe dans /root/.vnc/passwd, vous le mettez où vous voulez, mais c'est la qu'il est créé par la commande servant à créer le fichier :

$ vncpasswd

Très bien, mais le serveur ne servant pas à plusieurs personnes et sachant qu'il n'est accessible que sur le réseau local, on voudrais ne pas avoir à passer l'étape de connexion.

Solution D

Le système D consiste donc à se passer du dm. Ma solution (spécifique à mon cas musical, mais simple à répéter) est de me faire un script qui lancera tout ça au démarrage (j'éteins gdm plutôt que de le configurer pour se connecter automatiquement).

Au passage, j'ai créé un utilisateur music, mais vous vous en foutez.

Chez mon nouvel utilisateur, j'ai créé le script suivant :

#!/bin/sh
# -geometry : un serveur X avec des dimensions satisfaisantes pour la plupart des utilisateurs
# -AlwaysShared : forcer le partage du serveur lorsque plusieurs utilisateur se connectent
# -PasswordFile=/home/music/.vnc/passwd : à remplacer par "-SecurityTypes None"
#                  pour les fous qui ne veulent aucun mot de passe
Xvnc  -geometry 1000x700 -AlwaysShared -SecurityTypes None -audit 0 :0 &
sleep 1
export DISPLAY=:0
# environnement de bureau à lancer
startxfce4  &
sleep 1
# on avertit le quidam dans la pièce qu'on est prêt (30ms, 600hz)
beep -l 300 -f 600

Pour trouver comment lancer l'environnement de bureau qui vous intéresse, il suffit de lire les répertoires /usr/share/xsessions et /etc/dm/Sessions, ils contiennent la liste des bureaux connus des *dm. Une fois le bon fichier trouvén repérez la ligne Exec= et vous aurez la commande.

Et astuce pour le polish, on met ce script dans un cron de l'utilisateur concerné pour qu'il se lance automatiquement au démarrage de la machine :

$ crontab -e
# m h  dom mon dow   command
# Notez le @reboot magique
@reboot /home/music/script.sh

Voila, il suffit de se connecter avec un client vnc. On peut trouver vncviewer sous linux et sous windows. On peut avoir plusieurs utilisateurs, et on peut avoir une utilisation simple du système.

Niveau : Star Star Star Empty Empty
Résumé : /etc/X11/xorg.conf ; setxkbmap

Savez-vous qu'il n'est pas nécessaire d'avoir une applet kde pour changer la configuration de son clavier ? Celle-ci est définie dans /etc/X11/xorg.conf " à la section "InputDevice". La liste des paramètres disponibles est ici.

Pour connaître les valeurs disponibles pour votre clavier :

$ less /etc/X11/xkb/rules/xorg.lst

Les lignes commençant par ! correspondent aux paramètres qu'on peut changer. Les autres lignes sont les valeurs disponibles suivies d'un commentaire. Vous avez donc la liste de tous les claviers disponibles, avec toutes leurs variantes.

Notez la section "option" (correspondant à XkbOptions ou à setxkbmap -option), on y trouve des options intéressantes comme :

  • ctrl:swapcaps : qui permet d'inverser ctrl et caps lock (pour les vieux emacsiens)
  • srvrkeys:none : pour interdire les combinaisons ctrl-alt (plus possible de retourner en console)
  • compose:rwin : pour retrouver votre touche compose permettant de faire des caractères comme ¿

Remarquez aussi le grp dans cette section. Elle permet de contrôler la configuration simultanée de plusieurs claviers. Vous pouvez configurer plusieurs claviers simultanément en les séparant par des virgules dans les paramètres :

Option "XkbLayout" "fr,us,de"

Pour passer de l'un à l'autre, un raccourci est défini grâce à cette option grp.

# passer d'un clavier à l'autre en appuyant sur les 2 touches control
Option "XkbOptions" grp:ctrls_toggle 

La même chose en live :

$ setxkbmap -option grp:ctrls_toggle 

Chose amusante, vous pouvez indiquer l'utilisation d'un mapping alternatif avec une led en utilisant l'option "grp_led:scroll".

Je vous laisse, j'ai bloqu

Niveau : Star Empty Empty Empty Empty
Résumé : https ; flash

Évidemment, vous êtes tous passés à firefox 3 ! Ne mentez pas, mes statistiques le prouvent. Malheureusement, vous avez plein de sites https qui vous sont refusés d'office. Je suis d'accord pour dire qu'il faut forcer un peu les gens à être sérieux, le https on ne l'utilise pas pour rien, Imaginez un zoo sans grilles, il vaut mieux être prévenu avant d'y entrer. Mais je trouve la procédure de firefox 3 pour forcer l'accès au site bien trop contraignante.

Pour améliorer un peu ceci, voici 2 options à lancer pour vous faire gagner un peu de temps lorsque vous tombez sur un site https mal sécurisé. Allez à l'url "about:config" et changez les options suivantes :

browser.ssl_override_behavior -> 2
browser.xul.error_pages.expert_bad_cert -> true

L'avertissement reste et vous aurez toujours besoin d'ajouter des exceptions, ça sera juste un peu plus rapide.

Flash

Je vous rappelle un précédent article sur comment installer flash avec firefox si vous êtes sur une distribution 64 bits. Il est toujours valable.

Niveau : Star Star Empty Empty Empty
Résumé : clusterssh, clusterm, konsole, dsh, pssh

Bonjour à tous, très honoré d'être à la tribune de ce blog, mais on m'a forcé la main !

Pour rebondir sur un post récent (tout juste un an !), voici quelques outils pour travailler efficacement sur un groupe de machines.

Konsole et dsh, les ancêtres

Comme Peck l'avait présenté, pour envoyer une même suite de commandes sur un groupe de machines, on peut soit le faire à l'aveugle avec Konsole (si on supporte KDE), soit lancer ses commandes coûte que coûte avec dsh, mais sans contrôle encore une fois sur le déroulement.

Avec Konsole : préparez dans une même fenêtre une machine à contrôler par onglet, puis dans les menus : View > Send Input to All Sessions. Désormais, tout ce que vous tapez est répété dans toutes les fenêtres.

Avec dsh :

 dsh -m machine1 -m machine2 commande

Attention, n'oubliez pas que votre commande est d'abord interprétée par votre shell. Ainsi, comparez :

 dsh -m machine1 -m machine2 -m ... "echo $HOSTNAME"
 dsh -m machine1 -m machine2 -m ... 'echo $HOSTNAME'

Relisez l'article pour apprendre comment créer des groupes de machines avec dsh.

clusterssh et clusterm

Mais si on désire surveiller ce qui se passe sur toutes les machines, et ainsi avoir un contrôle visuel, et au besoin effectuer une correction sur une machine en particulier, alors des outils graphiques rendent bien service, en affichant dans un terminal distinct chacune des machines que l'on contrôle. Par ici pour des captures d'écran, et un petit article de présentation de clusterssh !

Vous pouvez définir vos groupes de machines dans le fichier /etc/clusters :

groupe1 machine1 machine2 machine3 machine4 machine5 machine6 machine7 machine8 machine9
groupe2 machine10 machine11 machine12 machine13 machine14 machine15
all groupe1 groupe2

Dès lors, un

cssh groupe1 # vous ouvre un terminal sur machine1 à machine 9
cssh groupe2 # vous ouvre un terminal sur machine10 à machine15
cssh all # pour machine1 à machine15

Si vous avez des ports particuliers, des utilisateurs particuliers à utiliser sur certaines machines, pensez à votre ~/.ssh/config :-)

Et comme indiqué dans les commentaires, une alternative à clusterssh est clusterm, qui est un peu plus eye-candy et offre en plus la merveilleuse fonctionnalité d'afficher les différences entre les écrans, à la vimdiff, très pratique pour comparer rapidement des fichiers de configuration entre n machines distinctes ! Malheureusement, ce programme n'est pas packagé pour Debian, libre à vous de lancer une ITP dessus ;-)

Toutefois, des paquets pour ubuntu existent (ils marchent aussi sous debian), il suffit de récupérer les 2 .deb proposés et de les installer à coup de dpkg -i.

Pas de fichier de configuration de groupe pour ce programme, mais plusieurs options :

 alias clusterm-groupe1='clusterm machine1 machine2 machine3 machine4 machine5 machine6 machine7 machine8 machine9'

ou bien constituer votre groupe "à la main" dans l'interface, en ouvrant successivement vos shells sur chacune des machines indiquées, puis enregistrer votre session (menu fichier) sous forme d'un raccourci à placer sur votre bureau :-)

pssh

Une autre petite suite d'outils bien sympathique est pssh, qui propose diverses commandes comme parallel-ssh (équivalent de dsh -c), parallel-nuke, parallel-scp ou parallel-slurp (son contraire).

Le plus simple est de lire ce qu'indique la description du paquet (apt-cache show pssh) :

  • Parallel ssh (parallel-ssh, upstream calls it pssh), executes commands on multiple hosts in parallel
  • Parallel scp (parallel-scp, upstream calls it pscp), copies files to multiple remote hosts in parallel
  • Parallel rsync (parallel-rsync, upstream calls it prsync), efficiently copies files to multiple hosts in parallel
  • Parallel nuke (parallel-nuke, upstream calls it pnuke), kills processes on multiple remote hosts in parallel
  • Parallel slurp (parallel-slurp, upstream calls it pslurp), copies files from multiple remote hosts to a central host in parallel
# Tout d'abord, constituer un fichier groupe1.txt contenant une machine par ligne
parallel-ssh groupe1.txt uptime

# Récupérer dans des répertoires relatifs au nom des serveurs un fichier donné sur chacun des serveurs
mkdir -p /tmp/slurp
parallel-slurp -h groupe1.txt -L /tmp/slurp /etc/hostname hostname
ls -lR /tmp/slurp

# Tuer apache* sur tout un groupe de machines
parallel-nuke -h groupe1.txt apache

# Pousser un fichier localement sur toutes les machines
parallel-scp -h groupe1.txt toto.pl ~/toto.pl

Ailleurs

Autrement, d'autres outils du même acabit existent, vous trouverez ici une liste non exhaustive. N'hésitez pas à partager ici vos découvertes !

À plus peut être pour une nouvelle aventure, si vous le voulez bien :-)

Niveau : Star Star Star Empty Empty
Résumé : kdmctl

Un chanteur me faisait justement remarquer hier que j'oubliais la population kdeiste au profit des gnominés (et encore on peut très bien utiliser kdm avec gnome). Comme je ne suis pas sectaire je vais de ce pas réparer cette injustice.

Nous cherchons donc une commande permettant de commander kdm, et comme par hasard, elle existe. Commençons par lancer un ouvel écran de connexion :

$ kdmctl reserve

Tout comme gdmflexiserver, kdmctl locke l'écran en cours. Par contre, il ne permet pas de lancer la nouvelle connexion sur un Xnest, à la place il propose une option permettant de fermer cet écran automatiquement au bout d'un timeout.

Le manuel de kdmtcl nous révèle d'autres commandes :

# Change le serveur en cours d'affichage
$ kdmctl activate :2

Vous trouverez aussi une commande pour éteindre proprement la machine ou pour connecter automatiquement un utilisateur après un timeout donné.

Voila, vous pouvez maintenant scripter kdm aussi bien que gdm.

Niveau : Star Star Star Empty Empty
Résumé : gdmflexiserver

Il existe une commande bien sympathique qui permet de lancer une nouvelle session gdm sans couper la dernière. En effet, lorsque vous avez une session ouverte avec gdm, le serveur X est occupé et ne vous permet donc pas de vous connecter sous un autre utilisateur. Ceux qui ont une distribution bien léchée ont déjà un bouton changer d'utilisateur qui permet ce genre de chose. Comment se fait-ce ?

Celles-ci utilisent la commande gdmflexiserver. Cette commande demande directement à gdm de lancer un nouveau serveur X et d'y ouvrir un nouvel écran de connexion.

$ gdmflexiserver

Notez au passage que gdm locke le serveur d'origine, ce qui empêchera le nouveau venu de faire un petit ctrl-alt-Fx pour se faire passer pour vous sans votre mot de passe.

Petite option utile, gdmflexiserver permet d'ouvrir la nouvelle session dans une fenêtre à l'intérieur de la première en utilisant Xnest. Grâce à quoi vous pourrez par exemple lancer une session gnome propre plutôt que de vous embêter à gérer le lancement de votre Xnest à la main.

$ gdmflexiserver -n

En pratique gdmflexiserver implémente une communication générique avec le démon gdm, ce qui veut dire qu'il peut être utilisé pour d'autres choses. Par exemple, récupérer la version de gdm qui tourne :

gdmflexiserver -c VERSION

La liste des commandes disponibles ne se trouve que dans le source de gdm, mais elles sont tout de même documentées. Pour les trouver, cherchez les constantes commençant par GDM_SUP_ dans gdm.h. Notez que certaines commandes nécessitent une authentification préalable (avec l'option -a) :

$ gdmflexiserver -a -c QUERY_VT

Grâce à cette commande, vous pourrez scripter ce qui vous intéresse. Essayez par exemple changer la configuration de gdm en direct.

Niveau : Star Star Star Empty Empty
Résumé : esd -tcp -public

Au commencement était la carte perforée, Puis il y eut le clavier et l'imprimante, qu'on améliora en terminal. Et enfin il y eut le terminal X, mais la course ne s'arrête pas là. Il nous manque encore le son.

Hé bien, nous allons nous y mettre ! Je ne vous parlerai que du cas de gnome, probablement adaptable à kde. Écrivez moi si vous avez la recette.

Tout d'abord, il vous faut une machine sous gnome et un dm (gdm, kdm, xdm ...) qui accepte les connexions XDMCP (ce n'est pas indispensable, mais tellement plus pratique).

Connectez-vous d'abord sous gnome, puis lancez

$ gstreamer-properties

Modifiez le plugin de sortie pour esd, et faites un test pour vérifier que le son fonctionne.

Maintenant déconnectez-vous et mettez-vous sur une autre machine. Lancez esd, puis xorg :

$ esd -tcp -public -nobeeps -terminate &
$ Xorg -query lamachine distante

Et voilà, après vous être connecté sous gnome, vous aurez le son pour les applications gnome.

Si vous n'êtes pas en xdmcp, ou si vous voulez faire fonctionner le son pour une application seulement, il vous faudra changer une variable juste avant de lancer l'application en question

$ export ESPEAKER=machine.avec.esd:16001

Maintenant supposons que votre machine faisant l'affichage soit un windows. C'est toujours possible !

Utilisons Xming, ainsi que esd pour windows.

Il vous faudra un Xming installé et un fichier xlaunch fonctionnel : lancez xlaunch et juste avant de lancer le serveur X, cliquez sur sauvegarder. Il vous faudra aussi avoir extrait le paquet esound pour windows.

Et créons un batch pour tout ceci :

call c:\esd.bat
c:\xming\xlaunch.exe -run c:\linux.xlaunch

Et dans le esd.bat

c:\esd\esd -tcp -public -nobeeps -terminate

Bien, sûr, adaptez à vos emplacements. Notez au passage que Xming supporte très bien l'openGL et par conséquent, un certain nombre de jeux fonctionneront mieux à distance sous windows que sous linux (moins depuis l'existence de AIGLX).