Fedora-Fr - Communauté francophone Fedora - Linux

Planet de Fedora-Fr : la communauté francophone autour de la distribution Linux Fedora

A propos

Cette page est actualisée toutes les heures.

Cette page est une sélection de blogs autour de Fedora. Fedora-Fr.org décline toute responsabilité au sujet des propos tenus par les auteurs des blogs de ce planet. Leurs propos sont leur entière responsabilité.

Le contenu de ce planet appartient à leurs auteurs respectifs. Merci de consulter leur blogs pour obtenir les licences respectives.

Mot-clefs : X11

La GUI du Jeudi : Remmina - Une interface de gestion de connexion à distance

Paquet Fedora du jour

remmina Remmina est une application de gestion d'accès aux machines type Unix et Windows. Ce logiciel libre est un gestionnaire de connexions disponible sous notre distribution préférée qui permet de conserver, classer et échanger différentes connexions à des serverus ou pc.

Il permet de se connecter via les protocoles suivants :

  • RDP (Terminal Server)
  • VNC (VNC Server)
  • NX (FreeNX Server)
  • XDMCP (X11 Server)

Personnelement, je trouve dans un cet outil un bon remplaçant de tsclient !

Installation en ligne de commande : yum install remmina remmina-plugins-rdp remmina-plugins-vnc remmina-plugins-nx remmina-plugins-xdmcp

Installation avec l'interface graphique : Outils d'administration > Remote Desktop Client

Localisation dans le menu : Applications > Internet > Client de bureau à distance Remmina

Lancement en ligne de commande : /usr/bin/remmina

Site web : http://remmina.sourceforge.net

Xmonad, le bureau productif orienté terminal

Patrice Ferlet

Vous utilisez certainement Gnome, KDE, ou XFCE (entre autre) pour afficher vos programmes. Le gestionnaire de fenêtre vous permet de déplacer le programme sur votre écran via la souris, vous avez des menus, des racourcis qui vous permettent de gérer tout ça. Je ne critique pas ce principe, il est pratique, assez standard et bien adapté à la plupart des utilisateurs. Mais nous ne sommes pas tous identiques. Certains, comme moi, utilisent surtout des terminaux, et n'aiment pas devoir passer la main du clavier à la souris pour gérer son espace de travail. Pire encore, nous n'avons en général pas besoin de la barre de titre, et devoir placer les fenêtres sur le bureau est une chose qui peut vraiment être un frein à la productivité.

Outre le coté production, il y a l'ergonomie. L'ergnonomie ne signifie pas forcément "pouvoir tout déplacer à la souris et avoir plein d'infos sur les fenêtres". En fait, tout est relatif. Si un bureau me propose de placer mes fenêtres et que j'ai juste les informations nécessaires, je trouve cela ergonomique. Car je n'ai finalement que ce dont j'ai besoin. Mais sans pour autant me limiter, car dans tous les cas, je peux retrouver les informations supplémentaires si je connais mon outil.

Je trouve le terminal ergonomique. Ça peut vous étonner, mais la plupart des utilisateurs du terminal qui ont passé un peu de temps à apprendre à s'en servir vous le dira. Le terminal est finalement bien plus simple et plus adapté à un travail quotidien. Je n'enlève pas l'utilisation du navigateur internet, ni des outils de création (image, films, 3D, musique...) mais pour le reste, tout est gérable via des lignes de commande. Je sais ce que vous vous dites... "il est fou, tout faire en ligne de commande...", mais pourtant si vous passiez un peu de temps à apprendre le principe, vous vous rendrez compte de la puissance et de la simplicité de son utilisation.

Revenons au gestionnaire de fenêtre. J'ai toujours au moins 4 ou 5 terminaux ouverts, et passer de l'un à l'autre n'est pas si ergonomique que cela sous Gnome ou KDE pour ne citer qu'eux. ALT+TAB ou souris, dans tous les cas je ne vois pas clairement quelle fenêtre je vais avoir tant qu'elle n'est pas affiché. Le fait est que dans 80% des cas, les fenêtres se recouvrent les unes sur les autres. Encore une fois, je concois que cela peut être utile et agréable pour certain, mais pas pour moi.

