Volted.net

Libertés numériques et autres utopies...

6 commentaires

En recherchant il y a quelques mois une nouvelle distribution pour mon ordinateur professionnel, j'ai (re)découvert openSUSE. Quelques mois après, je vous propose ici mon retour d'expérience.

Pourquoi changer ?

Jusqu'à présent j'utilisais Debian, ma distribution de choix depuis 2012. J'en étais jusqu'à très content, j'ai passé plus de 2 excellentes années sous Wheezy, version grâce à laquelle j'ai appris et expérimenté énormément de choses, puis 1 an et demi sous Jessie. J'ai rencontré un peu plus de petits désagréments avec Jessie. Rien de grave mais je me suis moins éclaté qu'avec Wheezy.
Bref, depuis début 2016, la société dans laquelle je travaille utilise Fedora sur les postes clients. Avec plusieurs mois de retard, je me suis mis, j'ai d'ailleurs rédigé un billet là-dessus. Ce n'est pas un mauvais système mais 2 choses principalement m'ont déplu :

  • le cycle de release, trop rapide. Qui a dit "obsolescence programmée" ? ;)
  • le gestionnaire de paquet, dnf, que je n'apprécie pas, le trouvant trop pataud.

Je voulais donc autre chose, une distribution équilibrée, avec un cycle de release décent (annuel, pas moins) tout en disposant d'ensemble de paquets pas trop vieux et contenant tous les outils professionnels dont j'ai besoin.

Choisir et tester :

Avec ces considérations en tête, le tour a été relativement vite fait et j'ai établi un comparatif entre 3 distributions :

  • Debian (stable évidemment) ;
  • CentOS 7 ;
  • openSUSE Leap 42.2 (qui était alors à 2 semaines de sa sortie en stable).

J'ai monté 3 machines virtuelles, établi une grille de critères reprenant, entre autres ceux, énoncés ci-dessus et essayé ces 3 systèmes dans tous les sens, avec des configurations égales (autant que possible) et en essayant les mêmes paquets.

Le projet Debian fournit très clairement l'ensemble de paquets le plus complet et le plus cohérent (j'entends par là qu'ils sont tous dans un seul dépôt (jusqu'à 3 si on active contrib et non-free).
Les dépôts de base de CentOS m'ont paru plus "pauvres" mais contiennent la très grande majorité des outils nécessaires sur un poste de travail. La "fraîcheur" des versions est variable, mais à l'image d'une Debian stable dans l'ensemble. Un certain nombre d'outils plus spécifiques requièrent l'ajout du dépôt EPEL.
Je n'ai pas apprécié l'utilisation de yum que je trouve assez lent dans l'ensemble, surtout comparé à apt (apt-get) qui est tout de même très rapide.
Les dépôts d'openSUSE se répartissent en 4 catégories :
- les dépôts officiels, avec des branches libres et non-libres, équivalentes à main et non-free chez Debian ;
- les dépôts communautaires qui contiennent des paquets ne pouvant être incorporés dans les dépôts officiels, souvent pour des raisons de licences, par exemple le dépôt Packman qui contient les codecs nécessaires pour lire des vidéos (aux formats mp4, avi etc...) ;
- les dépôts "spécialisés" qui regroupent des paquets de même catégorie (applis pour environnement Gnome, applis pour graphisme, applis en console etc...) ;
- les dépôts "home", équivalents aux dépôts Copr de Fedora, qui hébergent les paquets créés par des particuliers.
Le dépôt officiel libre contient tous les logiciels dont j'aurai besoin donc pas besoin d'avoir recours aux autres, à l'exception de Packman.
Concernant ce dernier, il est amusant de constater que certains projets séparent les codecs "litigieux" (mp3, mp4 etc...) et d'autres non, c'est le cas de Debian par exemple.

Les installeurs

Un des aspects importants lorsqu’on installe un OS c’est... l’installeur pardi !
Installer successivement ces trois distributions fut l’occasion de comparer les installeurs et ils sont vraiment très différents !

L’installeur Debian est simple et direct (je l’utilise en mode texte mais le mode graphique est similaire et n’offre rien de plus). Il ne permet pas de paramétrer grand chose, juste l’essentiel. Et surtout il ne faut pas avoir à installer en comptant sur une connexion wifi. C’est un peu la croix et la bannière pour tenter de fournir un pilote de carte wifi via un supporte externe durant le processus d’installation.
Cela dit, il est rapide et en gros, ça s’installe en cliquant successivement sur la touche Entrée.

L’installeur de CentOS,, Anaconda, qui est le même que celui de Fedora, est pareil, basique, très axé serveur. Il propose plusieurs profils d’installation pour serveurs spécialisés ou pour stations de travail, ce qui est sympa pour fournir une base prête à l’emploi.
J’ai moins apprécié la partie partionnement que j’ai trouvé moyennement intuitive.

L’installeur d’openSUSE est de très loin le plus complet. C’est le plus long à se lancer mais il permet de tout configurer avant installation. On peut ainsi configurer finement la partie réseau, l’outil de partitionnement est très complet (c’est le même module qu’on retrouve par la suite dans Yast). Et chose très appréciable, il permet également de choisir chacun des paquets à installer. Pour l’exemple j’ai sélectionné une base «Bureau Gnome» puis j’ai ajouté tous les logiciels complémentaires que je veux et retiré ceux qui me sont inutiles. J’ai vraiment apprécié cette possibilité, ça évite d’installer des paquets pour les supprimer 5 minutes plus tard et de démarrer avec un système contenant tous les outils que l’on veut.

Sur chacune des machines virtuelles j’ai tenté de reproduire une configuration identique, à base de bureau Gnome et de tester avec quelle facilité je pouvais installer les logiciels que je voulais.
À ce jeu, Debian s’en sort le mieux au vu de la taille de sa logithèque, suivi d’openSUSE qui dispose de nombreux paquets et peut être facilement étendue via des dépôts communautaires. CentOS est assez loin derrière et tout n’était pas toujours disponible.

Ce qui m’amène à évoquer brièvement les gestionnaires de paquets.
Debian avec apt est le «flash» de l’équipe. Il se lance et exécute les actions très rapidement. Le rafraîchissement des sources est rapide également.
Yum de CentOS est à l’opposé, il est lent à se rafraîchir et parfois semble se bloquer plusieurs longues secondes à la fin d’une installation, avant de rendre la main.
Zypper dans Leap est relativement rapide, moins qu’apt, mais j’ai trouvé que c’était le plus lisible. La coloration syntaxique permet de bien se repérer dans les noms de paquets (la première lettre de chaque est en couleur) et les informations importantes relatives aux modifications apportées sont bien mises en avant.

