My Own Memory Hole
Blog♯Linux

Générer des playlists pour MPD avec les dernières pistes ajoutées

Afin de retrouver facilement dans ncmpcpp les dernières pistes ajoutées à ma bibliothèque, j'ai trouvé et adapté le script suivant.

$ nano ~/bin/lastaddedmpd
#!/bin/bash

cd /home/$USER/NAS/Musique
find . -type f -ctime -1 | egrep '\.mp3$|\.flac$' | awk '{ sub(/^\.\//, ""); print }' | sort -n > /home/$USER/NAS/Musique/playlists/$(date +%d-%m-%Y)_last_$1_days.m3u
$ chmod +x ~/bin/lastaddedmpd

Et on lance la commande lastaddedmpd avec pour argument le nombre de jours à prendre en compte.

My Own Tmux Cheat Sheet

Il s'agit ici pour moi de réunir en un lien unique, clairement identifiable — pour moi du moins — un certain nombre de ressources consacrées à Tmux, collant le plus possible à mes besoins et à mon usage de ce « multiplexeur de terminaux ».

Installation et préparation de base

Tmux est disponible dans les dépôts et il suffit pour l'installer d'un :

sudo apt install tmux

Ensuite, on récupère et on place dans notre /home les fichiers de configuration proposé par Gregory Pakosz sur GitHub :

cd /home/$USER
git clone https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf
cp .tmux/.tmux.conf.local .

Pour profiter pleinement du copier-coller, il convient d'installer le paquet xclip.

Configuration personnelle

...

Raccourcis claviers

Ctrl+b " : partager le panneau horizontalement
Ctrl+b % : partager le panneau verticalement
Ctrl+b c : créer un nouveau panneau
Ctrl+b x : détruire le panneau actif

Ctrl+b m : (dés)activer le mode souris

MPD et Bluetooth sur Raspberry Pi 2

Afin d'utiliser pleinement mon « système multimédia » à base d'un NAS et d'un Raspberry Pi – qui commence à se faire vieillissant puisque dans sa vesion 2 –sur lequel tourne un serveur MPD, je souhaitais connecter via Bluetooth ce dernier à mon petit amplificateur Tangent Ampster BT.

Connexion Bluetooth

J'ai fait l'aquisition d'un dongle USB/Bluetooth TP-Link reconnu, dans mon souvenir, nativement sous Raspbian Buster, sous réserve d'avoir bien installé le paquet pi-bluetooth :

sudo apt install pi-bluetooth

Pour connecter l'ampli au Raspberry Pi, on utilise l'utilitaire en ligne de commande bluetoothctl : on commence par rechercher les périphériques disponibles (scan on), puis on fait l'appairage avec le bon device (pair) et on lui accorde notre confiance (pas d'authentification nécessaire, trust) avant de nous y connecter (connect) et de cesser la recherche (scan off) :

$ bluetoothctl 
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:1A:7D:DA:71:15 Discovering: yes
[CHG] Device FC:58:FA:14:27:BC RSSI: -71
[CHG] Device FC:58:FA:14:27:BC TxPower: 4
[...]
[bluetooth]# pair FC:58:FA:14:27:BC 
Attempting to pair with FC:58:FA:14:27:BC
[CHG] Device FC:58:FA:14:27:BC Connected: yes
[...]
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: yes
[CHG] Device FC:58:FA:14:27:BC Paired: yes
Pairing successful
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: no
[CHG] Device FC:58:FA:14:27:BC Connected: no
[bluetooth]# trust FC:58:FA:14:27:BC 
[CHG] Device FC:58:FA:14:27:BC Trusted: yes
Changing FC:58:FA:14:27:BC trust succeeded
[bluetooth]# connect FC:58:FA:14:27:BC 
Attempting to connect to FC:58:FA:14:27:BC
[CHG] Device FC:58:FA:14:27:BC Connected: yes
Connection successful
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: yes
[Tangent Ampster BT]# scan off
Discovery stopped
[...]
[Tangent Ampster BT]# exit

Cependant, si à l'étape de la connexion à l'ampli, vous obtenez une erreur, il convient alors d'installer le paquet pulseaudio-module-bluetooth  :

$ sudo apt install pulseaudio-module-bluetooth

Ouvez ensuite le fichier /etc/pulse/default.pa et vérifiez aux alentours des lignes 65-67 que vous avez bien :

.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif

et ajoutez à la fin du fichier :

# automatically switch to newly-connected devices
load-module module-switch-on-connect

Lancez alors pulseaudio avec la commande pulseaudio -D après l'avoir tué si besoin (pulseaudio -k) puis relancez la commande connect dans l'outil bluetoothctl.