Et là, une fois de plus, avoir un système d'exploitation libre vous donne un choix, adapté, et vraiment viable. Il existe une autre famille de gestionnaire de fenêtre nommé "tiling desktop" ou "bureau en mosaïque". Ce genre de gestionnaire de fenêtre permet de placer les fenêtre selon des "layout" (mise en page) automatisés et modifiables. Pour en citer quelques uns: awsome, wmii, ion3, Xmonad...

Alors pourquoi mon choix se porte sur XMonad ? Parce que ce dernier est très poussé en terme de configuration et n'a pas de décoration de fenêtre. C'est selon moi la meilleure gestion de bureau que je connaisse dans le domaine des tiling desktop.

Pour vous expliquer le fonctionnement, et surtout pour configurer votre bureau, je vais vous donner quelques clefs.

Tout d'abord, sous fedora, on va installer les outils nécessaires pour:

  • utiliser xmonad
  • avoir quelques outils pratiques
  • avoir des terminaux bien plus sympas
  • se passer de la plupart des outils "graphiques" forcés sous d'autres gestionnaires (navigation de fichier par exemple)

On commence:

su -c "yum install xmonad xmobar dmenu mc xscreensaver feh rxvt-unicode"

Bien, si vous quitter votre session, vous aurez donc le choix d'utiliser xmonad dans le gdm ou kdm (la fenêtre de connexion). Si vous choisissez Xmonad vous allez avoir un terminal qui va s'ouvrir avec le manuel de Xmonad... et rien d'autre.

C'est bien Xmonad... épuré au maximum. Vous avez compris... il va falloir configurer un peu le bureau pour avoir un truc plus sympa. En premier lieu, ne paniquez pas et pressez ALT+Shift+c pour fermet le manuel puis ouvrez un autre terminal avec ALT+shift+Enter.

Dans ce terminal, vous allez ouvrir avec vim le fichier ~/.xmonad/xmonad.hs

Placez y ce contenu:

import XMonad
import XMonad.Config.Azerty
import XMonad.Hooks.DynamicLog


-- The main function.
main = xmonad =<< statusBar myBar myPP toggleStrutsKey myConfig

-- Command to launch the bar.
myBar = "xmobar"

-- Custom PP, configure it as you like. It determines what's being written to the bar.
myPP = xmobarPP { ppCurrent = xmobarColor "#429942" "" . wrap "<" ">" }

-- Keybinding to toggle the gap for the bar.
toggleStrutsKey XConfig {XMonad.modMask = modMask} = (modMask, xK_b)

-- Main configuration, override the defaults to your liking.
myConfig = azertyConfig { 
    terminal           = "urxvt -depth 32 -tr -tint rgb:2222/2222/2222 +sb -fg white -bg rgba:0000/0000/0000/7777 -fade 15 -fadecolor black -pr black -pr2 white"
    , logHook = dynamicLog
 }

Fermez, et tenter de compiler la configuration:

xmonad --recompile

Si une erreur apparait, vérifiez bien le contenu du fichier.

Avant de relancer xmonad, on va aussi configurer xmobar... et ce dans le fichier ~/.xmobarrc

Config { font = "-*-Fixed-Bold-R-Normal-*-13-*-*-*-*-*-*-*"
       , bgColor = "black"
       , fgColor = "grey"
       , position = TopW L 100
       , commands = [ Run Weather "LFLY" ["-t"," <tempC>°","-L","64","-H","77","--normal","green","--high","red","--low","lightblue"] 36000
                    , Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
                    , Run Memory ["-t","Mem: <usedratio>%"] 10
                    , Run Swap [] 10
                    , Run Date "%a %b %_d %H:%M" "date" 10
                    , Run StdinReader
                    ]
       , sepChar = "%"
       , alignSep = "}{"
       , template = "%StdinReader% }{ %cpu% | %memory% * %swap%    <fc=#ee9a00>%date%</fc> | %LFLY%"
       }

