Mois : octobre 2022

i3 – le window manager minimaliste

Pour mon GPD Pocket 3, vu la taille de l’écran, je voulais un window manager très léger et qui pouvait s’utiliser le plus possible via des raccourcis claviers (sans souris donc). Un peu dans l’esprit de Tmux mais dans un environnement graphique.

Mon choix s’est porté sur i3.

Niveau installation, c’est très simple:

sudo apt install i3

Et pour lancer i3 par défaut:

sudo update-alternatives --install /usr/bin/x-session-manager x-session-manager /usr/bin/i3 60

Quelques touches par défault

ToucheDescription
$mod+Returnpour lancer le terminal integré
$mod+Shift+qpour tuer la fenêtre en cours
$mod+fbascule le mode plein écran
$mod+Shift+spacebascule le mode fenêtré / tile
$mod+chiffreselection du workspace chiffre
$mod+Shift+chiffredéplacement de la fenêtre séléctionnée vers le workspace chiffre
$mod+Shift+crechargement de la config i3
$mod+Shift+rredémarrage du i3

Personnalisation

J’ai modifié la configuration (dans ~/.config/i3/config) pour plus répondre à mes besoins/envies:

Changement de la police par défaut (utilisé dans la barre de menu et les titres)

font pango:monospace 9

Affichage d’un fond d’écran

# set background
exec --no-startup-id nitrogen --set-zoom-fill ~/.local/share/images/background.png --head=0
exec --no-startup-id picom -CGb

Lancement de barrier au démarrage (afin d’utiliser le clavier/souris d’un autre PC)

# start barrier (synergy fork)
exec --no-startup-id barrier

Lancement du gestionnaire de réseau

# NetworkManager is the most popular way to manage wireless networks on Linux,
# and nm-applet is a desktop environment-independent system tray GUI for it.
exec --no-startup-id nm-applet

Support des touches multimedia

# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status

bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status

Lancement d’un gestionnaire d’application via $mod+d (un peu comme spotlight sur macosx)

bindcode $mod+40 exec "rofi -modi drun,run,ssh -show drun -font 'pango:monospace 28' -theme 'amstrad'"

Lancement d’un émulateur Amstrad via $mod+c (et envoi vers le workspace 4)

# application
bindsym $mod+c exec /home/htmiva/Applications/cpcemu-2.4/cpcemu
for_window [class="cpcemu"] move container to workspace 4, fullscreen toggle, workspace number 4

Envoi de la fenetre dosbox dans le workspace 4 (+ fullscreen) à chaque lancement de cet application

# dosbox
for_window [class="dosbox"] move container to workspace 4, fullscreen toggle, workspace number 4

Menu plus sexy pour le redémarrage via $mod+BackSpace

# shutdown, reboot, lock screen
set $Locker i3lock && sleep 1

set $mode_system System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (Shift+s) shutdown

mode "$mode_system" {
     bindsym l exec --no-startup-id $Locker, mode "default"
     bindsym e exec --no-startup-id i3-msg exit, mode "default"
     bindsym s exec --no-startup-id systemctl suspend, mode "default"
     bindsym h exec --no-startup-id systemctl hibernate, mode "default"
     bindsym r exec --no-startup-id systemctl reboot, mode "default"
     bindsym Shift+s exec --no-startup-id systemctl poweroff -i, mode "default"

# back to normal: Enter or Escape
     bindsym Return mode "default"
     bindsym Escape mode "default"
 }

bindsym $mod+BackSpace mode "$mode_system"

Redémarrage du serveur X via $mod+shift+BackSpace

bindsym $mod+shift+BackSpace exec killall -9 startx

TPMS

⚠ AVERTISSEMENT : Toutes les informations fournies dans cette publication le sont à des fins éducatives uniquement. Le site n'est en aucun cas responsable de toute utilisation abusive de ces informations. Vous êtes seul responsable de vos actes devant la loi.

Suite des aventures SDR. Voulant montrer le NooElec NESDR à un collègue, j’ai lancé l’application rtl_433 qui, contrairement à son nom, scanne donc les gammes 433.92 MHz, 868 MHz (SRD), 315 MHz, 345 MHz et 915 MHz ISM.