Configurer de nouvelles sorties dans MPD

Une nouvelle fois, je ne suis pas parvenu à configurer MPD pour qu'il utilise PulseAudio... On s'en tient donc à ALSA et au « Bluetooth Audio ALSA Backend » bluealsa que l'on commence par installer :

$ sudo apt install bluealsa

Puis on « crée » de nouveaux périphériques audio pour l'ensemble du système et de ses utilisateurs :

sudo nano /etc/asound.conf
pcm.tangent {
    type plug
    slave {
        pcm {
            type bluealsa
            device FC:58:FA:14:27:BC
            profile "a2dp"
        }
  }
  hint {
    show on
    description "Tangent Ampster BT"
    }
}

pcm.jblgo {
  type plug
  slave {
    pcm {
      type bluealsa
      device 78:44:05:61:4C:17
      profile "a2dp"
    }
  }
  hint {
    show on
    description "JBL Go"
  }
}

On en vient ensuite à la configuration de MPD auquel on doit déclarer les nouvelles sorties à utiliser :

audio_output {
        type            "alsa"
        name            "Tangent Ampster BT - ALSA Bluetooth"
        device          "tangent"
        mixer_type  "software"
    format          "44100:16:2"
}
audio_output {
        type            "alsa"
        name            "JBL Go - ALSA Bluetooth"
        device          "jblgo"
        mixer_type      "software"
}

Et on relance le service :

$ sudo service mpd restart

Partage Samba / CIFS depuis NAS D-Link DNS-320

Un déménagement m'ayant amené à réinstaller l'ensemble de mon « système multimédia » constitué d'un NAS et d'un Raspberry Pi, je me suis trouvé une nouvelle fois à avoir le plus grand mal à mettre en place le partage des partitions de mon NAS vers l'ensemble de mes terminaux... et impossible de réutiliser de manière satisfaisante le montage NFS et ses options que j'utilisais jusqu'alors.
Je me suis rabattu alors vers une solution de partage unique via le protocole CIFS proposé par défaut par le NAS.

On commence par créer un nouvel utilisateur dans la section Management > Account Management à qui l'on donne les droits de lecture et d'écriture si les partages ont déjà été défini dans Management > Network Shares ; sinon, les permissions seront définies lors de la création des partages.

Ensuite, on crée, sur les clients un fichier ~/.nascredentials qui va contenir les identifiants de connexion de cet utilisateur :

username=USER
password=PASSWORD

On fait en sorte que seul le propriétaire de ce fichier puisse le lire et l'écrire :

$ chmod 600 ~/.nascredentials

On crée des points de montage pour les partages du NAS :

$ mkdir ~/NAS ~/NAS_DOWN