Dans ce fichier, remplacer le code "LFLY" par celui de votre ville (ici Lyon Bron), dans le fichier il est à deux endroits, donc remplacez bien tout. Pour trouvez votre code, allez à la page http://weather.noaa.gov et prenez le code qui apparait dans l'url...

Bon, cette fois ci, on peu relancer xmonad... Pressez ALT+q

Hop, xmonad se recharge. Pressez ALT+1 ou 2, 3... changement de bureau. Le clavier azerty est donc bien géré et vous avez théoriquement une barre en haut qui indique quelques infos.

Bon, fermez le terminal en cours ALT+shift+c et relancez en un: ALT+shift+Enter... ha voulà urxvt en mode semi transparent :)" class="smiley ouvrez en un autre, hop l'écran se coupe en deux

Puis un autre... et un autre....

Pour vous déplacer, utilisez la souri (haaan) ou simplement alt+k ou alt+j. Et pour redimensionner les colonnes: alt+h ou alt+l

Pour augmenter le nombre de fenêtre possible sur la colonne principale (à gauche) alt+, et pour en retirer alt+.

Bon assez jouer... on va maintenant faire en sorte de lancer pulseaudio, xscreensaver et changer ce foutu fond d'écran.

Créé un fichier, par exemple j'utilise ~/bin/xmonad-startup et posez ceci dedans:

#!/bin/bash

#prevent running commands on xmonad restart
#I choose xscreensaver because it is stopped at xmonad shutdown
[ "$(ps --noheader -C xscreensaver -o pid)" ] && exit 0

#commands to lauch
xscreensaver &
feh --bg-fill ~/Images/backgrounds/OTHER-Tuxsta_1600x1200.png
synclient VertTwoFingerScroll=0 VertEdgeScroll=1
pulseaudio --start

Reste à demander à xmonad de les lancer au chargement:

import XMonad
import XMonad.Config.Azerty
import XMonad.Hooks.DynamicLog


-- The main function.
main = xmonad =<< statusBar myBar myPP toggleStrutsKey myConfig

-- Command to launch the bar.
myBar = "xmobar"

-- Custom PP, configure it as you like. It determines what's being written to the bar.
myPP = xmobarPP { ppCurrent = xmobarColor "#429942" "" . wrap "<" ">" }

-- Keybinding to toggle the gap for the bar.
toggleStrutsKey XConfig {XMonad.modMask = modMask} = (modMask, xK_b)


-- my startup
myStartup :: X ()
myStartup = do
    spawn "~/bin/xmonad-startup"

-- Main configuration, override the defaults to your liking.
myConfig = azertyConfig { 
    terminal           = "urxvt -depth 32 -tr -tint rgb:2222/2222/2222 +sb -fg white -bg rgba:0000/0000/0000/7777 -fade 15 -fadecolor black -pr black -pr2 white"
    , logHook = dynamicLog
    , startupHook = myStartup
 }

On recompile: xmonad --recompile et on relance ALT+q

Bon, reste à connaitre quelques outils pour utiliser xmonad sans avoir besoin d'utiliser trop d'outils graphique:

  • dans un terminal: alsamixer => gestion du volume
  • dans un terminal: mc => gestionnaire de fichier
  • pour lancer un programme sans passer par un terminal: ALT+p et commencez à taper le nom du programme, l'auto completion est gérée

Vous pourrez trovuer des fichier "ini" de "+mc" pour le rendre plus joli. Utilisez aussi weechat pour aller sur IRC, vous allez voir que finalement c'est plus clair et efficace.

Un dernier racourcis ? ALT+Shift+Q et vous quittez Xmonad :)" class="smiley

Bon, sinon, utilisez des petits scripts pratique pour votre utilisation, par exemple j'ai un script "~/bin/dodo" qui met en veille "mémoire" mon pc:

#!/bin/bash
su -c "echo -n mem > /sys/power/state"