Bon, faut se décider !

J’utilisais Debian depuis 4 ans et j’avais, il faut bien le dire, envie de changer et de découvrir (vraiment, pas juste le temps d’un test d’une heure en VM) une autre distribution. Les tests semblaient montrer qu’openSUSE pourrait répondre à mes besoins alors pourquoi pas.
J’avais déjà fait usage au travail d’openSUSE en 13.1 et 13.2. Je n’avais pas été 100% conquis alors mais les retours lus ici et là sur cette nouvelle mouture qu’est la Leap m’ont conforté dans ce choix, c’est donc parti pour l’installation en réel.

Here we go !

L’installation s’est très bien passée. Bien que je déplore l’existence de pilotes privateurs pour les cartes wi-fi (les seuls qui m’importent vraiment, n’étant pas un joueur assidu sur PC), force m’est de reconnaître qu’il est difficile de s’en passer et leur inclusion par défaut dans l’installeur d’openSUSE m’a facilité la vie.
Le gestionnaire de partitionnement est très complet et j’ai pu configurer très simplement mes volumes LVM chiffrés.
C’est lors du résumé des options d’installation que j’ai pu choisir plus finement mes paquets, en supprimant les paquets qui me sont inutiles (jeux, gnome-document, gnome-musique etc...) et ajouter ma sélection (notamment Terminator, CherryTree et Keepassx). Un dernier clic et c’est parti, l’installeur fait son boulot et lorsque je reviens 20 min plus tard, mon PC a redémarré et est prêt à l’emploi !

Et alors, c’est bien openSUSE ?

La Leap 42.2 est une distribution moderne et stable. Donc oui, c’est bien, ça fait son travail, ça s’allume le matin, s’éteint le soir et entre les deux je n’ai pas eu de problèmes.
En parlant de Gnome, je tiens à signaler l’excellente intégration de celui-ci. Historiquement openSUSE est considérée comme une distribution pro-KDE mais Gnome est parfaitement intégré et très bien fini. Le fait que la SLED (Suse Linux Entreprise Desktop) utilise Gnome (dans sa version Classique) comme bureau n’y est peut-être pas étranger.
J’ai notamment apprécié de trouver l’ensemble des outils visant à configurer le système directement intégrés aux Paramètres Gnome :

Yast, l’outil historique d’openSUSE permettant de configurer son système graphiquement, est intéressant. Je ne suis pas particulièrement pro « utilitaires monolithiques et graphiques de configuration » car ils ont tendance à masquer la réalité et ne permettent pas d’apprendre à bien éditer des fichiers de configuration, à avoir les bonnes pratiques dans ce cas (faire une copie avant édition...).
Néanmoins, sa présence n’oblige pas à l’utiliser d’une part et n’empêche pas du tout l’édition directe des fichiers de configurations d’autre part.
Ainsi un-e débutant-e pas encore à l’aise pourra quand même gérer aisément certains aspects de son système. Sur ce point, je trouve que le nombre de modules Yast inclus par défaut dans une installation de type « Desktop » un poil trop important. Qui a besoin de gérer des périphériques ISCSI ou des clients NIS sur son portable perso ?
Yast est en revanche très pratique lorsqu’on reprend l’administration de serveurs.

En conclusion, ce changement et ces tests m’ont permis de bien définir mes besoins et les logiciels y répondant, de comparer 3 distributions majeures et toutes très bonnes.
Si je prends autant de plaisir à utiliser openSUSE c’est surtout qu’elle sait se faire complètement oublier, me permettant ainsi de me consacrer à mon travail.

J'espère que ce petit tour d'horizon vous aura donné envie de tester l'une de ces trois distributions et notamment openSUSE, distribution de qualité mais moins connue en France. Des membres de la communauté openSUSE France en expliquent les raisons dans une interview accordée à Framasoft : OpenSUSE, une distribution méconnue.

Voir aussi : un autre billet rapide rédigé sur ce choix sur Alionet : Pourquoi j’ai fait le choix de Leap 42.2 pour mon travail

Aucun commentaire

Note : cet article est un repost sur mon blog de celui que j'ai écrit pour Alionet, la communauté openSUSE francophone.

Dans cet article, je vous propose de découvrir ou redécouvrir un trio de logiciels qui va bien pour gérer sa musique : mpd (un démon lecteur de musique en mode serveur), mpc (un client en CLI) et ncmpcpp (un client évolué en ncurses écrit en C++), configurer leurs raccourcis clavier et obtenir des notifications intégrées à notre environnement de bureau :

Ces deux paquets sont disponibles dans le dépôt Packman pour openSUSE :

zypper ar -f http://packman.inode.at/suse/openSUSE_Leap_42.2 Packman
zypper install mpd mpclient ncmpcpp

Ou pour Debian :

apt-get install mpd mpc ncmpcpp

Note: le nom d'utilisateur dans les fichiers qui suivent, ici sogal, est bien entendu à adapter !
Configuration du serveur de musique mpd :

Nous allons nous inspirer de la configuration proposée en exemple :

mkdir ~/.config/mpd
mkdir ~/.config/mpd/playlists
# Sous openSUSE :
cp /usr/share/doc/packages/mpd/mpdconf.example ~/.config/mpd/mpd.conf
vim ~/.config/mpd/mpd.conf
# Sous Debian :
cp /usr/share/doc/mpd/mpdconf.example.gz ~
gunzip mpdconf.example.gz
mv mpdconf.example ~/.config/mpd/mpd.conf
vim ~/.config/mpd/mpd.conf

Voici, pour exemple, les passages de ma configuration :

grep -v "^#|^$" ~/.config/mpd/mpd.conf
music_directory         "/path/to/music"
playlist_directory              "~/.config/mpd/playlists"
db_file                 "~/.config/mpd/mpd.db"
log_file                        "~/.config/mpd/log"
pid_file                        "~/.config/mpd/mpd.pid"
state_file                      "~/.config/mpd/mpdstate"
sticker_file                    "~/.config/mpd/sticker.sql"
user                            "sogal"
bind_to_address         "localhost"
port                            "6600"
log_level                       "default"
restore_paused "yes"
input {
        plugin "curl"
}
audio_output {
        type            "pulse"
        name            "Pulse MPD Output"
}
audio_output {
    type        "fifo"
    name        "mpd_fifo"
    path        "/tmp/mpd.fifo"
    format      "44100:16:2"
}
filesystem_charset              "UTF-8"