Enfin, on édite le fichier /etc/fstab (en spécifiant bien l'emplacement du fichier .nascredentials) :

//192.168.1.42/Contents /home/bbrice/NAS        cifs    _netdev,vers=1.0,credentials=/home/bbrice/.nascredentials,rw,iocharset=utf8 0 0
//192.168.1.42/torrent /home/bbrice/NAS_DOWN    cifs    _netdev,vers=1.0,credentials=/home/bbrice/.nascredentials,rw,iocharset=utf8 0 0

Puis on monte nos partitions :

$ sudo mount -a

Par contre, il est sans doute nécessaire d'installer le paquet cifs-utils :

$ sudo apt install cifs-utils

Transmission sur NAS D-Link DNS-320 avec fun_plug

Si je gère toujours mes téléchargements de torrents sur mon NAS « augmenté » de fun_plug, je n'utilise plus rTorrent en daemon mais Transmission. Plusieurs raisons à ce changement : la plus importantes étant la non disponibilité de certaines dépendances du fait de la disparition de plusieurs dépôts pour fun_plug ; et puis, rTorrent présentait certaines limitations, notamment l'absence de file d'attente...

Installation

L'installation de Transmission ne peut se faire par le biais de slacker, l'outil de gestion de paquets de fun_plug, encore une fois pour des questions de dépendances non satisfaites...
Il faut commencer par installer Optware, qui fournit de nombreux logiciels :

$ wget http://wolf-u.li/u/233 -O /ffp/start/optware.sh
$ chmod a+x /ffp/start/optware.sh
$ /ffp/start/optware.sh start

L'on dispose alors de la commande ipkg 

# ipkg update
# ipkg list
# ipkg list transmission
# ipkg install transmission

Préparation

On commence par créer les répertoires de téléchargement et de configuration&nbp;:

# mkdir -p /mnt/HD/HD_b2/torrent/{.transmission,complete,incomplete}

Ensuite, pour bénéficier du script de lancement de transmission-daemon, nous installons puis désinstallons dans la foulée via slacker le paquet transmission :

# slacker -a transmission
# slacker -r transmission

Puis on édite le fichier /ffp/start/transmission.sh en modifiant les chemins des exécutables (qui se trouvent dans /opt/bin) et des fichiers de configuration de Transmission :

# nano /ffp/start/transmission.sh 

Voici mon script :

#!/ffp/bin/sh

# PROVIDE: Transmission

. /ffp/etc/ffp.subr

TRANSMISSION_HOME=/mnt/HD/HD_b2/torrent/.transmission

name="transmission-daemon"
command="/opt/bin/$name"
start_cmd="transmission_start"
stop_cmd="transmission_stop"
status_cmd="transmission_status"
user=root
su_cmd="/ffp/bin/su"

transmission_start()
{
   if [ ! -d ${TRANSMISSION_HOME} ]; then
      $su_cmd $user -c "mkdir ${TRANSMISSION_HOME}"
   fi
   echo "Starting $name"
      $su_cmd $user -c "$command -g ${TRANSMISSION_HOME} -e ${TRANSMISSION_HOME}/$name.log"
}

transmission_stop()
{
   echo "Stopping $name"
      /ffp/bin/killall -SIGINT $name
}

transmission_status()
{
   _pids=$(pidof $name)
   if test -n "$_pids"; then
      echo "$name is running, pid:"
      pidof $name
   else
      echo "$name not running"
   fi
}

run_rc_command "$1"

On le rend exécutable :

# chmod a+x /ffp/start/transmission.sh

Premier lancement

Afin de générer le fichier de configuration, il convient de lancer une première fois transmission-daemon avec les arguments suivants :

  • -g : le chemin vers le répertoire de configuration et autres fichiers générés par Transmission ;
  • -w : le répertoire où seront stockés les fichiers téléchargés ;
  • -T : je n'ai pas besoin d'authentification puisque je me limite à mon réseau local (option -a).
# /opt/bin/transmission-daemon -f -g /mnt/HD/HD_b2/torrent/.transmission -w /mnt/HD/HD_b2/torrent/complete -T -a 127.0.0.1,192.168.1.*

On peut interrompre le daemon (Ctrl+C) puis éditer le fichier de configuration qui a été créé :

# nano /mnt/HD/HD_b2/torrent/.transmission/settings.json 

Ensuite, on peut lancer Transmission simplement avec :

# /ffp/start/transmission.sh

Références :

Window tilling / Split screen sous Openbox-LXDE

Il est particulièrement simple sous LXDE de configurer des raccourcis clavier permettant de redimensionner et de positionner les fenêtres, permettant ainsi d'afficher simultanément plusieurs applications.

Pour cela, il suffit d'éditer le fichier ~/.config/openbox/lxde-rc.xml et d'ajouter dans la section <keyboard> ce qui suit :

    <keybind key="C-W-Up">        # FullScreen
      <action name="Maximize"/>
    </keybind>
    <keybind key="C-W-Down">        # MiddleScreen
      <action name="UnmaximizeFull"/>
      <action name="MoveResizeTo"><x>center</x><y>center</y><width>50%</width><height>50%</height></action>
    </keybind>

    <keybind key="C-W-Left">        # HalfLeftScreen
      <action name="UnmaximizeFull"/>
      <action name="MoveResizeTo"><x>0</x><y>0</y><height>100%</height><width>50%</width></action>
    </keybind>
    <keybind key="C-W-Right">        # HalfRightScreen
      <action name="UnmaximizeFull"/>
      <action name="MoveResizeTo"><x>-0</x><y>0</y><height>100%</height><width>50%</width></action>
    </keybind>

    <keybind key="C-W-1">        # UpperQuarterLeft
      <action name="UnmaximizeFull"/>
      <action name="MoveResizeTo"><x>0</x><y>0</y><height>50%</height><width>50%</width></action>
    </keybind>

    <keybind key="C-W-2">        # LowerQuarterLeft
      <action name="UnmaximizeFull"/>
      <action name="MoveResizeTo"><x>0</x><y>-0</y><height>50%</height><width>50%</width></action>
    </keybind>

    <keybind key="C-W-3">        # LowerQuarterRight
      <action name="UnmaximizeFull"/>
      <action name="MoveResizeTo"><x>-0</x><y>-0</y><height>50%</height><width>50%</width></action>
    </keybind>

    <keybind key="C-W-4">        # UpperQuarterRight
      <action name="UnmaximizeFull"/>
      <action name="MoveResizeTo"><x>-0</x><y>0</y><height>50%</height><width>50%</width></action>
    </keybind>