ou encore un script pour lancer weechat en me connectant avec mon login/pass + ouverture des canaux que j'aime bien:

#!/bin/bash
weechat-curses irc://VOTREUSERICI:VOTREMOTDEPASSEICI@irc.freenode.net/#fedora-fr,#blender-fr,#node.js,#blendercoders,#xmonad

VOTREUSER et VOTREMOTDEPASSE sont les user et mot de passe que vous utilisez sur IRC...

Bon voilà... à vous d'apprendre les trucs et astuces, vim ou emacs, uzbl-brower au lieu de google-chrome (étonnant ce truc, merci WilQu) et j'en passe... vous allez vous rendre compte aussi que "mc" permet de connecter un serveru distant sur la vue de gauche (cherchez un peu dans les menu avec F10) et permet même l'édition. Essayez aussi le racourcis CTRL+O dans mc... sympa non ?

Bon allez une capture, parce que vous êtes gentils (faites avec scrot):

Xmonad

Voilà, bon ba à vous hein.

Catpure vidéo écran screencast sous Fedora avec ffmpeg

Patrice Ferlet

La capture vidéo d'écran est un sujet maintes fois soulevé sous Linux et il existe de jolis services fais pour ça. Mais quand ça ne marche pas on a du mal à trouver des solutions simples... Istanbul, gtk-recordMyDesktop, je les ai essayé... mais à chaque fois un souci apparait, soit avec le son, soit avec la vidéo. Alors pourquoi ne pas passer par la ligne de commande ? ffmpeg est juste parfait ! alors on se lance. Encore une fois, si je trouve pas ce qui me plait, je le code :)" class="smiley donc vous aurez un script en bas de billet qui fait tout ça.

En premier lieu, le but est d'avoir: une vidéo de bonne qualité, capture du son depuis un micro, et un contrôle possible de la zone à sauver. Bref, il nous faut chercher tout ça dans les documentations. Comme je suis gentil, je vous donne au fur et à mesure la méthode, et même un petit script qui va vous aider.

Permière tâche à effecturer: capturer l'écran. ffmpeg à un format d'entré nommé "x11grab". Ce format d'entrée permet d'utiliser un port X de capture. Dans la majeur partie des cas on utilise "0.0"

Il faut par contre définir une taille obligatoirement, mon écran est de résoltion 1366x768. On trouve facilement la configuration de cette manière:

xrandr
creen 0: minimum 320 x 200, current 1366 x 768, maximum 1600 x 1600
LVDS connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
   1366x768       60.0*+
   1360x768       60.0  
   1280x768       60.0  
   1280x720       60.0  
   1024x768       60.0  
   1024x600       60.0  
   800x600        60.0  
   800x480        60.0  
   640x480        60.0  
DFP1 disconnected (normal left inverted right x axis y axis)
CRT1 disconnected (normal left inverted right x axis y axis)

Il faut aussi spécifier la fréquence de frame par seconde, 15 est un minimum, mais 25 ou 30 images par seconde est plus fluide. Bref...

Donc, pour capturer l'écran:

ffmpeg -f x11grab -i 0.0 -s 1366x768 -r 25 -y /tmp/out.avi

Cela fonctionne bien, en pressant "q" dans la console on coupe la capture, voyez ensuite la vidéo:

ffplay /tmp/out.avi

Niveau qualité... moyen... on ajoute alors un débit de lecture pour s'assurer d'un bon rendu. Personnellement j'ai trouvé que 7000kb/s est pas mal du tout:

ffmpeg -f x11grab -i 0.0 -s 1366x768 -r 25 -b 7000k -y /tmp/out.avi

Voilà. Pour le moment on a bien une manière de capturer la vidéo. Reste à capturer du son. ffmpeg sait très bien capturer le son depuis votre interface alsa.

Tout le problème est de savoir quel est l'identifiant alsa à capturer... personnellement j'ai une webcam avec micro, une carte hdmi qui peut sortir du son et une interface interne pour sortir du son sur mes enceintes... bref, 3 cartes...