Il est surtout important de bien configurer l'emplacement de vos fichiers audio ainsi que la sortie sonore.
Ici j'utilise Pulseaudio mais la configuration inclus un modèle pour une sortie avec ALSA seul.
J'ai ajouté une sortie vers un fifo qui nous servira avec ncmpcpp pour activer le visualiseur graphique (oui, oui dans un terminal !).

Activer mpd en tant que service systemd en espace utilisateur :

Nous allons configurer le serveur de musique mpd en tant que service systemd en espace utilisateur.
De la sorte, mpd démarrera avec votre session.

mkdir -p ~/.config/systemd/user
cp /usr/lib/systemd/system/mpd.service ~/.config/systemd/user
vim ~/.config/systemd/user/mpd.service
[Unit]
Description=Music Player Daemon

[Service]
ExecStart=/usr/bin/mpd --no-daemon /home/sogal/.config/mpd/mpd.conf
ExecStop=/usr/bin/mpd --kill
PIDFile=/home/sogal/.config/mpd/mpd.pid

[Install]
WantedBy=default.target

Il est nécessaire de mettre les chemins absolus dans ce fichier.

Puis nous démarrons et activons le service :

systemctl --user start mpd
systemctl --user enable mpd

Note : sous Debian, le service système est activé par défaut après installation. Vous pouvez faire le choix d'utiliser ce dernier ou bien un service en environnement utilisateur comme présenté ici. Dans ce cas, il faut désactiver le service système ou préciser un autre port.

Configuration de ncmpcpp :

mkdir ~/.ncmpcpp
cp /usr/share/doc/packages/ncmpcpp/config ~/.ncmpcpp/
vim ~/.ncmpcpp/config
# Sous Debian :
mkdir ~/.ncmpcpp
cp /usr/share/doc/ncmpcpp/examples/config.gz ~
gunzip config.gz
mv config ~/.ncmpcpp/
vim ~/.ncmpcpp/config

Je vous propose à nouveau ma configuration :

grep -v "^#|^$" ~/.ncmpcpp/config
ncmpcpp_directory = ~/.ncmpcpp
lyrics_directory = ~/.ncmpcpp/lyrics
mpd_host = localhost
mpd_port = 6600
mpd_connection_timeout = 5
mpd_music_dir = /path/to/music
mpd_crossfade_time = 5
visualizer_fifo_path = /tmp/mpd.fifo
visualizer_output_name = mpd_fifo
visualizer_in_stereo = yes
visualizer_sync_interval = 30
visualizer_type = ellipse
visualizer_look = ▮●
visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161
system_encoding = "UTF-8"
playlist_disable_highlight_delay = 5
message_delay_time = 5
song_list_format = {%a - }{%t}|{$8%f$9}$R{$3(%l)$9}
song_status_format = {{%a{ "%b"{ (%y)}} - }{%t}}|{%f}
song_library_format = {%n - }{%t}|{%f}
alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b
alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D}
now_playing_prefix = $b
now_playing_suffix = $/b
song_window_title_format = {%a - }{%t}|{%f}
browser_sort_mode = name
browser_sort_format = {%a - }{%t}|{%f} {(%l)}
song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l}
playlist_show_mpd_host = no
playlist_show_remaining_time = yes
playlist_shorten_total_times = no
playlist_separate_albums = no
playlist_display_mode = columns
browser_display_mode = classic
search_engine_display_mode = classic
playlist_editor_display_mode = classic
incremental_seeking = yes
seek_time = 1
volume_change_step = 2
autocenter_mode = yes
centered_cursor = yes
progressbar_look = =>
default_place_to_search_in = database
user_interface = alternative
media_library_primary_tag = genre
default_find_mode = wrapped
header_visibility = yes
statusbar_visibility = yes
titles_visibility = yes
header_text_scrolling = yes
cyclic_scrolling = yes
lines_scrolled = 2
follow_now_playing_lyrics = yes
fetch_lyrics_for_current_song_in_background = yes
store_lyrics_in_song_dir = yes
allow_for_physical_item_deletion = no
screen_switcher_mode = browser, media_library, visualizer
startup_screen = playlist
startup_slave_screen = "visualizer"
startup_slave_screen_focus = no
locked_screen_width_part = 50
jump_to_now_playing_song_at_start = yes
ask_before_clearing_playlists = yes
clock_display_seconds = no
display_volume_level = yes
display_bitrate = no
display_remaining_time = yes
ignore_leading_the = no
mouse_support = yes
enable_window_title = yes
external_editor = vim
use_console_editor = yes
colors_enabled = yes

Ceci me permettra d'obtenir un écran partagé avec, par défaut, l'affichage de ma bibliothèque musicale et du visualiseur.
Si vous ne voulez pas d'écran partagé, commentez les paramètres relatifs au slave_screen.
Chez moi, ça donne ça :

Quelques raccourcis pour bien démarrer :
- F1 : afficher l'aide ;
- 1 : playlist ;
- 2 : navigateur par dossiers ;
- 3 : moteur de recherche ;
- 4 : audiothèque (vue en panneaux) ;
- 5 : éditeur de playlists ;
- 6 : éditeur de tags ;
- 8 : visualiseur ;
- p : mettre en pause ;
- a : ajouter la sélection à la playlist.

Exemple de création d'un raccourci clavier pour mpc sous Gnome :

Par défaut, la touche p met ncmpcpp en pause. Mais si l'on n'est pas devant, comment faire ?
C'est là que mpc (du paquet mpclient sous openSUSE et mpc sous Debian) est intéressant.
Nous allons créer des raccourcis clavier destiné à mettre mpd en pause. Pour cela, ouvrons les préfèrences système puis Clavier et Raccourcis personnalisés et en créer 3 nouveaux :

- MPD Pause : commande mpc toggle ;
- MPD Précédent : commande mpc prev ;
- MPD Suivant : commande mpc next

Vous pouvez affecter les touches que vous voulez, sur une machine j'ai mis Ctrl + Alt + Z, sur une autre j'ai réaffecter les touches multimédias.

Notifications dans Gnome Shell :

Pour être notifié des changements de chansons dans gnome-shell, il faut passer un nouveau paramètre de configuration dans ncmpcpp :

execute_on_song_change = 

Je vous propose 2 méthodes :