Ces fréquences sont utilisées par beaucoup de sondes tel que les thermomètres Orégon sans fil.

L’application rtl_433 décode ces transmissions et connait 213 protocoles.

Quand je l’ai montré à mon collègue, nous étions près du parking de la boite et avons obtenu ce résultat:

Quelques marques de constructeurs automotobiles et le type TPMS.

TPMS ? Kesako ? Wikipedia me dit qu’il s’agit de Tire Pressure Monitoring System ou contrôle automatique de la pression des pneus en français. Ok, c’est plus clair. Il s’agit donc de ce que renvoient les valves des pneus.

Le système TPMS date de la fin des années 1980 et est obligatoire en Europe pour tous les véhicules neufs de moins de 3,5 tonnes depuis novembre 2014.

Il est soit indirect et utilise alors le système ABS du véhicule pour détecter si une roue tourne moins vite qu’une autre et est donc dégonflée; ou direct si il utilise des capteurs de pressions sur les valves.

Chaque valve ayant un identifiant unique, les vehicules peuvent être facilement traqués si ils passent près d’un récepteur 433.92 Mhz. Ce n’est pas en soit un trou de sécurité, chaque voiture étant déjà identifié par un numéro de plaque. Mais cela peut donner des idées pour un application d’automatisation d’ouverture de barrière, par exemple.

Pour certains constructeurs (Citroën, Fiat, Lancia, Nissan, …), l’association valves – véhicules peut se faire via l’ODB. Je possède un module ODB Bluetooth que je n’ai pas encore utilisé. Celui-ci pourra nous offrir un nouveau terrain de jeu … mais ceci est une autre histoire, qui sera contée une autre fois.

En continuant mes recherches sur ce système, j’ai pu voir qu’il n’est pas exempt de vulnérabilités. Imaginez que vous ayez un appareil qui puisse envoyer des trames identiques à celles qu’envoyent les sondes mais en modifiant la pression. Cela pourrait provoquer une alarme dans le vehicule et le mettre à l’arrêt… ou pire, si le véhicule dispose d’un système de gonflage automatique (système que possèdent certains tracteurs), surgonfler les pneus jusqu’à les endommager

Décidément, j’adore ces découvertes en radio logicielle.

Spotify

Je suis ce qu’on peut appeler un Apple fanboy…

Néanmoins, même si j’utilise Apple Music via l’abonnement familial, j’ai aussi un compte Spotify premium.

Spotify propose deux avantages par rapport à Apple Music:

Ses suggestions qui sont souvent judicieuses,
Spotify Connect qui permet de reprendre et de télécommander le stream n’importe où.

C’est sur cette fonctionnalité que je vais m’attarder.

Si on veut juste écouter le stream, le client lourd est, comme son nom l’indique, trop lourd. J’aimerais bien avoir un client léger et de préférence en ligne de commande.

C’est là qu’intervient librespot

Il peut s’installer via cargo sous linux (le gestionnaire de paquets de Rust), ou brew sous macOS.

Pour le lancer,

librespot -n "Deadketchup" -b 320 -c ./cache --enable-volume-normalisation --initial-volume 75 --device-type avr