L'investigation est en fait très simple, Linux a cet avantage de tout faire dans des fichiers ou pseudo fichiers. Nos cartes sons sont en fait interrogeables depuis /proc/asound qui nous donne un paquet d'informations.

Regardons:

D'abords je cherche ma webcam... ne vous fiez pas au nom complètement batard que vous allez voir, c'est juste que cette webcam envoit un nom bien affreux. Dans les autres cas vous verrez certainement des choses plus lisibles.

cat /proc/asound/cards
 0 [U0x46d0x825    ]: USB-Audio - USB Device 0x46d:0x825
                      USB Device 0x46d:0x825 at usb-0000:00:1d.0-1.2, high speed
 1 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xb4100000 irq 44
 2 [Generic        ]: HDA-Intel - HD-Audio Generic
                      HD-Audio Generic at 0xb4020000 irq 45

donc ici on voit mes 3 cartes, La Intel, la Generic et ma webcam avec ce fameux nom "U0x46d0x825". Ce qui nous intéresse ici c'est surtout l'index, le permier chiffre qui apparait sur la première colone. Ma webcam (ou du moins son interface de son) est "0". Cela va vouloir dire que nous utiliserons ce chiffre pour définir la carte à utiliser.

Attention, un carte peut avoir plusieurs interfaces de capture, par exemple une entrée "line in" et "mic"... il faut donc trouver quel est l'interface qui nous convient. Cela se passe dans un second fichier:

cat /proc/asound/devices 
  2:        : timer
  3:        : sequencer
  4: [ 1- 0]: digital audio playback
  5: [ 1- 0]: digital audio capture
  6: [ 1- 0]: hardware dependent
  7: [ 1]   : control
  8: [ 2- 3]: digital audio playback
  9: [ 2- 0]: hardware dependent
 10: [ 2]   : control
 11: [ 0- 0]: digital audio capture
 12: [ 0]   : control

Ce qui est intéressant ici, c'est la seconde colonne, elle spécifie l'index de la carte suivi de l'index d'interface. Dans notre cas, pour ma webcam, je cherche l'index 0, c'est à dire les ligne préfixées par 11 et 12. On voit que l'interface 0-0 est une entré de capture de son... parfait !

La notation alsa est simple: "hw:" suivit de l'index, une virgule, le numéro d'interface. Ma webcam est représentée par "hw:0,0"

ainsi, ffmpeg me permet d'enregistrer du son depuis mon micro de cette manière:

ffmpeg -f alsa -i hw:0,0 -y /tmp/out.ogg

Et de ce fait, /tmp/out.ogg est un fichier son qui a enregistré ma voix depuis ma webcam. Bon, et bien allons y maintenant, on va utiliser les deux flux (vidéo et audio) et on les envoit dans un fichier:

ffmpeg -f x11grab -i 0.0 -s 1366x768 -r 25 -b 7000k -f alsa -i hw:0,0 -y /tmp/out.avi

Evidamment, vous pouvez utiliser d'autres formats de sortie, comme le webm, libx264, ogv, etc...

C'est bien gentil mais chercher ma carte son, etc... pas cool hein ? et bien on va simplifier tout ça via du bash avec zenity... comme ça ce sera plus simple.

On va utiliser un petit programme que j'ai trouvé sur le net qui permet de faire une sélection sur X:

wget https://github.com/lolilolicon/ffcast/raw/master/xrectsel.c --no-check-certificate
$(grep -Eo "gcc(.*)" xrectsel.c)
su -c "install xrectsel /usr/local/bin/"

Cela a installé une commande nommé xrectsel sur votre système, dans /usr/local/bin

Reste à faire un script pour lire les coordonnées, choisir le périphérique de capture et enfin lancer la capture...

Plutôt que de chercher les infos dans /proc/asound/devices et cards, je vais utiliser une autre méthode, plus adapté au scripting, qui consiste à chercher les cartes et leur capacité dans /proc/asound/cardN où N est un numéro. En lisant les fichiers pcmNc/info, j'aurais toutes les informations nécessaires. Par exemple:

cat /proc/asound/card0/pcm0c/info
card: 0
device: 0
subdevice: 0
stream: CAPTURE
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1

Voici le script, moins de 100 lignes:

#!/bin/bash
#author Patrice Ferlet - Metal3d@gmail.com - http://www.metal3d.org
#Licence: GPLv3
 
#get Desktop dir for user
DESKTOP=$HOME/Desktop
if [[ -f ~/.config/user-dirs.dirs ]]; then
    source ~/.config/user-dirs.dirs
    DESKTOP=$XDG_DESKTOP_DIR
fi
 
getCards(){
    ## this function seeks every sound card that can be use to capture sound (mic, line in...)
 
    #find cards directory
    i=0
    capdevices=""
    while [[ -d /proc/asound/card$i ]]
    do
        #find pcmNc
        capdevices=$capdevices" "$(find /proc/asound/card$i -name "pcm*c" -type d)
        i=$((i+1))
    done
 
    for cap in $capdevices
    do
        #get options... index, subdevice etc...
        card=$(awk '/^card: /{print $2}' $cap/info)
        dev=$(awk '/^device: /{print $2}' $cap/info)
        subdev=$(awk '/^subdevice: /{print $2}' $cap/info)
        name=$(awk -F":" '/^name: /{print $2}' $cap/info)
        name=$(echo $name | sed 's/ /\-/g')
        echo "hw:$card,$dev,$subdev" "$name"''    
        echo
    done
 
}
 
__ffcast(){
    #lauch ffmpeg with options
    winsize=$1
    off=$2
    asound=$3
    options=$4
    file=$(echo "$options" | awk '{print $NF}')
 
    #run ffpmeg and get pid
    ffmpeg -f x11grab -s $winsize -r 30 -i :0.0+$off  -f alsa -i $asound $options &
    pid=$!
    zenity --notification \
        --window-icon /usr/share/icons/gnome/scalable/actions/media-record-symbolic.svg \
        --text "to stop ffcast, press icon" 2>/dev/null
    kill $pid
    zenity --info --title "Screencast stopped" --text "$file has been saved" 
}
 
chooseFFopts(){
    #this function allows you to choose output formats; it returns options + filename
    file=$DESKTOP/"screencast-"$(date +"%Y.%m.%d-%H:%M")
    ogv="-b 9000k $file.ogv"
    webm="-b 9000k $file.webm"
    avi="-b 9000k $file.avi"
    response=$(zenity --list --column "Format" avi x264 ogv) || exit 1
    echo ${!response}
}
 
main(){
    #main function
 
    captures=$(getCards)
    interface=$(zenity --title "Choose a sound device to capture" \
            --list --column "Port" \
            --column "Interface name" $captures) || exit 1
 
    #run xrectset to get a X rect selection made with mouse
    coords=$(xrectsel | sed 's/\+/ /')
    win=$(echo $coords | awk '{print $1}')
    offset=$(echo $coords | awk '{print $2}' | sed 's/\+/,/')
 
    #get ffmpeg options
    opts=$(chooseFFopts)
 
    #prepare screencast
    zenity --question \
        --title "Capture will begin after you press OK" \
        --text "An icon will appear in notification, press it to stop screencast"\
        --ok-label "Start screencast"\
        --cancel-label "Cancel" || exit 1
 
    #run screencast
    __ffcast $win $offset $interface "$opts"
}
 
#run main function
main

Sauvez ce fichier dans /usr/local/bin/ffmpeg-screencast (en root) et rendez le exécutable

su -c "chmod +x /usr/local/bin/ffmpeg-screencast"

Créez vous un lanceur dans le bureau, c'est plus sympa je trouve...

Vous le lancez, on vous propose de capturer l'audio sur ce qu'on trouve, puis vous faites une boite de sélection... reste ensuite à lancer le screencast. Une icone ronde apparait dans barre de notification, si vous cliquez dessus alors la capture s'arrête. Dans votre bureau apparait alors la capture vidéo que vous vouliez.