Méthode notify-send :
Nous allons utiliser la commande notify-send (du paquet libnotify-bin sous Debian, installé par défaut sous ma openSUSE) :

execute_on_song_change = "notify-send --hint=int:transient:1 -t 2 -i $HOME/path/to/icon "Music Player Daemon" "$(ncmpcpp -c ~/.ncmpcpp/config --current-song "%a - %t (%b)" 2>/dev/null)"" 

Note : --hint=int:transient:1 permet que les notifications ne se stockent pas dans le centre de notification et l'option -i prend un chemin vers une icône en paramètre.

Ainsi vous avez de jolies notifications, non persistentes. Le seul inconvénient c'est qu'elles se stockent sur l'écran de verrouillage et affichent "notify-send" au lieu de "Music Player Demon".

Méthode script python :
Pour pallier ça, je vous propose un petit script python, qui utilise deux bibliothèques très pratiques :

- python-notify2
- python-mpd2

# Sous openSUSE :
zypper in python-notify2
#Sous Debian :
apt-get install python-notify2
pip3 install python-mpd2

Et voici le script (je l'ai mis dans mon $HOME/bin) :

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import gi
gi.require_version('Notify', '0.7')
from gi.repository import Notify
from gi.repository import GLib
from mpd import MPDClient

client = MPDClient()
client.timeout = 10
client.idletimeout = None
client.connect("localhost", 6600)

mpd_song = MPDClient.currentsong(client)

s_artist = mpd_song['artist']
s_title = mpd_song['title']
s_album = mpd_song['album']

s_notification = s_artist + " - " + s_title + " - (" + s_album +")"

Notify.init("Music Player Demon")
show_song = Notify.Notification.new("Music Player Demon", s_notification,
                                    icon="/home/sogal/.icons/Vivacious-Colors/apps/scalable/deadbeef.svg")

show_song.set_hint("transient", GLib.Variant.new_boolean(True))

show_song.show()

Puis ajoutez ceci à la config de ncmpcpp :

execute_on_song_change = "/usr/bin/python3 /home/$USER/bin/script_notif.py"

Et voilà, j'espère que cet article vous sera utile et que vous prendrez plaisir à gérer votre musique avec ces outils, notamment ncmpcpp qui est très puissant en terme de possibilité d'affichages différents, de recherche et d'édition (tags) de votre audiothèque.
Cet article n'est destiné qu'à vous permettre de découvrir et à vous aider à démarrer, je vous conseille de lire tout de même les pages de manuel de ces outils ou les commentaires inclus dans les fichiers de configuration, très simples à comprendre, pour ajuster tout ça aux petits oignons !

Enjoy !

2 commentaires

Comme beaucoup d'entre nous, j'utilise beaucoup le terminal et je suis toujours intéressé par de nouvelle astuces à ce sujet.
J'ai récemment testé puis adopté powerline (voir Article sur powerline et terminator).
Néanmoins je trouve ce dernier un peu lourd. Il dispose de plein de fonctionnalités (des segments) et est visuellement très chouette mais ralenti un peu l'utilisation et le lancement du shell (et donc l'ouverture de nouveaux émulateurs de terminal).

J'ai donc décidé de voir si je ne pouvais pas obtenir facilement la même chose simplement en configurant zsh comme il faut via mon .zshrc.
J'ai donc fait mumuse, lu de la doc et searcher le fucking web et voici ce que ça donne :

Mode normal :

Dans un dépôt Git :

Si la commande précédente a renvoyé un code d'erreur :

Lorsqu'une chanson est en cours de lecture (via mpd) :

Et voici la partie correspondante de mon .zshrc :

#---------- DEFINITION DES FONCTIONS ----------

# Récupérer la charge système :
function load () {
    read one five fifteen rest </proc/loadavg
    load="$one $five $fifteen"
    print $load
}
# Récupérer la branche git si c'est un dépôt :
function izitgit () {
    if [[ -d .git ]] ; then
        gitb="[$(git rev-parse --abbrev-ref HEAD)]"
        if [[ $?  -ne 0 ]] || [[ -z "$gitb" ]] ; then
            return
        fi
    else
        gitb=""
    fi
    print $gitb
}

# Récupérer la chanson en cours :
function mpd () {
    if [[ $(mpc current) == "" ]] ; then
        song=""
    else
        song="[$(mpc current)]"
    print $song
    fi
}

#---------- CONSTRUCTION DU PROMPT ----------

# ...principal
PROMPT="[%F{magenta}%n%f (%F{green}%m%f): %F{yellow}%~ %f]%F{magenta}> %f"
# ...à droite
RPROMPT='[%F{red}$(load)%f][%B%F{cyan}%*%f%b]$(izitgit)%F{yellow}$(mpd)%f%(?..%B%K{red}[-%?-]%b%k)'
# Indispensable pour assurer l'extension des résultats des commandes :
setopt prompt_subst
autoload -U promptinit
promptinit

J'espère que ça pourra être utile à ceux qui veulent bidouiller leur prompt.
Si vous avez des pistes d'améliorations ou des astuces pour votre bash ou votre zsh à partager, n'hésitez pas ! Postez !

Have fun and enjoy !

15 commentaires

J'étais jusqu'à présent très critique envers les soit-disants “smartphones”, à juste titre je pense si on les considère du point de vue du logiciel libre, et réticent à en acquérir un. Mon vieux petit Wiko Lubi 2, un téléphone barre à l'ancienne, me suffisait amplement.
Mais ces derniers temps, il était clairement sur le déclin et commençait à avoir des comportements étranges (l'alarme qui se déclenche après l'avoir réglée, pas de tonalités en mode “discret” et autres bizarreries). Je me suis donc reposé à nouveau la question d'acquérir un smartphone ou pas.