Maintenant, à partir du client Spotify de votre smartphone (ou du client web disponible sur https://open.spotify.com), vous aurez un périphérique de sortie nommé Deadketchup où vous pouvez jouer votre stream préféré.

Est-ce que l’on irait pas un peu plus loin ? Pouvoir contrôler notre Spotify à partir d’une session ssh, est-ce que cela ne serait pas encore mieux ?

L’outil magique existe évidemment et a aussi été développé en Rust (il va falloir que je m’intéresse à ce langage un de ces jours).

spotify-tui, puisqu’il s’agit de lui, s’installe donc aussi via cargo (ou brew sous macOS).

Dès qu’il est installé, il se lance via la commande spt

Quelques raccourcis: Touche / pour rechercher une chanson, touche espace pour play/stop, touche d pour changer le periphérique de sortie et touche q pour sortir. Rien d’autres à savoir pour se faire plaisir.

Radio logicielle

⚠ AVERTISSEMENT : Toutes les informations fournies dans cette publication le sont à des fins éducatives uniquement. Le site n'est en aucun cas responsable de toute utilisation abusive de ces informations. Vous êtes seul responsable de vos actes devant la loi.

Radio logicielle ? C’est quoi donc ?

Un peu d’histoire…

En 2012, Antti Palosaari (aidé par Eric Fry et Osmocom) se sont aperçus que certains dongles DVB-T (qui permettent de capter la TNT) pouvait être « dévié » grâce au chipset RTL2832U dont ils étaient composés. De leurs découvertes est né le projet rtl-sdr.

Le signal I/Q pouvait être directement écouté sur la gamme de fréquence de 22 Mhz à 2200 Mhz et être utilisé par des applications.

Et que trouve-t-on entre 22Mhz et 2200Mhz ?

DescriptionFréquences
Radio FM 87,5 à 108 MHz
Radio DAB 174 à 240 MHz
Les bandes ISM 433 et 866 Mhz

Il y a quelques années donc, j’avais acheté un Cinergy TStick RC Rev3 qui, manque d’outils, ne m’a pas beaucoup servit.

Je l’ai ressorti il y a quelques semaines et fait un tour sur la distribution linux (ubuntu mate) de mon GPD Pocket 3 pour voir ce qu’ils proposaient pour le RTL2832U…

Installons les packages kivonbien:

sudo apt-get install rtl-sdr alsa-utils sox

Et nous commencerons simplement par la radio en FM.

rtl_fm -f 103.6M -M fm -s 170k -A fast -r 32k -l 0 -E deemp | play -r 32k -t raw -e s -b 16 -c 1 -V1 -

Cette commande permet d’écouter la fréquence 103.6 Mhz (Bel-RTL en Belgique) en 32kbits et l’envoie sur la sortie son.

Nous continuerons la découverte du SDR bientôt avec, par exemple, l’espionnage de thermomètre sans-fil… Même pas peur.

Mais ceci est une autre histoire, qui sera contée une autre fois.

(c) Pexels – David McBee

Récupération de Bitcoin

Lors de mes recherches de documentation pour la création de l’article sur les chaines de blocs, je me suis rappelé que j’avais crée un wallet Bitcoin il y a quelques années. Ce wallet était toujours dans ma Dropbox (ce qui n’est vraiment pas à faire !).

Et si ce wallet contenait des bitcoins et que j’étais devenu millionnaire ?

tl;dr: Non

 √ bitcoin % ls -latr
 total 144
 -rw-r--r--@  1 miguelvanhove  staff  73728 30 nov  2013 Untitled.dat

Après un examen rapide, il semblerait que les fichiers wallet du client officiel étaient sauvés dans un format BerkleyDB.

Pour notre facilité, Jim Zhou a réalisé une application (disponible via docker pour plus de facilité) qui permet d’extraire les clefs de ce wallet. Les commandes suivantes générent un fichier wallet_output.txt que nous pouvons utiliser ensuite.

docker pull jimzhou/walletlib:latest
docker run -v "$(pwd):/app" jimzhou/walletlib:latest Untitled.dat -o wallet_output.txt --keys

Le fichier wallet_output.txt résultant contient des lignes telles que

1Kd4srBoYo8AncnbJJZts6xoJDbzPy1RGW:Kwtk6bFMbnU8gkDuHno4ot2RqZSh8Dcy98RMqKdN3ps4htEDoeRt
15W4WWX2YzagGAMEkj8Y1wsta35FpC6Ys6:L36x7eB8LJPFBkxgUt6CJYaqc8A5fmUYL3crnHbi4zTyYbSTVqav

Dans un premier lieu, nous n’aurons besoin que des adresses avant le :.

cat wallet_output.txt|cut -d ':' -f 1|tr 'n' ' '

Il ne reste plus qu’à copier le résultat vers un site de Bitcoin Addresse Lookup tel que blockonomics.co.

Résultat

Comme vous pouvez le voir, ce n’est pas encore cette fois que je serai millionaire. Mais j’imagine tout ces wallets qui doivent trainer sur d’autres disques dur et que leur propriétaire ont oublié…

Dans le cas contraire, il aurait été nécessaire d’extraire également les private_key… mais ceci est une autre histoire, qui sera contée une autre fois.