Après 2 semaines d'hésitation et de recherches sur les alternatives pouvant me convenir, j'ai décidé de franchir le pas et d'upgrader mon forfait chez Free qui propose dans sa boutique le Wileyfox Spark + installé avec Cyanogen OS.
Si ce n'est pas totalement libre, c'est déjà un mieux vis-à-vis des Android “classiques” : plus de libertés et de possibilités de contrôle de ce qui se passe sur la machine, moins d'applications bidons préinstallées (facebook et autres saloperies du genre).
Mais, et c'est un gros mais ! il existe une différence majeure entre Cyanogen OS et Cyanogen Mod :
Cyanogen OS est la version vendue aux fabriquants de téléphones. Elle inclus quelques applications google (qu'il est possible de désactiver sans toutefois pouvoir les désinstaller) mais surtout, il n'est pas possible d'activer l'accès root sur la machine !

Be root or be dead ! (Iron Maiden Inside)

Je ne commenterai pas l'importance d'être root sur sa machine, c'est fondamental ! Si vous n'êtes pas root, quelqu'un ou quelque chose d'autre l'est, à vos dépends généralement.
Être root sans savoir ce qu'on fait est une faille de sécurité. Ne pas pouvoir être root du tout en est une aussi, bien pire à mon sens. Vous ne contrôlez pas ce que fait la machine.
Android avec ou sans Cyanogen (OS ou Mod) n'est ni plus ni moins qu'une distribution GNU/Linux et il est strictement hors de question que je ne sois pas root sur une de mes machines GNU/Linux.

Happy hacking ! !

J'ai donc décidé d'installer Cyanogen Mod par dessus Cyanogen OS de manière à reprendre le contrôle de la machine.
Voici sommairement les étapes que j'ai suivies :

Je précise que je n'ai que peu de connaissances en matière de téléphonie mobile, que c'est la 1ère fois que je fais ça, que cette procédure est sûrement propre à mon téléphone. Ne suivez pas ça aveuglément, renseignez vous abondamment avant de faire quoi que ce soit !


Sur mon ordinateur, j'ai installé adb et fastboot :

apt install adb fastboot

Sur le téléphone, j'ai activé le mode développeur en tapant 7 fois sur l'UUID (dans Paramètres => À propos du téléphone) puis le redémarrage avancé et le déverrouillage OEM du bootloader dans les Options développeurs (attention le déverrouillage du bootloader a eu pour effet de me réinitialiser complétement la machine).
J'ai connecté le téléphone à l'ordi en USB puis l'ai redémarré sur le bootloader.

Sur l'ordinateur, j'ai téléchargé ici la ROM recovery (colonne de droite) de la version de Cyanogen Mod correspondante (porridge). Puis j'ai flashé la partition /recovery avec :

fastboot flash recovery /home/moi/chemin/vers/porridge_recovery.img

Ça prend quelques secondes, une fois fait, j'ai rebooté :

fastboot reboot

Quand le téléphone a redémarré, j'ai activé l'Adb (Android Debug Bridge) en mode réseau dans les Options développeurs ainsi que le wifi.
J'ai connecté mon ordinateur au tél via adb :

adb connect 192.168.X.X:5555

(Mettre l'IP du téléphone évidemment).

J'ai téléchargé le build de Cyanogen Mod correspondant à mon matériel ici puis l'ai “poussé” sur le téléphone a un emplacement visible par le recovery :

adb push /home/moi/chemin/vers/cm-13.0-20161030-NIGHTLY-porridge.zip /storage/86D5-1DF3/Android/data/

(Le chemin du “storage” correspond à MON tél (ma carte mirco-SD en l'occurence), il est à adapter à votre matériel !)

Ça prend longtemps. Une fois fin (récupération du prompt dans le terminal de l'ordinateur), j'ai redémarré sur le recovery.
Dans le menu recovery, j'ai sélectionné “Apply update” puis j'ai navigué jusqu'au Zip précédemment déposé et l'ai sélectionné.

Le téléphone fait son travail et au reboot vous devriez voir la bouille bleue de la mascotte de Cyanogen Mod apparaître puis le téléphone va poursuivre son initialisation.
Si vous aviez des applications installés, il est très probable qu'elles crashent, il faudra les réinstaller.
Bonne surprise : la mise à jour vers Cyanogen Mod m'a viré toutes les applis google !

Note : vous pouvez retrouver ces étapes ici (en anglais) : https://wiki.cyanogenmod.org/w/Install_CM_for_porridge

Et pour finir, une pincée de logiciel libre !

Pour finir ma configuration, j'ai bien entendu activé l'accès root puis j'ai ajouté quelques applications nécessaires ou utiles :

  • F-droid, l'app store libre : https://f-droid.org ;
  • Firefox : mon navigateur favori malgré tout ;
  • Orbot et Orfox : l'équivalent du TorBrowser ;
  • AFwall+ : un pare-feu bien fait qui me permet de contrôler quelle appli peut accéder à quel interface réseau ;
  • Nextcloud : le client pour mon cloud auto-hébergé ;
  • Owncloud News : Un lecteur de news pour Owncloud/Nextcloud ;
  • Davdroid : pour synchroniser mes agendas et contacts depuis mon serveur Nextcloud sur mon téléphone ;
  • Termux : un émulateur de terminal bien foutu, fonctionnant en chroot et permettant d'installer des paquets (htop, vim) via un apt install ;
  • ConnectBot : un client SSH ;
  • OpenVPN : un client OpenVPN, toujours utile pour monitorer ou se connecter à distance à d'autres machines ;
  • VLC : pour les quelques vidéos que je serais amené à regarder, très anecdotique ;
  • MuPDF : le célèbre lecteur pdf très léger ;
  • Conversation : un client XMPP multi-compte ;
  • #AiCiA : un client IRC ;
  • Amaze : un gestionnaire de fichiers agréable à utiliser ;
  • EDIT (Merci à Yann) : OsmAnd : GPS et cartes avec OpenStreetMap.

Le reste de ma configuration est à l'avenant avec des règles de confidentialité assez drastiques et évidemment, la géolocalisation désactivée.

Je ne prétendrais pas qu'avec cela j'ai un téléphone portable 100% libre mais je pense en être aussi prêt que possible à l'heure actuelle.

Aucun commentaire

J'ai reçu en cadeau un casque audio sans fil (bluetooth), accessoire fort pratique pour continuer à écouter sa musique quand on s'éloigne 5 min de son bureau.
J'ai eu quelque soucis mineurs pour l'utiliser et il a fallu que je procède à quelques réglages que je remets ici pour mémoire et en me disant que ça pourrait profiter à d'autres.

Installer le support bluetooth pour pulseaudio si nécessaire :

apt install pulseaudio-module-bluetooth

Après ça mon casque était reconnu et je pouvais y envoyer le son mais j'avais des coupures de son voire des déconnexions avec des messages comme ça dans /var/log/syslog :

Oct 20 14:27:44 machine bluetoothd[1641]: No cache for 04:FE:A1:00:09:07
Oct 20 14:27:45 machine bluetoothd[1641]: Device is already marked as connected

Pour résoudre ça, éditer le fichier /etc/pulse/default.pa et commenter la ligne :

load-module module-bluetooth-discover

Puis éditer le fichier /usr/bin/start-pulseaudio-x11 et après les lignes :

   if [ x”$SESSION_MANAGER” != x ] ; then
        /usr/bin/pactl load-module module-x11-xsmp “display=$DISPLAY session_manager=$SESSION_MANAGER” > /dev/null
    fi

ajouter ceci :

    /usr/bin/pactl load-module module-bluetooth-discover

Enfin dans le fichier /etc/bluetooth/main.conf, changer:

ControllerMode = dual

en :

ControllerMode = bredr

Après redémarrage plus de soucis de déconnexion et un son nickel.
Lors des démarrages suivants le casque est automatiquement détecté et connecté (s'il est allumé bien sûr) et le son y est correctement redirigé aussi.

Aucun commentaire

Lors d'intervention sur une machine distance, il est utile de pouvoir manipuler via une simple connexion SSH les paramètres de l'environnement de bureau de l'utilisateur.
Si cela peut être fait via la commande gsettings lorsqu'on travaille sur la machine en direct, il faut faire appel à dconf dans le cas d'une intervention distante.

Voici une petite procédure et quelques exemples pour ça :

Accèder à la machine en SSH et se connecter sous le compte de l'utilisateur (si on était connecté en root) :

su - prenom.nom

Avant tout, déclarer dans quel "affichage" du serveur X on travaille en préfixant chaque commande avec :

DISPLAY=:0

La syntaxe de dconf est assez simple :

Lire la valeur d'une clé :

dconf read CLÉ

Écrire une nouvelle valeur dans une clé :

dconf write CLÉ VALEUR

Afficher l'ensemble des données de la base :

dconf dump

piper vers less ou à rediriger vers un fichier)

Mettre à jour la base avec les modifications apportées :

dconf update

Les CLÉS sont constituées par un chemin commençant par " / ". bash supporte l'auto-complétion pour les chemins dconf, pensez à l'utiliser.
Les VALEURS doivent être encadrés par des ' ' (en plus des " ") si ce sont des mots. Les listes entre crochets ne sont pas considérées comme des mots.

Exemples d'utilisation :

Réactiver les extensions par défaut :
(cette liste est un exemple hein !)

DISPLAY=:0 dconf write /org/gnome/shell/enabled-extensions "['alternate-tab@gnome-shell-extensions.gcampax.github.com', 'places-menu@gnome-shell-extensions.gcampax.github.com', 'drive-menu@gnome-shell-extensions.gcampax.github.com', 'topIcons@adel.gadllah@gmail.com', 'chatstatus@zeten30.gmail.com', 'applications-overview-tooltip@RaphaelRochet']"

Remettre le fond d'écran par défaut :

DISPLAY=:0 dconf write /org/gnome/desktop/background/picture-uri "'file:///home/prenom.nom/chemin/vers/image.jpg'"

Afficher les icônes sur le bureau :

DISPLAY=:0 dconf write /org/gnome/desktop/background/show-desktop-icons/ "'true'"

Détacher les fenêtres de dialogue de la fenêtre principale :

DISPLAY=0 dconf write /org/gnome/mutter/attach-modal-dialogs "'false'"

Afficher les boutons "Minimiser", "Maximiser", "Fermer" sur les fenêtres :

DISPLAY=:0 dconf write /org/gnome/desktop/wm/preferences/button-layout "'appmenu:minimize,maximize,close'"

Dans tous les cas, finir par un

DISPLAY=:0 dconf update

pour mettre à jour la base
Les modifications apportées seront visibles de l'utilisateur après reconnexion à sa session.

Toutes les CLÉS disponibles dans gsettings sont disponibles dans dconf. Il faut juste penser à remplacer les "." (séparateur gsettings) par des "/" (séparateur dconf).

Aucun commentaire

Dans cet article, je vous présente rapidement comment compiler GNU Emacs (en dernière version) sur Debian Testing (avec interface GTK3).
Le tout ne devrait pas vous prendre plus de 10 min.

Tout d'abord on récupère l'archive :

wget http://ftp.igh.cnrs.fr/pub/gnu/emacs/emacs-25.1.tar.xz

On DL et on importe le trousseau des clés GPG GNU :

wget https://ftp.gnu.org/gnu/gnu-keyring.gpg
gpg --import gnu-keyring.gpg

Grâce à la clé, on vérifie notre archive :

gpg --verify emacs-25.1.tar.xz.sig emacs-25.1.tar.xz

Cette commande devrait vous renvoyer le résultat suivant :

gpg: Signature faite le sam. 17 sept. 2016 19:06:16 CEST
gpg:                avec la clef RSA 0x233587A47C207910
gpg: Bonne signature de « Nicolas Petton <petton.nicolas@gmail.com> » [inconnu]
gpg:                 alias « Nicolas Petton <nicolas@petton.fr> » [inconnu]
gpg: Attention : cette clef n'est pas certifiée avec une signature de confiance.
gpg:             Rien n'indique que la signature appartient à son propriétaire.
Empreinte de clef principale : 28D3 BED8 51FD F3AB 57FE  F93C 2335 87A4 7C20 7910

Notre archive étant vérifiée, on peut l'extraire :

tar xvf emacs-25.1.tar.xz

On entre dans le dossier :

cd emacs-25.1

En root on installe les dépendances de compilation (ça peut varier, chez moi il manquait les bibliothèques suivantes) :

apt-get install libgtk-3-dev libxpm-dev libjpeg-dev libgif-dev libtiff5-dev

On repasse en $USER normal puis on lance la commande de configuration pré-compilation.
Il est évidemment possible de passer des options à cette commande pour compiler Emacs sans certaines fonctionnalités (ex: --with-x=no pour ne pas activer le support graphique ou encore --prefix=/un/chemin pour que l'installation finale se fasse ailleurs que dans /usr/local/. Je vous laisser lire le fichier INSTALL pour plus d'informations) :

./configure
make

La compilation prend plusieurs minutes, une fois finie on teste notre binaire :

src/emacs -Q

Si c'est tout bon, on peut l'installer pour tout le système si on veut (commande à lancer en tant que root donc) :

make install

Et voilà, si vous avez conservé les options par défaut, GNU Emacs 25.1 devrait être installé dans /usr/local/bin et un lanceur a du apparaître dans le menu des applications de votre environnement de bureau.

6 commentaires

Les utilisateurs de Vim seront possiblement intéressés, les autres pourraient avoir envie de s'y mettre.
J'ai mis au propre et à jour ma configuration de Vim (~/.vimrc), après notamment des ajouts de plugins et d'une configuration en mode "IDE pour Python", langage que je me suis mis en tête d'apprendre.
Je le partage donc sur le blog en espérant que ça puisse être utile et en guise d'archive personnelle :

" | ---------------------------------------------------------------------------
" | File    : ~/.vimrc
" | By      : sogal
" | ---------------------------------------------------------------------------

" GENERAL OPTIONS :
" -----------------------------------------------------------------------------
set nocompatible     " Ne pas assurer la compatibilité avec l'ancien Vi
set encoding=utf8    " Encodage en utf-8
set mouse=a          " Sélection à la souris
set history=50       " Nombre de commandes dans l'historique

" Montrer les tabulations, espaces insécables et de fin (eol:¶)
set list listchars=nbsp:¤,tab:··,trail:¤,extends:▶,precedes:◀

set viminfo='20,\"50 " Options du fichier ~/.viminfo
set backspace=2      " Active la touche Backspace
set wrap
" Wrappe et justifie à 79 caractères avec la touche '@'
map @ {v}! par 79j
" Autorise le passage d'une ligne à l'autre avec les flèches gauche et droite
set whichwrap=<,>,[,]
" Essaye de garder le curseur dans la même colonne quand on change de ligne
set nostartofline
" Option de la complétion automatique
set wildmode=list:full
set wildchar=<Tab>
set wildmenu         " Meilleur complétion des commandes dans la ligne de status
set tabstop=4 shiftwidth=4 expandtab " Pas de vraies tabulations
set softtabstop=4    " Backspace supprime 4 espace d'un coup
set ignorecase       " Les recherches ne sont pas 'case sensitives'...
set smartcase        " ... sauf si le pattern recherché contient des majuscules
" Le pliage se base sur l'indentation du fichier
set foldmethod=indent
set foldnestmax=3    " 3 niveaux de pliage maxi
set nofoldenable     " Ne pas plier par défaut
set incsearch        " Recherches incrémentalees
set hlsearch         " Mettre en surbrillance le mot cherché
set autoread         " Auto lecture si le fichier a été modifié depuis l'extérieur

" UI :
" -----------------------------------------------------------------------------
colorscheme molokai  " Thème de couleur
syntax enable        " Active la coloration syntaxique
" Contenu de la barre de status
set statusline=%F\ Type=%y\ %=Pos=%l,%c\ (%p%%)\ SLOC=%L\ %P
set laststatus=2     " Barre de status toujours visible
set t_Co=256         " Utiliser 256 couleurs
set textwidth=78     " Largeur maxi du texte inséré
set colorcolumn=80   " Mise en couleur colonne n°80
set showcmd          " Affiche les commandes dans la barre de status
set showmatch        " Affiche la paire de parenthèses
set number           " Afficher les numéros de ligne
set splitright
" set relativenumber   " Mode numérotation des lignes relative

" INDENT :
" -----------------------------------------------------------------------------
set smartindent
" Options d'indentation pour un fichier C
set cinoptions=(0
set shiftwidth=4     " Nombre d'espace dans l'indentation

" MAPPING :
" -----------------------------------------------------------------------------
" Remapper pour conserver la sélection
vnoremap < <gv
vnoremap > >gv
" Mapper Y pour copie jusqu'à fin de ligne
map Y y$
" U n'est pas utile, en faire un redo (Ctrl - R)
map U <C-r>
" kj est plus rapide à atteindre que <Esc>
inoremap kj <Esc>
cnoremap kj <Esc>
" L sépare une ligne à la position du curseur (inverse de J)
nnoremap L i<Enter><Esc>
" Mapper pour split navigation
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
" Mapper leader key
let mapleader = ","
" ,r passe en mode num ligne relatives
map <leader>r :set relativenumber<CR>
" Folding avec espace
nnoremap <space> za

" POWERLINE :
" -----------------------------------------------------------------------------
" set rtp+=/usr/share/vim/vimfiles/plugin/powerline.vim
" python from powerline.vim import setup as powerline_setup
" python powerline_setup()
" python del powerline_setup
" set laststatus=2
" set t_Co=256

" SCROLLING :
" -----------------------------------------------------------------------------
set scrolloff=8         " Conserver 8 lignes visibles en scrollant verticalement
set sidescrolloff=15    " Conserver 15 colonnes visibles en scrollant horizontalement
set sidescroll=1

" ASTUCES :
" -----------------------------------------------------------------------------
" Rouvrir le fichier là où on l'a quitté
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
" :set scrollbind    " Scroller syncro entre 2 fenêtres

" WRAPPING INTELLIGENT EN FONCTION DU TYPE DE FICHIERS :
" -----------------------------------------------------------------------------
" Définir wrap et textwidth en fonction du fichier ou de son emplacement
function! SetupEnvironment()
  let l:path = expand('%:p')
  if l:path =~ '/home/sogal/.*'
    setlocal textwidth=0
  elseif (&ft == 'c' || &ft == 'html' || &ft == 'sh' || &ft == 'txt2tags')
    setlocal textwidth=0
  elseif (&ft == 'mail')
  " Largeur à 72 car. pour les mails
    setlocal textwidth=72
  else
  " Le défaut est à 78 car.
    setlocal textwidth=78
  endif
endfunction
au BufReadPost,BufNewFile * call SetupEnvironment()

" txt2tags
au BufNewFile,BufRead *.t2t map 2l :w<CR>:!txt2tags -t html "%" ; unoconv -f odt "%:r.html" <CR>
au BufNewFile,BufRead *.t2t map 2h :w<CR>:!txt2tags -t html -o /tmp/txt2tags_apercu.html "%" ; firefox "file:///tmp/txt2tags_apercu.html" <CR>
au BufRead,BufNewFile *.t2t set tw=78
au BufNewFile,BufRead *.t2t set spell
au BufNewFile,BufRead *.t2t setlocal spell spelllang=fr
au BufNewFile,BufRead *.t2t set ft=txt2tags
au BufNewFile,BufRead *.t2t set noexpandtab

" PYTHON IDE :
" -----------------------------------------------------------------------------
" Exécuter le script avec '2p'
au BufNewFile,BufRead *.py map 2p :w<CR>:!python3 "%"<CR>
" Vérifier conformité du script à la PEP8 avec '2P'
au BufNewFile,BufRead *.py map 2P :w<CR>:!python3-pep8 '%'<CR>
" Paraméter le fichier pour conformité à la PEP8
au BufNewFile,BufRead *.py
    \ set tabstop=4 |
    \ set softtabstop=4 |
    \ set shiftwidth=4 |
    \ set textwidth=79 |
    \ set expandtab |
    \ set autoindent |
    \ set fileformat=unix |

let python_highlight_all=1                  " Highlight du code

" VUNDLE ET CONFIGURATION DES PLUGINS ET DE LEUR ENVIRONNEMENT :
" -----------------------------------------------------------------------------
set rtp+=~/.vim/bundle/Vundle.vim
" L'environnement Vim inclus Vundle et l'exécute au lancement
call vundle#begin()
Plugin 'gmarik/Vundle.vim'

" Ajouter les plugins ci-dessous :
" (note older versions of Vundle used Bundle instead of Plugin)
" -----------------------------------------------------------------------------
Plugin 'tmhedberg/SimpylFold'               " Meilleur folding
let g:SimpylFold_docstring_preview=1        " Voir la docstring du code foldé

" Indentation conforme PEP8
Plugin 'vim-scripts/indentpython.vim'

" Meilleur autocomplétion Python
Bundle 'Valloric/YouCompleteMe'

" Fermer la fenêtre d'autocomplétion après usage
let g:ycm_autoclose_preview_window_after_completion=1

" ,g amène vers la définition de l'élément complété
map <leader>g  :YcmCompleter GoToDefinitionElseDeclaration<CR>

" Python avec support virtualenv (pour PATH plugin YoukCompleteMe):
" -----------------------------------------------------------------------------
py << EOF
import os
import sys
if 'VIRTUAL_ENV' in os.environ:
  project_base_dir = os.environ['VIRTUAL_ENV']
  activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
  execfile(activate_this, dict(__file__=activate_this))
EOF

Plugin 'scrooloose/syntastic'               " Vérif syntaxe Python
Plugin 'nvie/vim-flake8'                    " Ajout check conformité PEP8

" Navigateur de fichiers dans une side-bar
Plugin 'scrooloose/nerdtree'
map <leader>t :NERDTreeToggle<CR>           " ,t affiche l'arborescence
let NERDTreeIgnore=['\.pyc$', '\~$']        " Ignorer fichier .pyc in NERDTree

" Barre de status (+ light que powerline)
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'

" *TOUS* les plugins sont à ajouter et configurer avant cette ligne !
call vundle#end()                           " Requis
filetype plugin indent on                   " Requis

" DEMARRAGE AUTO DES PLUGINS :
" -----------------------------------------------------------------------------
autocmd VimEnter * NERDTree

2 commentaires

Un post sans rapport avec l'informatique aujourd'hui.

Les îles Féroé sont une des provinces constituant le Danemark (pays de l'union européenne et donc soumis à ses lois pour mémoire).
Chaque année s'y déroule une chasse "traditionnelle" consistant à rabattre dans une baie des cétacés (globicéphales noirs et autres variétés de dauphins) puis à massacrer à l'aide de crochets les animaux ainsi prisonniers.
Cette pratique pouvait avoir un sens il y a quelques siècles quand le rabattage et la mise à mise d'une poignée de mammifères marins étaient (hélas) nécessaire pour survivre dans ces îles désolées.
Mais en 2016 ce n'est clairement plus le cas et les moyens employés (plusieurs embarcations à moteur) permettent la mise à mort non pas de 3 ou 4 animaux, mais de plus d'une centaine chaque année, sans distinction d'âge, de sexe ou de condition (les petits et les femelles enceintes y passent aussi).
D'autant que le Danemark (et donc les îles Féroé) est signataire de la Convention de Berne de 1979 en vertu de laquelle cette chasse est strictement illégale !

Je vous laisse juger de l'intérêt de la chose (lien youtube, une fois n'est pas coutume) :



Que faire pour faire cesser ces conneries ?

Je vous dirais bien de signer la pétition initiée par Sea Shepherd, ce serait toujours ça de fait même si on peut légitimement douter de l'utilité des pétitions en lignes.
La meilleure chose à faire serait de faire un don à cette organisation qui agît réellement sur le terrain puis de relayer l'information et de cesser de consommer des produits de la mer, en guise de boycott de ces pays nordiques qui en vivent.
Ou alors, si vous croisez un représentant politique du Danemark, vous pouvez aussi lui écraser les testicules entre deux briques.

1 commentaire

Lorsqu'on a besoin de renommer des fichiers en masse, on peut se tourner vers des applications dédiées comme l'excellent PyRenamer.
Mais il existe également le très bon script nautilus-renamer pour cela.
Il date un peu (2012) et l'installation telle que décrite dans le fichier INSTALL ne le place pas au bon endroit et ne fournit pas une francisation correcte.

Je vous propose donc ma version directement traduite dans le code : Script nautilus-renammer (alias Renommer) (clic-droit => Enregistrer la cible du lien sous...)

Il suffit de le placer dans le dossier masqué (Ctrl + H pour les afficher) $HOME/.local/share/nautilus/scripts et de le rendre exécutable.
Lorsque vous ferez un clic-droit sur un ou plusieurs fichiers ou dossiers, il sera disponible dans le sous-menu Scripts :

Une fois lancé, vous avez la possibilité de renommer vos fichiers de différente façon:

  • selon un motif de votre choix ;
  • en substituant tout ou partie du nom d'origine ;
  • en changeant la casse du nom ;
  • ou enfin, et c'est excellent, en mixant le tout !

Dans mon exemple, je veux renommer mes 3 fichiers de test en incluant avant l'extension la chaîne de caractères "_numero-" suivie d'une numérotation à 5 chiffres puis en mettant le tout en majuscules :
L'ensemble des motifs utilisables est disponible en cliquant sur le "?", j'ai traduit les info-bulles pour plus de clarté :

Les modifications peuvent également s'appliquer sur les extensions ou de façon récursive en cochant la case appropriée en bas.

Et le top : si après validation vous vous rendez compte que vous avez fait une bêtise, il vous suffit de sélectionner les mêmes fichiers puis de réouvrir le script Renommer et de cliquer sur Annuler.
En effet, après une action le script crée, dans le dossier, un fichier masqué .rlog qui lui sert à revenir en arrière :

En bref voilà un script bien utile pour renommer sans stress ses fichiers à la volée, directement dans son navigateur de fichiers !