11

Apr

by Maniack Crudelis

Pourquoi un downmix 5.1 vers 5.0 ?
Plusieurs raisons à cela:

  • Un système audio 5.0, sans caisson de basse, et un ampli qui ne remix pas le canal LFE (.1) dans le mix global.
  • Un élément de la chaine audio qui perd le canal LFE avant l’ampli.

Je me situe dans le 2e cas de figure, avec une panne matérielle affectant l’entrée HDMI de ma barre de son, m’obligeant à passer le signal audio via l’entrée HDMI ARC de ma TV.
Problème toutefois, même avec l’audio en PassThrough sur la TV, celle-ci ne transmet pas le canal LFE du caisson de basse. Résultant en un son plat et fade…

Pour remédier à ce problème le meilleur moyen est d’effectuer un downmix 5.1 vers 5.0 pour remixer le canal LFE dans le mix global.
De cette manière, le signal du canal LFE va transiter sur les autres canaux audio et être ensuite transmis au caisson de basse par le filtre passe-bas de la barre de son.

Si la méthode n’est pas optimale, elle permet au moins de pallier le défaut et de retrouver l’usage du caisson de basse pour les sources 5.1.

Pour y parvenir, nous allons créer un nouveau “sink” pour PulseAudio.

Tout d’abord, il est nécessaire d’identifier le profil auquel rattacher ce nouveau “sink”

pacmd list-sinks | grep name:

Ce qui donne un nom de profil de la forme “alsa_output.pci-0000_01_00.1.hdmi-surround

Ensuite, nous pouvons ajouter un nouveau sink 5.0
Editer le fichier “/etc/pulse/default.pa

sudo nano /etc/pulse/default.pa

Et y ajouter

# Add a 5.0 sink to downmix from 5.1 to 5.0 and keep the LFE
load-module module-remap-sink sink_name=Surround50 sink_properties="device.description='Surround 5.0'" remix=yes master=alsa_output.pci-0000_01_00.1.hdmi-surround channels=5 master_channel_map=front-left,front-right,rear-left,rear-right,front-center

Nous disposons à présent d’un sink 5.0, attaché au profile HDMI Surround, mais celui-ci ne permet pas encore de réintégrer le canal LFE. Pour y parvenir, il faut encore éditer le fichier “/etc/pulse/daemon.conf

sudo nano /etc/pulse/daemon.conf

Et y ajouter

# Remix the LFE channel into the 5.0 global mix
default-sample-channels = 5
enable-remixing = yes
remixing-consume-lfe = yes

On peut à présent redémarrer PulseAudio

pulseaudio -k; sleep 2; pulseaudio --start

Et vérifier la présence du caisson de basse sur un extrait 5.1, comme ceux présents sur le site fraunhofer.

11

Mar

by Maniack Crudelis

Las de devoir changer de source entre mon Kodi (sur un raspberry pi) et le décodeur TV de mon FAI et circonspect quand à l’arrivée inéluctable d’un décodeur Android TV, j’ai finalement décidé de tout réunir dans une seule source, un Home Theater Personal Computer (HTPC).
De cette manière, plus de problème avec le décodeur de mon FAI qui surveille mes activités, m’écoute et change l’accès à ses services au gré de ses partenariats.

A moi un ordinateur performant et évolutif qui sera en mesure de servir tout mes médias et services sans que j’en perde le contrôle.

Sommaire:

Le matériel

Ma configuration initiale est simple et peut être adapté selon les besoins.

  • Pour l’écran, je dispose d’une TV de 55 pouces en 4K.
  • Le son est servi par une barre de son avec caisson de basse Yamaha YAS-207.

Le HTPC en lui-même est construit sur plusieurs éléments.

  • Le boîtier

Un SilverStone Milo ML04 de faible encombrement avec suffisamment d’aération pour laisser respirer la configuration. Très important étant donné que l’ensemble va se trouver dans un espace réduit dédié du meuble TV.

Ce boîtier dispose également d’un emplacement pour un lecteur Blu-ray.

  • La carte mère

Une carte mère simple, une ASRock H410M/AC qui dispose d’une sortie HDMI, de Wifi et de Bluetooth.

  • Le processeur

Un Intel Core i5-10400 avec un chipset graphique Intel UHD Graphics 630 intégré pour gérer la sortie vidéo.

En l’état, ce couple processeur/carte mère permet de sortir de la 4k à 30Hz. Suffisant pour regarder des films en 24 images par secondes.

Très important également, ce processeur a un TDP de 65W seulement, ce qui permet d’éviter de surchauffer. Le refroidissement de l’ensemble étant un point clé. Le HTPC ne doit pas ventiler trop bruyamment.

  • Les autres composants
    • 8 Go de RAM Corsair, avec radiateur, pour faire tourner l’ensemble.
    • Une alimentation silencieuse 80PLUS, un meilleur rendement étant synonyme de moins de déperdition de chaleur.
    • Un SSD de 120Go. Pas de bruit mécanique et de peu de chaleur dégagée.
    • Et 2 ventilateur PWM pour refroidir l’ensemble.
      C’est un peu plus cher, mais ça permet à la carte mère de réguler la vitesse des ventilateurs en fonction de la température. Donc moins de bruit quand ce n’est pas nécessaire.
L’ensemble des composants du HTPC
Le HTPC complètement assemblé
  • La télécommande

Le meilleur pour la fin, une télécommande Rii Mini i25 Wireless, un 3 en 1 clavier/souris/télécommande média.
Indispensable pour utiliser son HTPC depuis le canapé.

Tout l’intérêt c’est que ce genre de télécommande se comporte comme un clavier/souris sans fil avec des touches multimédia. C’est donc compatible avec n’importe quel ordinateur sans besoin de configuration supplémentaire.

Configuration du BIOS

De légères customisations du BIOS vont être nécessaire pour tirer tout le parti de notre HTPC.

  • Ventilateurs en Silent Mode

Premièrement, la vitesse des ventilateurs du châssis, les 2 ventilateurs PWM doivent extraire la chaleur hors de la carcasse, mais en limitant le bruit. Nous allons donc régler ces 2 ventilateurs en Silent Mode.
Ça n’empêchera pas les ventilateurs de suivre la montée en température, simplement ils seront moins enclins à s’agiter si ce n’est pas nécessaire.

Nous allons laisser toutefois le ventilateur du processeur en Standard Mode pour ne pas affecter ses performances.

  • Démarrage sur USB

Nous allons également activer USB Keyboard/Remote Power et Legacy USB port pour permettre la sortie de veille depuis une télécommande.

Il s’avère que Rii Mini i25 Wireless n’est pas capable de réveiller la machine, tandis que le Mini Wireless Keyboard K01+ (de la même marque) en est parfaitement capable.
Un fait bien étrange que je suis incapable d’expliquer…

Dans ce cas de figure, faute d’une télécommande conciliante, je vous conseille une application Wake On Lan à installer sur un smartphone.

  • Réveil sur alarme RTC

Afin de supporter la sortie de veille ou le démarrage sur l’horloge RTC, qui nous servira aux backups. Nous allons configurer RTC Alarm Power On sur By OS.

  • Mémoire dédiée au chipset graphique

Le chipset graphique n’a pas de mémoire dédiée, sa mémoire vive est empruntée sur la mémoire vive installée.
Le maximum disponible est de 1024Mb, nous allons donc allouer le maximum, nul besoin d’être avare.
Ce paramètre se trouve dans Share Memory.

Installation du système (Kubuntu)

Bien entendu chacun est libre d’installer la distribution et l’interface de son choix, ma préférence va à Kubuntu pour plusieurs raisons

  • J’ai l’habitude de travailler sous Debian avec l’interface KDE !
  • Ubuntu permet d’avoir un support large en cas de problème et est régulièrement mis à jour.
  • Du fait que KDE soit hautement configurable, c’est une interface qui va pouvoir être soumises à de nombreuses modifications pour être pratique à utiliser dans le cadre d’un HTPC.

Notons toutefois que toutes les explications qui suivront tiendrons compte d’une interface de bureau KDE sous Ubuntu.

Je ne vais pas détailler ici l’installation de Kubuntu, qui est particulièrement simple, si nécessaire ubuntu-fr propose une documentation.

Le seul point important lors de l’installation est de veiller à prévoir une partition swap de taille supérieure à la mémoire vive installée dans le HTPC. Sans cela, le HTPC ne sera pas en mesure de se mettre en hibernation lorsqu’il ne sera pas utilisé.
Pour notre cas, le swap sera de 10Go.

Je conseille également d’activer l’ouverture de session automatique, pour plus de confort.

Accès SSH

C’est tout à la fois une étape tout à fait optionnelle et pourtant indispensable de mon point de vue.
Si l’objectif d’un HTPC n’est certainement pas d’être utilisé via SSH, il est indéniable qu’un vrai clavier est irremplaçable pour les opérations de maintenance et même certaines commandes qui vont suivre.

Kubuntu ne dispose pas d’un serveur SSH par défaut, nous allons donc installer le paquet ssh.

sudo apt install ssh

Des configurations supplémentaires sont disponible dans /etc/ssh/ssd_config mais pas indispensable, pour ma part je modifie toujours le port par défaut.

Rien de plus à faire pour pouvoir profiter à tout moment d’un accès SSH indépendant de l’interface graphique du HTPC.

Configuration initiale de l’interface

  • Résolution d’écran

La première bonne nouvelle à la fin de l’installation c’est que Ubuntu gère nativement et automatiquement la résolution 4k sans besoin de configurer quoi que soit.
Toutefois, à 30Hz, la désynchronisation avec la fréquence des vidéos se remarque beaucoup plus. Il devient donc nécessaire de connaître la fréquence de rafraîchissement des vidéos pour s’y conformer.

Les sources 4k sont encore rares, pour faciliter la lecture de vidéo sur Firefox ou éviter une charge de travail trop importante en upscaling, nous pourrions décider de rester en 1920×1080 60Hz pour l’usage courant et basculer en 4k seulement quand nécessaire.

Cela a toutefois des conséquences inattendues en raison d’un bug KDE, la configuration DPI de sddm (l’écran de login) va être appliquée au bureau plasma.
Pour faire simple, les icônes et le texte risquent d’être tout petits et illisibles. Et les widgets vont être déplacé à chaque ouverture de session, ce qui est très agaçant…

Pour corriger ce problème, il faut connaître la configuration DPI de la session plasma.

xdpyinfo | grep -B2 resolution

Pour ma part, la session plasma est à 96 dpi.
Puis forcer sddm à utiliser la même configuration.

sudo nano /etc/sddm.conf.d/kde_settings.conf
[X11]
ServerArguments=-dpi 96
EnableHiDPI=true

[Wayland]
EnableHiDPI=true
sudo nano /usr/share/sddm/scripts/Xsetup
xrandr --dpi 96

Si toutefois nous souhaitons garder une résolution de 3840×2160, il nous faudra augmenter l’échelle globale pour que l’interface ne soit pas trop petite.
Toutefois, c’est tentant je sais, mais n’utilisez jamais une échelle qui ne soit pas un nombre entier !!! Pas de 125, 150 ou 175.
Ceci s’appelle du “fractional scaling”, c’est encore récent et ça provoquera d’affreux lags sur les vidéos fullscreen.

  • Fréquence de rafraîchissement de l’écran

Si l’écran est configuré en 2160@30, soit la résolution 4k disponible en 30Hz. Nous pouvons parfois être confronté à des problèmes de synchronisation entre le taux de rafraîchissement et la fréquence des vidéos, visible en particulier sur les travelling.
Dans ce cas, il peut être préférable d’avoir un taux de rafraîchissement plus proche de celui de la vidéo.

Ce paramètre peut être modifié dans:

Configuration du système > Affichage et Écran > Configuration de l’affichage > Taux de rafraîchissement

Toutefois, et afin de garder davantage de flexibilité, nous allons nous permettre le luxe de changer le taux de rafraîchissement en fonction de nos activités.
Dans le panneau de configuration précédent, nous avons pu constater les taux de rafraîchissement disponible pour notre écran. Avec cet écran et ce chipset graphique, je dispose de 24, 25 ou 30 Hz pour une résolution 4k et jusqu’à 120Hz pour 1080.

Le nombre d’images par seconde dépend de la source.
– 24 FPS correspond au standard du cinéma. De nombreuses séries américaines utilisent également cette fréquence pour le rendu cinéma qu’elle procure.
– 25 FPS est la fréquence des formats PAL et SECAM utilisés à la télévision, notamment française et dans une grande partie du monde.
– 30 FPS est la fréquence du format NTSC pour la télévision, essentiellement américaine et japonaise.

On peut trouver une répartition des formats utilisé de par le monde sur cette carte de Wikipedia.

Pour changer la fréquence de rafraîchissement de l’écran simplement et rapidement, nous allons créer des raccourcis rapide dans la barre d’outil principale en créant un Composant graphique (Widget) Lancement rapide dans lequel nous allons glisser des fichiers desktop.

Pour ce faire, nous allons Créer un nouveau > Lien vers une application.
Dans le champs Commande : nous ajouterons

xrandr --size 3840x2160 --rate 24

ou

xrandr --size 1920x1080 --rate 60

Et ainsi de suite pour chaque taux de rafraîchissement dont nous souhaitons disposer rapidement.

Pour vérifier le taux de rafraîchissement et son bon fonctionnement, nous pourrons nous tourner vers ce site: Framerate Benchmark.

  • Largeur des barres de défilement

En utilisant une air mouse sans molette de défilement, les barres de défilement tendent à devenir un outil indispensable… Heureusement KDE permet de changer la taille des barres de défilement (les ascenseurs).

Ce paramètre se trouve dans Configuration du système > Apparence des applications
En choisissant un style d’application, il est possible de le configurer.
Parmi les styles par défaut, seul le style Oxygen permet de changer la largeur des barres de défilement.

Toutefois, en ce qui concerne les applications utilisant gtk (tel Firefox), ce paramètre sera ignoré. Pour pallier ce défaut, nous allons modifier les barres de défilement gtk.

nano $HOME/.config/gtk-3.0/gtk.css

Et ajouter à la suite:

.scrollbar.vertical slider,
scrollbar.vertical slider {
min-width: 15px;
}
  • Bords de l’écran

Sauf à être particulièrement habile avec une air mouse, je conseille vivement de désactiver les actions en bord d’écran.

Ce paramètre se trouve dans Configuration du système > Comportement de l’espace de travail > Bords de l’écran

  • Verrouillage après sortie de veille

Par défaut, kubuntu verrouille la session après la sortie de veille. Ce n’est pas le comportement souhaité.

Ce paramètre se trouve dans Configuration du système > Verrouillage de l’écran > Après le réveil

  • Veille et hibernation

Il n’est pas souhaitable que le HTPC reste toujours allumé, dans le même temps nous souhaitons qu’il soit rapidement opérationnel.
Pour cela nous allons utiliser la mise en veille et l’hibernation sur le long terme.

Avant toutefois de paramétrer l’hibernation, il va être nécessaire de l’activer dans ubuntu. (Pour une raison étrange, l’hibernation n’est pas possible par défaut dans ubuntu…)

Les informations qui suivent sont tirées du tuto Comment activer l’hibernation.

Installons tout d’abord le paquet pm-utils pour obtenir la commande d’hibernation.

sudo apt install pm-utils

Nous allons ensuite créer le fichier /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

sudo nano /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

Et y ajouter le code suivant

[Réactive hiberner par défaut dans upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Réactive hiberner par défaut dans logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes

Et enfin redémarrer le HTPC.

A présent nous pouvons faire usage de l’hibernation dans notre HTPC.

Ce paramètre se trouve dans Configuration du système > Gestion de l’énergie > Économie d’énergie

  • > Suspendre la session

Nous allons choisir une mise en veille automatique après un temps raisonnable d’inactivité.
Cela permettra de ne pas garder le HTPC inutilement allumé si il n’est pas utilisé.

  • > En veille, hiberner après une certaine période d’inactivité

Ceci va permettre de placer le HTPC en hibernation suite à la mise en veille pour ainsi économiser le courant.
La période d’inactivité avant hibernation est de 3 heures par défaut, cette valeur par défaut peut être modifiée dans le fichier /etc/systemd/sleep.conf

Cette “période d’inactivité” doit être comprise comme période de veille du HTPC. Ce délai s’ajoute donc à celui précédent la mise en veille.

  • > Prise en charge des évènements de boutons

Nous allons rester cohérent et demander une mise en hibernation immédiate lors de l’appui sur le bouton power.

  • Configuration de la télécommande

KDE permet de changer les raccourcis de pratiquement tout élément de l’interface.

Ces paramètres se trouvent dans Configuration du système > Raccourcis

La télécommande ne disposant pas de touche F4, il nous faudra aller chercher la croix en haut à droite des fenêtres pour espérer les fermer.
Pour pallier cet agaçant défaut, nous allons utiliser un autre raccourci clavier.
J’ai choisi la combinaison Ctrl+Back

Ce raccourci se trouve dans > Raccourcis globaux > Kwin > Fermer une fenêtre

On peut noter également que le bouton d’extinction de la télécommande est en réalité un bouton de mise en veille. Cela ne pose pas de problème puisque la mise en veille suivi de l’hibernation est préférable.
Si nous souhaitions toutefois changer ce raccourci, il se trouve dans > Raccourcis globaux > Gestion de l’énergie

Et puisque qu’à l’étape suivante nous allons configurer des bureaux virtuels et dédier le premier au dashboard principal, nous allons configurer le bouton Home de la télécommande pour qu’il mène directement à ce bureau.

> Raccourcis globaux > Kwin > Passer au bureau 1

De même pour faciliter la navigation entre les bureaux, nous pouvons sacrifier les touches PgUp et PgDn pour passer respectivement au bureau précédent et suivant.

> Raccourcis globaux > Kwin > Passer au bureau précédent
> Raccourcis globaux > Kwin > Passer au bureau suivant

Adaptation de l’interface pour un HTPC

Bien que la télécommande choisie dispose d’un clavier et d’une air mouse, force est de constater qu’il ne s’agit pas d’un ordinateur avec une interface clavier/souris habituelle. Nous souhaitons une interface simple à utiliser avec une télécommande, plus proche de ce qu’on peut attendre d’un HTPC.

Mon choix se porte sur une interface en multi-bureaux avec des bureaux dédiés à chaque activité et un bureau principal servant à la navigation.

  • La barre d’outil principale

La barre d’outil principale au bas de l’écran est relativement importante, pour les notifications notamment. Nous pourrions nous en passer éventuellement.
J’ai fais le choix de la garder.

Si on fait le choix de garder cette barre d’outils, il est toutefois préférable d’agrandir sa taille pour avoir une meilleure visibilité.
Pour ce faire, un clic droit sur la barre d’outils permet d’accéder à sa configuration.

> Modifier tableau de bord…

Ensuite, nous allons remplacer le menu principal, le Lanceur d’applications par un menu plus facile à utiliser sans souris.

Un clic droit sur le Lanceur d’application permet de sélectionner Afficher les Alternatives… Nous choisirons Tableau de bord des applications en remplacement.

  • Le bureau

Le bureau va se présenter comme le coeur de notre interface de navigation.
Pour commencer, nous allons utiliser une vue principale de type Bureau au lieu de Vue de dossier pour éviter les interférences de divers fichiers dans le dossier.

Ensuite nous allons ajouter un ensemble de Composants graphiques (Widgets) pour constituer l’interface et avoir un monitoring simple sur l’activité du HTPC.

  • Gestionnaire de bureaux

Pour le confort de l’interface, le choix se fait sur 8 bureaux en 4 lignes.

Configuration du système > Comportement de l’espace de travail > Bureaux virtuels

Le widget lui-même sera configuré pour afficher le Nom du bureau et Afficher le bureau lorsqu’il sera sélectionné.
Avec cette configuration, nous disposons d’un moyen simple de changer d’activité en cliquant simplement sur le bureau souhaité.

  • Lancement rapide

Ce widget va nous servir à avoir un accès rapide sur nos services.

Ce faisant, nous pourrons aisément démarrer Kodi ou Netflix depuis le bureau.

  • Surveillance de la température

Thermal Monitor est un widget qui n’est pas installé par défaut, il est toutefois très simple de l’ajouter à KDE en cliquant sur Obtenir de nouveaux composants graphiques.

Ce widget nous permettra de garder un oeil sur la température du HTPC.

  • Tableau de bord des applications

Pour terminer, nous allons ajouter un second Tableau de bord des applications pour avoir un accès rapide à l’aide de la souris si nécessaire.

La configuration de l’interface est à présent terminée et prête pour un usage dédié à un HTPC.

Mon HTPC sur ma TV 4k
  • Lancement rapide sur bureau dédié

Le widget de lancement rapide abrite donc nos différents services, mais afin d’éviter de devoir se placer sur le bureau correspondant pour ouvrir les services correspondants nous allons modifier les lanceurs de ces services.

L’objectif est simple, s’assurer que le service n’est pas déjà actif, pour ne pas le dupliquer, démarrer le service sur son bureau puis se placer sur le bureau correspondant.
Le script nous permettra également d’utiliser la résolution et la fréquence de rafraîchissement idéale pour chaque usage.

Tout d’abord, nous allons installer le paquet wmctrl pour changer de bureau en ligne de commande.

sudo apt install wmctrl

Ensuite nous allons créer un script qui sera le hub de tous les démarrages de services.

Quelques explications sur ce script:

start_app est la fonction qui se charge du démarrage de l’application, ainsi que de la surveillance de celle-ci.
Le premier argument est l’application à exécuter.
Le second la chaine de caractère à surveiller dans la liste des processus pour savoir si l’application est déjà en cours.

screen_config permet de choisir, selon l’application, la résolution d’écran à utiliser, 1080 ou 2160 ainsi que la fréquence de rafraîchissement de l’écran à utiliser.
Ces paramètres pourront néanmoins être modifiés avec les raccourcis créés préalablement.

move_to_desktop est la fonction qui va se charger de basculer l’affichage courant sur le bureau voulu.

sound_profile permet, selon l’application, de basculer entre le mode surround 5.1 et stéréo.
Il permet également de définir un délai de latence pour le son.
C’est aussi une forme de failsafe pour éviter que pulseaudio bascule sur un mode par défaut si l’ampli n’était pas allumé au démarrage.

#!/bin/bash

# Get the path of this script
script_dir="$(dirname "$(realpath "$0")")"

# Take as first argument the name of the service to run

service_to_start=$1
freq_change=1
sound_change=1

move_to_desktop ()
{
    local desktop=$(( $1 - 1 ))
    # Move to the indicated desktop
    wmctrl -s $desktop
}

check_app_is_running ()
{
    local binary="$1"
    ps -aux | grep --word-regexp "$binary" | grep --invert-match grep > /dev/null
}

start_app ()
{
    local app="$1"
    local binary="$2"

    if ! check_app_is_running "$binary"
    then
        echo "Run $app"
        nohup $app > /dev/null 2>&1 &
    else
        echo "$app is already running"
        # Do not change the framerate back if the app is already running.
        freq_change=0
        sound_change=0
    fi
}

start_firefox_profile ()
{
    local profile=$1
    start_app "firefox -P $profile --no-remote" "/usr/lib/firefox/firefox -P $profile"
}

screen_config ()
{
    local size=$1
    local framerate=$2
    if [ "$size" == "FHD" ]
    then
        size=1920x1080
    else # UHD
        size=3840x2160
    fi
    if [ $freq_change -eq 1 ]
    then
        xrandr --size $size --rate $framerate
    fi
}

sound_profile ()
{
    local profile=$1
    local latency=$2
    if [ "$profile" == "surround" ]
    then
        profile=5.1
    else # stereo
        profile=Stereo
    fi

    if [ $sound_change -eq 1 ]
    then
        # Get the (first) available profile
        # Gives something like output:hdmi-surround
        local profile_name=$(pacmd list-cards | grep "[^<]output:" | grep --invert-match "available: no" \
        | grep --max-count=1 "$profile" | awk '{ print $1 }' | cut -d: -f1,2)
        # Get the (first) index of the sound card
        # Gives usually 0
        local card_index=$(pacmd list-cards | grep --max-count=1 index | awk '{ print $2 }')

        # Set the profile to use
        pactl set-card-profile $card_index $profile_name

        # Set the default latency in ms
        "$script_dir/Latency.sh" $latency 1
    fi
}

## List of services to run with this script

case $service_to_start in
    # Kodi
    Kodi)
        echo "Start Kodi"
        start_app kodi /usr/bin/kodi
        screen_config UHD 24
        move_to_desktop 2
        sound_profile surround 0
        ; ;

    # Netflix
    Netflix)
        echo "Start Netflix"
        start_firefox_profile Netflix
        screen_config FHD 60
        move_to_desktop 3
        sound_profile surround 0
        ; ;

    # Molotov TV
    Molotov)
        echo "Start Molotov"
        start_app $HOME/Ressources/molotov.AppImage molotov.AppImage
        screen_config FHD 25
        move_to_desktop 4
        sound_profile surround 0
        ; ;

    # VLC TV
    VLC_TV)
        echo "Start VLC for TV"
	# Kill VLC which stay stuck...
	killall -SIGKILL vlc
        start_app "/usr/bin/vlc --started-from-file $HOME/Ressources/FreeboxTV.m3u \
--fullscreen --playlist-tree --no-playlist-autostart --no-random --repeat --config $HOME/Ressources/vlc_tvrc" \
"/usr/bin/vlc.*$HOME/Ressources/FreeboxTV.m3u"
        screen_config FHD 25
        move_to_desktop 4
        sound_profile surround 0
        ; ;

    # Replay TV
    Replay)
        echo "Start Replay TV"
        start_firefox_profile ReplayTV
        screen_config FHD 25
        move_to_desktop 5
        sound_profile surround 0
        ; ;

    # Youtube
    Youtube)
        echo "Start Youtube"
        start_firefox_profile Youtube
        screen_config FHD 60
        move_to_desktop 6
        sound_profile surround 0
        ; ;

    # Firefox
    Firefox)
        echo "Start Firefox"
        start_firefox_profile FreeBrowsing
        screen_config FHD 60
        move_to_desktop 7
        sound_profile surround 0
        ; ;

    *)
        echo "Service not recognized..."
        ; ;
esac

ATTENTION: Les points virgules doivent être collés, sans espace entre.
Mais le bloc code de WordPress ne supporte pas la syntaxe…

Pour exploiter facilement ce script, nous allons à présent créer des raccourcis sous forme de fichier desktop.
Pour ce faire, nous allons Créer un nouveau > Lien vers une application.

Dans le champs Commande : nous ajouterons

/bin/bash '/home/$USER/Launcher/Launcher.sh' Kodi

Et ainsi de suite pour chaque service souhaité.

Toutefois, à ce stade l’application ne démarre pas sur le bureau souhaité d’elle même. Pour y parvenir nous allons forcer le placement de l’application à l’aide de la configuration des fenêtres de KDE.

Configuration du système > Gestion des fenêtres > Règles de la fenêtre

Si toutes les règles spécifiques se trouve ici, pour en créer de nouvelles il est préférable, quand cela est possible, de le faire directement depuis la fenêtre concernée pour pré-remplir les champs de détection de la fenêtre concernée.

Clic droit sur l’icône de l’application en haut à gauche de la fenêtre > Actions supplémentaires > Configure Special Window Settings

De très nombreux paramètres sont disponible et dans certains cas le paramètre Plein écran peut être intéressant. Toutefois, nous allons nous intéresser uniquement au paramètre Bureau qui sera réglé sur Appliquer initialement sur le bureau souhaité.

De cette manière nous allons forcer le démarrage de chaque service sur son bureau dédié.

Pour simplifier l’usage, je proposerais chaque fois un fichier .kwinrule à importer.

  • Déplacer l’indication de changement de volume qui se trouve en plein milieu de l’écran

Il est utile, mais particulièrement agaçant au milieu de l’image !

Nous pouvons le supprimer complètement:
Configuration du système > Comportement de l’espace de travail > Affiche un retour visuel lors des changements d’état

Ou alors nous pouvons le déplacer et le modifier en suivant les indications de koneko-nyaa sur reddit afin d’obtenir quelque chose comme ça.

Nous allons explorer cette solution en choisissant de placer l’OSD au centre de l’écran en haut, là où il n’y aura pas de sous-titres à gêner.

Pour ce faire, nous allons d’abord modifier l’emplacement de l’OSD dans le fichier osd.qml

sudo nano /usr/share/plasma/look-and-feel/org.kde.breeze.desktop/contents/osd/Osd.qml

Et ajouter après la ligne outputOnly: true du bloc PlasmaCore.Dialog les lignes suivantes:

    flags: Qt.X11BypassWindowManagerHint | Qt.FramelessWindowHint
    x: Math.round((Screen.desktopAvailableWidth - width) / 2)
    y: Math.round(Screen.height/50)

Ensuite, nous allons modifier le look de l’OSD pour le remplacer par quelque chose de plus discret.
Nous changeons de fichier pour osdItem.qml

sudo nano /usr/share/plasma/look-and-feel/org.kde.breeze.desktop/contents/osd/OsdItem.qml

Dans lequel nous allons modifier 4 sections.
Tout d’abord, dans le bloc Item, après la ligne property QtObject rootItem, nous allons supprimer les lignes height et width et les remplacer par:

    property int iconWidth: units.iconSizes.medium
    property int progressBarWidth: Math.round(Screen.width/1000)*100
    height: iconWidth
    width: iconWidth*2 + progressBarWidth + Math.round(Screen.width/1000)*4

Ensuite, dans le bloc PlasmaCore.IconItem, nous allons remplacer height et width par :

        height: parent.height
        width: iconWidth

Puis, dans le bloc PlasmaComponents.ProgressBar, après la ligne id: progressBar, nous ajoutons:

        width: progressBarWidth
        height: parent.height
        x: iconWidth

Il sera également nécessaire de supprimer le bloc anchors

Enfin, pour terminer, dans le bloc PlasmaExtra.Heading, nous pourrons ajouter sous id: label les lignes suivantes:

        height: parent.height
        width: rootItem.showingProgress ? iconWidth + Math.round(Screen.width/1000)*4 : progressBarWidth  + iconWidth
        x: rootItem.showingProgress ? iconWidth + progressBarWidth + 10 : iconWidth

Remplacer les lignes visible, text et maximumLineCount par:

        visible: true
        text: rootItem.showingProgress ? rootItem.osdValue : (rootItem.osdValue ? rootItem.osdValue : "")
        maximumLineCount: 1

Et supprimer le bloc anchors ainsi que les lignes wrapMode et textFormat.

Pour confirmer les changements, un rédémarrage de plasmashell est nécessaire:
Attention, n’executez pas cette dernière commande depuis SSH, plasmashell ne pourra pas démarrer sans display !

killall plasmashell; kstart5 plasmashell

Nous voilà à présent avec un OSD discret et non invasif.

Penser à faire une copie de ces 2 fichiers, les mises à jour pourraient les remplacer sans avertissement.

Les 2 fichiers, osd.qml et osdItem.qml devraient être ainsi:

// /usr/share/plasma/look-and-feel/org.kde.breeze.desktop/contents/osd/Osd.qml

import QtQuick 2.0
import QtQuick.Window 2.2
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtra

PlasmaCore.Dialog {
    id: root
    location: PlasmaCore.Types.Floating
    type: PlasmaCore.Dialog.OnScreenDisplay
    outputOnly: true

    flags: Qt.X11BypassWindowManagerHint | Qt.FramelessWindowHint
    x: Math.round((Screen.desktopAvailableWidth - width) / 2)
    y: Math.round(Screen.height/50)

    // OSD Timeout in msecs - how long it will stay on the screen
    property int timeout: 1800
    // This is either a text or a number, if showingProgress is set to true,
    // the number will be used as a value for the progress bar
    property var osdValue
    // Icon name to display
    property string icon
    // Set to true if the value is meant for progress bar,
    // false for displaying the value as normal text
    property bool showingProgress: false

    mainItem: OsdItem {
        rootItem: root
    }
}
// /usr/share/plasma/look-and-feel/org.kde.breeze.desktop/contents/osd/OsdItem.qml

import QtQuick 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtra
import QtQuick.Window 2.2

Item {
    property QtObject rootItem
    property int iconWidth: units.iconSizes.medium
    property int progressBarWidth: Math.round(Screen.width/1000)*100
    height: iconWidth
    width: iconWidth*2 + progressBarWidth + Math.round(Screen.width/1000)*4

    //  /--------------------\
    //  |      spacing       |
    //  | /----------------\ |
    //  | |                | |
    //  | |      icon      | |
    //  | |                | |
    //  | |                | |
    //  | \----------------/ |
    //  |      spacing       |
    //  | [progressbar/text] |
    //  |      spacing       |
    //  \--------------------/

    PlasmaCore.IconItem {
        id: icon
        height: parent.height
        width: iconWidth

        source: rootItem.icon
    }

    PlasmaComponents.ProgressBar {
        id: progressBar
        width: progressBarWidth
        height: parent.height
        x: iconWidth

        visible: rootItem.showingProgress
        minimumValue: 0
        maximumValue: 100

        value: Number(rootItem.osdValue)
    }

    PlasmaExtra.Heading {
        id: label

        height: parent.height
        width: rootItem.showingProgress ? iconWidth + Math.round(Screen.width/1000)*4 : progressBarWidth  + iconWidth
        x: rootItem.showingProgress ? iconWidth + progressBarWidth + 10 : iconWidth
        visible: true
        text: rootItem.showingProgress ? rootItem.osdValue : (rootItem.osdValue ? rootItem.osdValue : "")
        maximumLineCount: 1  
        elide: Text.ElideLeft
        minimumPointSize: theme.defaultFont.pointSize
        fontSizeMode: Text.HorizontalFit
    }
}

Configuration audio

Le son est, avec l’image, l’un des points essentiels d’un HTPC, lorsqu’il s’agit de regarder des films en DTS ou Dolby Digital il n’est pas souhaitable d’avoir une qualité mp3 en sortie d’enceintes.
Ce n’est toutefois pas toujours aussi simple qu’il peut le sembler.

  • Stéréo ou Surround

Lorsqu’il s’agit de regarder des films, il est bien souvent préférable d’opter pour un son surround, que ce soit 5.1 ou 7.1, pour la simple raison que c’est en général le format d’origine du son pour le cinéma.
En effet, les versions 2.0 ne sont, en général, qu’une réduction stéréo du mix multi-canal d’origine.

Pourtant, il n’est pas toujours simple de bénéficier d’un son 5.1 correct en sortie de son HTPC. Il y a plusieurs cas de figure à considérer:

  • Pas de barre de son ou d’ampli Hi-fi
    Que ce soit les enceintes intégrées de la TV ou de simples enceintes stéréo, il peut être préférable de garder un son stéréo.
    Autrement les enceintes pourraient ignorer les canaux supplémentaires et nous risquerions de perdre une partie des données.

    Dans ce cas de figure, il est préférable que le HTPC se charge lui même du downmix 5.1 vers 2.0 afin d’être sûr de ne rien perdre en route.
  • Barre de son ou ampli Hi-fi en HDMI ARC via la TV
    Lorsque la TV envoi le signal audio via HDMI ARC, il est fort probable que le signal soit tronqué ou downmixé vers 2.0 en raison des capacités de la TV.
    Dans ce cas, il sera nécessaire de passer le son en pass-through.
    Même dans ce cas, certaines TV peut ne pas transmettre le .1, le canal LFE du caisson de basse. Dans ce cas, il peut être utile de passer par un downmix 5.0, voir cet article: Downmix 5.1 vers 5.0 avec PulseAudio.
  • Barre de son ou ampli Hi-fi en 5.1 branché en direct
    La meilleure configuration, une connection directe entre le HTPC et le dispositif audio 5.1, de préférence en HDMI ou une autre connexion numérique à défaut.

    Ce type de configuration est à privilégier car il nous permettra de passer le signal audio directement, sans conversion, entre le HTPC et le récepteur audio 5.1.

Afin de s’assurer du bon fonctionnement de l’installation, en particulier le routage du caisson de basse, il est utile d’avoir un moyen fiable de tester l’audio.

Dans le cas d’une configuration 2.0 avec pass-through, il faudra utiliser une source contenant des canaux audio routés en 5.1, on peut trouver ce genre de contenu sur fraunhofer.

Dans le cas d’une configuration 5.1 sans pass-through, nous pouvons utiliser le test de canaux propre à Linux.
speaker-test --channels 5 --nloops 1 --test wave; speaker-test --channels 6 --speaker 6 --test pink
Cela permettra d’identifier chaque canaux successivement, et en particulier le caisson de basse.
Il est également aisé de placer cette commande dans un raccourci en fichier desktop si nécessaire.

  • Audio pass-through

L’audio pass-through est une option disponible sur divers lecteurs multimédia, via pulseaudio pour Linux et sur certaines TV. Cette option permet de faire passer le signal audio au récepteur suivant sans traiter le signal.
Mais qu’est-ce que cela signifie véritablement ?

Pour bien comprendre ce qu’est l’audio pass-through, il faut bien comprendre comment fonctionne la chaine audio.

Lorsque nous regardons une vidéo, le son est encapsulé dans le conteneur multimédia, de la même manière que la vidéo, le son est encodé et compressé avec un codec audio.
Avant de pouvoir être lu sur les enceintes, le son doit passer par 2 étapes:
– Premièrement le son doit être décodé, c’est à dire que le son compressé doit être interprété à l’aide du codec correspondant pour obtenir une version numérique non compressée brute.
– Ensuite, le son décompressé doit être converti de son format numérique à un format analogique qui sera mécaniquement interprété par les enceintes.
C’est le rôle du convertisseur, le DAC.

L’audio pass-through intervient sur la première étape, si un élément de notre installation utilise pass-through, il ne décodera pas le signal audio et enverra le signal dans sa version compressée et encodée à au récepteur suivant.
Il faut bien comprendre donc que le premier élément de la chaine qui n’utilise pas pass-through sera celui qui se chargera de décoder l’audio.
Cela signifie 2 choses:
Si on imagine la configuration suivante: HTPC > TV > Ampli Hi-fi
– Si le HTPC n’utilise pas pass-through, il se chargera du décodage et la TV et l’ampli recevront tout deux un signal audio numérique décompressé et décodé de type PCM.
– Si nous souhaitons que l’ampli se charge du décodage audio, le HTPC et la TV devront être configurés pour utiliser pass-through afin de transmettre le signal audio compressé et encapsulé dans son codec jusqu’à l’ampli. Ce dernier pourra alors décoder le signal.

Mais alors pourquoi utiliser ou non pass-through ? Et quel intérêt cela peut présenter ?

Il faut bien comprendre que le décodage du signal de son format encodé au format PCM est une opération informatique sans conversion.
Cela signifie que l’élément de la chaine est soit capable de le faire (il dispose du codec adéquat pour le faire), soit il n’en est pas capable. Il ne peut pas “mal” le faire.

Les seules exceptions à ce qui vient d’être dit sont les suivantes:
– Si votre HTPC est configuré en 2.0, le décodage audio fera également intervenir un dowmix pour réduire le signal à 2 canaux au lieu de 6.
De même pour un signal 7.1 et un HTPC configuré en 5.1
– Les TV ont la facheuse tendance à être configuré en stéréo, quel que soit le récepteur audio raccordé. Ce faisant, le signal est systématiquement downmixé, voir tronqué.

Il est important également de considérer que certains formats peuvent avoir des difficultés à être envoyé en pass-through.
Et également, plus problématique, le pass-through a tendance à monopoliser la carte son, ce qui peut parfois poser des difficultés si plus d’un lecteur mutimédia sont utilisés. En particulier si le lecteur précédent n’a pas libéré la carte son après usage.

La question d’utiliser pass-through dépend donc de votre matériel et de la configuration de votre installation.
Voilà quelques exemples:

  • HTPC performant et capable de supporter le décodage de la vidéo et de l’audio sans saturer le processeur.
    Pas de pass-through sur le HTPC, il décode tout et envoi un signal décompressé près à être converti par les enceintes.
  • HTPC peu performant pour lequel le décodage audio demande trop de ressources.
    On préferera utiliser pass-through et déléguer le décodage à l’ampli pour soulager le HTPC.
  • TV en HDMI ARC, optique ou autre connectique entre le HTPC et l’ampli.
    Le pass-through sur la TV n’est pas forcément fiable !
    Toutefois, si la TV recoit un signal PCM sur 6 canaux, il y a de forte chance qu’elle le réduise à une stéréo sans rien demander…

    Mon conseil en la matière, évitez de passer le signal à travers la TV !
  • Ampli disposant d’une amélioration du signal lors du décodage.
    Certains ampli Hi-fi propose une amélioration du signal lors du décodage, pour en profiter on préfera donc laisser l’ampli se charger du décodage pour bénéficier de ses améliorations.
    On utilisera donc pass-through sur le HTPC.
  • Ampli raccordé en analogique sur le HTPC ou la TV
    C’est une configuration déconseillée, en effet dès lors qu’une connection analogique intervient, cela signifie que la conversion analogique a été effectuée par le HTPC ou la TV.
    Confier la conversion analogique à la TV est sans aucun doute une très mauvaise idée…
    Quand au HTPC, sauf à disposer d’une excellente carte son, il est peu probable qu’il dispose d’un DAC de meilleure qualité que les multiples DAC de l’ampli.
  • Le problème des voix inaudibles

La problème le plus commun pour quiconque a déjà regardé un film en 5.1 sur une installation 2.0 ou une barre de son frontale supportant un son surround.
Les voix sont inaudibles…

Ce problème est lié au downmix 5.1 vers 2.0, qu’il soit fait par le HTPC ou la barre de son. En effet, les dialogues sont le plus souvent uniquement sur le canal middle du 5.1, or lors du downmix, les canaux supplémentaires sont additionnés sur gauche et droite, résultant en un niveau sonore beaucoup plus élevé pour tous les effets sonores autre que les dialogues.

En réalité, ce ne sont donc pas les voix qui sont trop faibles, mais bien les autres sons qui sont trop forts car tous rassemblés sur seulement 2 canaux !

Pour remédier à ce problème, une solution simple, à condition de ne pas utiliser pass-through sur le HTPC, est de configurer ce dernier en 5.1 puis de remonter de 2 à 3db le canal middle.
Cela peut être fait à l’aide de l’utilitaire PAVUControl.

  • Lorsque le son n’est pas utilisé, le HTPC produit d’affreux bruits

Un son violent, comme un énorme déchirement au milieu du silence alors qu’aucun son n’était joué sur le HTPC.
Pour les habitués, cela ressemble à un appareil débranché d’un ampli encore allumé. Et pour cause, c’est exactement ce qui se passe.

Ce bruit affreux est tout simplement un pic de tension qui se produit lorsqu’un appareil est débranché.

Le problème vient de l’économie d’énergie de la carte son qui, lorsqu’elle n’est pas utilisée, est tout simplement éteinte.
Ce n’est pas un problème avec des enceintes d’ordinateurs, mais avec un système amplifié ça devient un réel problème pour les oreilles ainsi que pour l’ampli qui n’apprécient guère l’agression soudaine.

Pour désactiver l’économie d’énergie, il y a deux choses à faire:

  • Désactiver l’économie d’énergie du côté du driver.
    Pour une carte son intel ça se situe ici:
    sys/module/snd_hda_intel/parameters/power_save
    Un 0 à la place de 1 suffira à désactiver l’économie d’énergie.
  • Désactiver l’économie d’énergie du côté de pulseaudio
    Dans le fichier de configuration /etc/pulse/default.pa, commenter la ligne load-module module-suspend-on-idle pour désactiver l’économie d’énergie.

Après redémarrage, nous ne devrions plus subir ses aggressions sonores soudaines.

  • Décalage entre le son et l’image

Même si le son et l’image arrivent en même temps, le temps de traitement de l’information peut différer et un décalage peut se produire entre l’image et le son.
Ce phénomène particulièrement désagréable peut facilement être corrigé avec Kodi ou VLC, en revanche Netflix, Youtube ou d’autres lecteurs vidéo ne proposent tout simplement aucune solution !

Pulseaudio permet d’appliquer un décalage de latence en millisecondes sur le son pour le retarder. Cela permet de décaler le son, indépendamment du lecteur utilisé pour corriger un son en avance sur l’image.

L’application du décalage de latence (Latency offset) peut se faire depuis l’onglet Advanced de l’utilitaire PAVUControl sur le périphérique de sortie audio utilisé.
Pour un usage rapide il est également possible d’utiliser la commande pactl set-port-latency-offset.

Pour en simplifier l’usage, j’utilise ce script qui permet d’augmenter, de réduire ou de remettre à zéro la latence audio sur pulseaudio.

#!/bin/bash

# Get as first argument the latency in ms
latency=$(( $1 * 1000 ))
force_value=${2:-0}

# Get the (first) index of the sound card
# Gives usually 0
card_index=$(pacmd list-cards | grep --max-count=1 index | awk '{ print $2 }')

# Get the current port
# Gives something like hdmi-output-1
port_name=$(pacmd list | grep "active port" | sed 's/.*<\(.*\)>.*/\1/')

# Get the current latency on this port
current_latency=$(pacmd list | grep --max-count=1 $port_name \
    | grep --extended-regexp --only-matching "latency offset -?[[:digit:]]* usec" | awk '{ print $3 }')

# Modify the latency
# If force_value is set, set the input value directly.
# Otherwise add to the current latency
if [ $force_value -eq 0 ]
then
    latency=$(( $current_latency + $latency ))
fi
# Even though pactl allows it, there's no way to have a negative latency
if [ $latency -lt 0 ]
then
    latency=0
fi


# Set the default latency
pactl set-port-latency-offset $card_index $port_name $latency

Pour exploiter ce script, nous allons créer des raccourcis rapide dans la barre d’outil principale en créant un Composant graphique (Widget) Lancement rapide dans lequel nous allons glisser des fichiers desktop.

Pour ce faire, nous allons Créer un nouveau > Lien vers une application.
Dans le champs Commande : nous ajouterons

Exec=/bin/bash '/home/$USER/Launcher/Latency.sh' 0 1

Pour la remise à zéro de la latence.

Exec=/bin/bash '/home/$USER/Launcher/Latency.sh' 5

Pour augmenter de 5 millisecondes la latence.

Exec=/bin/bash '/home/$USER/Launcher/Latency.sh' -5

Pour réduire de 5 millisecondes la latence.

Configuration de l’image

  • 1080, 2160 et upscaling

Comme expliqué précédemment, Ubuntu gère nativement la résolution 4k. Il nous êtes donc possible de profiter de cette résolution.
Toutefois, un point non abordé est la problématique de l’upscaling.

En effet, si la résolution est fixée à 3840×2160, la lecture de vidéo 4k ne posera aucune difficulté, en revanche, la lecture de vidéo 1080 va demander plus de travail.
Cela pour une raison simple, une vidéo 1080 n’a pas une résolution suffisante pour être affichée correctement sur l’ensemble de l’écran. Elle doit être upscalée pour remplir l’écran.
C’est à dire tout simplement que la vidéo va être agrandie et corrigée pour que l’image ne soit pas pixelisée.

Notre HTPC ne devrait pas avoir de problème à effectuer ce travail puisqu’il est déjà capable de traiter des vidéo 4k. Mais il nous faut garder en tête que c’est une charge de travail supplémentaire sur le GPU et donc une production de chaleur supplémentaire.

Si votre HTPC présente des difficultées et surchauffe alors que vous ne jouez que des vidéos 1080, la question peut raisonnablement se poser de déléguer le travail d’upscaling à la TV qui en général fera un très bon boulot sur cet aspect.

L’utilisation du GPU peut être surveillée avec intel_gpu_top.

La charge d’opérer l’upscaling revient à la machine qui dispose de la résolution 4k. Ce sera donc le HTPC si il est configuré avec une résolution 2160, ou la TV si le HTPC est en 1080.

En revanche, si le HTPC est configuré en 1080 et que vous jouez des vidéos 4k, l’image sera downscalée à 1080 par le HTPC, puis upscalée à nouveau à 2160 par la TV.
L’image finale ne sera toutefois pas l’équivalent de la source 4k, le downscale aura détruit de manière irréversible une partie de l’image…

En cas de doute, un bon moyen de s’assurer de la résolution de l’écran est d’utiliser les Stats for nerds de Youtube, accessible par un clic droit sur n’importe quelle vidéo.
En particulier avec cette vidéo permettant de vérifier la résolution 4k: 4KUHD Scaling Test.

Les informations à surveiller sont alors, Viewport / Frames pour la résolution effectivement affichée à l’écran et Current / Optimal Rez pour la résolution de la source actuelle jouée.

On peut aussi utiliser le raccourci o dans Kodi pour connaître la résolution du média joué, ainsi que z pour la résolution actuellement affichée à l’écran.

  • Motion interpolation

Motion interpolation, nommé Auto Motion Plus, Motionflow, AquoMotion, ClearFrame, Smooth Motion ou encore TruMotion ou Clear Motion Drive sont un effet de lissage des mouvements introduit dans les TV récente permettant d’attendre des fréquences de 120Hz.

Le principe de fonctionnement en est relativement simple, un film contient 24 images par secondes, la technique de motion interpolation consiste a créer des images supplémentaires qui vont s’intercaller entre chacune des 24 images pour produire 120 images par secondes.

Cette technique permet de produire des images beaucoup plus fluides, en particulier sur les mouvements rapides en évitant une saccade de l’image.

Pour un match de foot, c’est parfait, le ballon décrira un mouvement rectiligne beaucoup plus fluide.
En revanche, lorsqu’il s’agit d’interpréter et de prévoir le mouvement de nombreux objets, une explosion par exemple, cela devient beaucoup plus difficile et bien moins précis…

En particulier, le motion interpolation créer le fameux effet soap opera, ou effet caméscope. Cette désagréable impression que votre série américaine favorite ou votre film ressemble à Amour gloire et beauté ou Les Feux de l’amour.

L’industrie du cinéma utilise des caméras capturant 24 images par secondes, autant dire clairement qu’extrapoler de nouvelles images inexistantes à l’origine est une insulte au travail cinématographique et encore plus lorsque le rendu final est ainsi altéré.

Certains diront que c’est une question de préférences personnelles, je dirais que si nous souhaitons voir un film, on devrait le voir à 24 images par secondes et dans les conditions les plus proches possible de ce que le réalisateur a souhaité créer.
Il est innaceptable de garder ce mode activé pour regarder un film ou une série de qualité !

La preuve en image: Soap Opera Effect in Slow Motion

Les TV modernes disposent de nombreux réglages d’image, qui sont en général des modifications apportées à l’image source.
Si il est clair que le réglage de motion interpolation devrait toujours être désactivé, soyez également prudent avec le mode Auto Low Latency Mode (Instant Game Response chez LG) qui peut provoquer des scintillements et des sauts d’images.

Et si votre barre de son ou ampli est branché en HDMI ARC, ne pas oublier de désactiver tout les traitements sur l’entrée HDMI concernée, ce n’est pas utile et ça perturbe le signal !

  • Mode FilmMaker

Parmis tout les réglages disponibles sur les TV modernes, il en est un qui est une bénédiction au milieu de la décadence.
Le mode FilmMaker est le réglage ultime du cinéfile qui désactive tout les autres, y compris le motion interpolation.

Ce mode permet avant tout de désactiver tout les traitements sur l’image et paramètre la colorimétrie, la balance des blancs et les contrastes pour obtenir une image la plus proche possible d’un rendu cinéma.

Le procédé est toutefois récent, disponible seulement sur les TV à partir de 2020, il est donc fort probable qu’il faille attendre encore un peu avant de disposer de contenus sur notre HTPC contenant les metadata nécessaire pour ajuster le mode FilmMaker.

En attendant, même sans ajustements spécifiques au contenu, le mode FilmMaker permet déjà d’obtenir une image beaucoup plus proche d’une qualité cinéma.

Voir cette image de Bram Stoker’s Dracula, de Francis Ford Coppola, avec 3 mode différents.
Ce sont toutefois des photos, qui ne respectent donc pas la véritable image. Mais cela permet d’avoir une idée de la différence.

Mode Standard
Mode Cinema
Mode FilmMaker

Plus d’information sur le mode FilmMaker sur Son-Vidéo.com.

Service: Kodi

L’installation de Kodi est des plus simple, il suffit d’installer le paquet kodi.

sudo apt install kodi

Avant de s’intéresser à la configuration de Kodi, nous allons lui donner matière à travailler en lui donnant accès à une source de médias.
Les médias sont stockés sur un autre support doté d’une plus grande capacité, en l’occurrence un serveur et partagés sur le réseau local via un partage NFS.

Première étape, nous allons ajouter le support NFS.

sudo apt install nfs-common

Ensuite nous créons le dossier qui va accueillir le montage réseau.

sudo mkdir -p /media/media_kodi

Puis nous allons effectuer un premier montage réseau afin de vérifier que le montage fonctionne correctement.

sudo mount --types nfs --read-only 192.168.1.XXX:/media/data/source_media_pour_kodi /media/media_kodi/

Afin de péréniser ce montage NFS, nous allons ajouter cette ligne au fstab.

sudo nano /etc/fstab
192.168.1.XXX:/media/data/source_media_pour_kodi /media/media_kodi/       nfs     auto  0  0

A présent que Kodi est installé et fonctionnel, nous pouvons nous intéresser à sa configuration.
La configuration par défaut est globalement correcte, sauf à des réglages personnels de l’interface et des commandes.
Toutefois il nous faut ajouter la source de médias:

> Médias > Médiathèque > Vidéos > Ajouter une source de vidéos…
Nous allons chercher nos sources de médias et leur donner un nom.
Puis choisir la catégorie du dossier pour que les médias soient à la bonne place dans l’interface de Kodi.

Dans le cas où nous utilisons une résolution 2160@30Hz, le respect de la fréquence d’image de la vidéo devenant importante, il est intéressant de laisser Kodi se charger de l’opération, puisqu’il dispose de l’information.
Kodi est en effet capable d’ajuster le taux de rafraichissement de l’écran.

> Lecteur > Vidéos > Ajuster le taux de rafraîchissement d’affichage

Si ce n’est pas encore suffisant, il est également possible de synchroniser la lecture de la vidéo pour se câler très exactement sur la fréquence de l’écran déjà ajustée.

> Lecteur > Vidéos > Synchroniser la lecture avec l’affichage

  • Configuration de fenêtres KDE pour Kodi

Le fichier .kwinrule pour Kodi est le suivant:

[Kodi]
Description=Kodi
desktop=2
desktoprule=2
wmclass=kodi
wmclasscomplete=false
wmclassmatch=1

Service: Netflix

Netflix ne proposant pas d’application native pour Linux, nous allons utiliser Firefox pour obtenir Netflix.
Le principal défaut ici est que Netflix sur Firefox ne permet pas de profiter du flux 4K. Espérons que cela soit corrigé avec le temps…

Il faut noter toutefois que Netflix diffuse en 24, 25 ou 30 FPS selon les sources. Ce qui oblige à changer régulièrement de fréquence de rafraîchissement si le maximum disponible est de 30Hz.

Pour connaitre le fréquence d’une vidéo Netflix, le raccourci Ctrl+Alt+Shift+D donne toutes les infos techniques, dont le frame rate.

  • Profil Firefox

Afin de paramétrer Firefox pour un usage optimal avec Netflix, nous allons utiliser un profil dédié.

firefox --ProfileManager

Puis nous créons un profile nommé Netflix. Le nom importe peu en réalité, tant qu’il correspond au nom de profil dans le script Launcher.sh

Pour démarrer Firefox avec ce profil:

firefox -P Netflix --no-remote

A présent que nous avons un profil dédié, nous allons le configurer de manière adéquat.

  • DRM

Netflix utilise des DRM, il faut donc autoriser Firefox à les lire.

Activer le paramètre
> Préférences > Général> Lire le contenu protégé par des DRM

  • Faciliter la navigation sans molette

Naviguer dans la page peut s’avérer agaçant sans une molette, et même si nous ne pourrons pas faire complèment l’impasse sur la souris, nous pouvons faciliter le défilement avec les touches haut/bas.

Désactiver les paramètres
> Préférences > Général> Utiliser le défilement automatique
> Préférences > Général> Toujours utiliser les touches de navigation pour se déplacer à l’intérieur d’une page

Également, pour plus de comfort, activer les paramètres suivants
> Préférences > Général > Utiliser le défilement doux
> Préférences > Général> Contrôler la lecture des médias via le clavier, un casque ou l’interface virtuelle

  • Netflix en page d’accueil

Puisque ce profil est dédié à Netflix, le navigateur devrait s’ouvrir directement sur la page du service.

> Préférences > Accueil > Page d’accueil et nouvelles fenêtres
Sélectionner Adresses web personalisées… et dans le champs indiquer https://www.netflix.com/fr/

  • Modules complémentaires pour Firefox
    • Window Titler
      Pour commencer, afin de pouvoir identifier la fenêtre Firefox à l’aide de la configuration des fenêtres de KDE (qui pour rappel nous permettra de placer la fenêtre sur le bureau choisi) nous allons installer l’extension Window Titler.

      Dans les préférences de l’extension, nous choissirons les tags [ et ] et le Profile title Netflix. Ainsi le titre de la fenêtre commencera toujours par [Netflix].
    • Auto Fullscreen
      Ce plugin va nous permettre de forcer firefox en plein écran dés son démarrage.
    • Netflix 1080p
      Comme son nom le suggère, ce plugin permet de profiter de Netflix en Full HD sur Firefox.
  • Optimisation de Firefox

Netflix est plutôt exigeant avec Firefox, il peut donc être utile d’optimiser ce profile Firefox pour en tirer le meilleur parti.

Tout d’abord, nous allons désactiver la télémétrie.

> Préférences > Vie privée et sécurité > Collecte de données par Firefox et utilisation

Puis nous allons nous assurer que le cache est régulièrement purgé.

> Préférences > Vie privée et sécurité > Historique
– Utiliser les paramètres personnalisés pour l’historique
– Vider l’historique lors de la fermeture de Firefox
– – Supprimer cache et historique

Enfin, nous allons voir la configuration profonde de Firefox dans about:config et changer les valeurs suivantes:

Désactiver le mode de lecture:

reader.parse-on-load.enabled    false

Désactiver pocket:

extensions.pocket.enabled    false

Augmenter le buffering multimedia:
Tout d’abord la taille du cache, puis la durée du buffer.

media.cache_size    1024000
media.cache_readhead_limit    600
media.cache_resume_threshold    300
  • Désactivation de l’accélération matérielle

Selon le matériel et les drivers, il se peut que l’accélération matérielle par Firefox soit d’avantage un problème qu’une aide.

Si nécessaire, l’accélération matérielle se désactive ici:

> Préférences > Général > Performances
Désactiver Utiliser les paramètres de performance recommandés
Puis désactiver Utiliser l’accélération graphique matérielle si disponible

  • Configuration de fenêtres KDE pour Netflix

Le fichier .kwinrule pour Netflix est le suivant:

[Netflix Firefox]
Description=Netflix Firefox
desktop=3
desktoprule=2
title=[Netflix]\s
titlematch=2
types=1
windowrole=browser
windowrolematch=1
wmclass=navigator firefox
wmclasscomplete=true
wmclassmatch=1
  • Les raccourcis Netflix

Netflix met à disposition quelques raccourcis pratiques dont voici la liste officielle.
Nous retiendrons surtout que pour passer les introductions, c’est la touche S !

Service: Live TV

Lorsqu’il s’agit de live TV le plus évident est de passer par des logiciels comme TVheadend ou MythTV et un tuner TV. Je n’en dispose toutefois pas, et la mise en place de l’IPTV avec ces 2 logiciels s’est soldé par un échec retentissant… J’ai donc choisi d’autres solutions.

Parmis les autres solutions non retenues il y avait aussi:

  • Hypnotix
    Très prometteur, mais un projet encore jeune auquel il manque de très nombreuses fonctionnalités pour être exploitable.
  • FreetuxTV
    Plus ancien et éprouvé, FreetuxTV ne dispose toutefois pas d’une interface adéquate à l’usage recherché.
  • VLC

Pour un visionnage simple de la TV depuis une source IPTV, notre choix va s’arrêter sur VLC, comme souvent l’outil idéal lorsqu’il est question de vidéo.
VLC nous offre les fonctionnalitées suivantes sur les flux TV

  • Play/pause
    (Impossible toutefois de naviguer dans le flux. Le flux reste en retard sur le direct tant que la chaine n’est pas changée.)
  • Changement de chaine simple, sans usage de la souris.
  • Choix de la langue du flux TV.
  • Choix du sous-titre du flux TV.
  • Raccourcis configurables.

L’absence d’une véritable fonction de timeshifting est dommage, et doit probablement pouvoir être mise en place.
Je n’ai malheureusement pas encore trouvé la solution pour y rémedier.

Pour avoir accès aux flux TV via internet, l’IPTV, nous allons devoir nous tourner vers des playlists m3u contenant les adresses des flux TV.
Attention toutefois, la majeure partie des listes m3u pour l’IPTV qui peuvent être trouvées sur internet sont illégales.

Ce dépot github fourni des listes m3u légales pour différents pays, dont la France.
Toutefois, le moyen le plus sûr d’obtenir une liste m3u bien fournie de chaines TV en toute légalité est de se tourner vers son fournisseur d’accès.
Pour ma part c’est Free, qui est à ce jour sans aucun doute le FAI le plus accommodant sur ce point.

Free fourni à ses abonnés la liste http://mafreebox.freebox.fr/freeboxtv/playlist.m3u

Pour accéder aux chaines des groupes TF1 (TF1, TMC, TFX, TF1 Séries Films et LCI) et M6 (M6, W9 et 6ter) il vous faudra connecter l’antenne au décodeur TV Free et faire une recherche de chaine. Autrement les chaines ne seront pas disponibles en IPTV…

Cette liste Free représente près de 700 chaines, dont de nombreux doublons en raison des flux de différentes qualité et des chaines payantes innaccessible sans abonnement supplémentaire.
Ce faisant, il est plus que conseillé de créer un fichier m3u personnalisé avec les chaines souhaitées et la qualité souhaitée pour chacune d’elle.
Nous aurons ainsi une liste de chaines limitées aux seules chaines usuellement visionnées.

Cela fait, nous allons créer un fichier de configuration VLC spécifique à cet usage.
Il sera ainsi possible de configurer cette instance de VLC indépendamment de l’instance commune.

cp -a $HOME/.config/vlc/vlcrc $HOME/vlcTVrc

A présent, il nous suffit de démarrer VLC en spécifiant les options souhaitées au démarrage.

/usr/bin/vlc ./PlaylistTV.m3u --fullscreen --playlist-tree --no-playlist-autostart --no-random --repeat --config $HOME/vlcTVrc
  • –fullscreen
    Démarre immédiatement en plein écran.
  • –playlist-tree
    Affiche la playlist au démarrage.
  • –no-playlist-autostart
    Ne démarre pas automatiquement la lecture, nous démarrerions autrement toujours sur le premier flux de la liste.
  • –no-random
    Désactive le mode aléatoire, pour pouvoir zapper facilement d’un flux au suivant ou au précédent.
  • –repeat
    Répète le media en cours, pour éviter de changer de flux de manière intempestive.
  • –config $HOME/vlcTVrc
    Utilise un fichier de configuration alternatif.
  • Fixer les sauts d’images

VLC peut souffrir de quelques sauts d’images réguliers. Si tel est le cas, il peut être utile de changer la configuration de la sortie vidéo.

> Outils > Préférences > Vidéo > Output
Sortie vidéo “Sortie vidéo X11 (XCB)” donne de bons résultats.

> Outils > Préférences > Vidéo > Deinterlacing
Régler sur Oui et choisir le mode Yadif (2x).

  • Configuration de fenêtres KDE pour VLC

Le fichier .kwinrule pour VLC est le suivant:

[VLC TV]
Description=VLC TV
desktop=4
desktoprule=2
title=Lecteur multimédia VLC
titlematch=1
types=1
windowrole=vlc-main
windowrolematch=1
wmclass=vlc
wmclasscomplete=false
wmclassmatch=1
  • Molotov TV

Molotov TV est un fournisseur IPTV français qui propose gratuitement un accès à 36 chaines avec le contrôle du direct ainsi qu’un accès au Replay.

Il est nécessaire toutefois de créer un compte sur la plateforme, même pour l’accès gratuit.

Molotov propose également de nombreux packs payants pour obtenir d’avantage de contenu.

La plateforme propose un fichier AppImage, qui ne nécessite donc aucune installation.
Après téléchargement, il faut toutefois le rendre executable. C’est tout ce que nous avons à faire pour cette application.

Molotov est intéressant à l’usage et permet un véritable contrôle du direct ainsi qu’un accès aux différents Replay des chaines.

Toutefois, l’application est peu adapté à l’usage avec une télécommande et n’a de cesse d’insister pour un compte premium ou autre abonnements.
On ne pouvait en attendre moins d’un tel service…

  • Configuration de fenêtres KDE pour Molotov TV

Le fichier .kwinrule pour Molotov TV est le suivant:

[Molotov]
Description=Molotov
desktop=4
desktoprule=2
title=Molotov
titlematch=1
wmclass=molotov
wmclasscomplete=false
wmclassmatch=2

Service: Replay TV

Comme vu précédemment, Molotov TV est une solution pour avoir accès aux Replay de nombreuses chaines depuis un seul et même endroit.

Si toutefois, nous ne souhaitons pas passer par cette application et sa création de compte obligatoire, il nous est possible de simplement utiliser Firefox et nous rendre sur les sites de chaque chaines souhaitées.

  • Profil Firefox

Comme pour Netflix, nous allons créer un profil dédié à l’usage de Firefox pour les Replay TV.

firefox --ProfileManager

Puis nous créons un profile nommé ReplayTV. Encore une fois, le nom doit simplement correspondre à celui indiqué dans le script Launcher.sh

Pour démarrer Firefox avec ce profil:

firefox -P ReplayTV --no-remote

A présent que nous avons un profil dédié, nous allons le configurer de manière adéquat.

  • Faciliter la navigation sans molette

Nous facilitons le défilement avec les touches haut/bas.

Désactiver les paramètres
> Préférences > Général> Utiliser le défilement automatique
> Préférences > Général> Toujours utiliser les touches de navigation pour se déplacer à l’intérieur d’une page

Également, pour plus de comfort, activer les paramètres suivants
> Préférences > Général > Utiliser le défilement doux
> Préférences > Général> Contrôler la lecture des médias via le clavier, un casque ou l’interface virtuelle

  • Page d’accueil Firefox par défaut

Plutôt que d’ouvrir chaque fois sur un site d’une chaine, il est préférable d’avoir une page permettant un accès rapide aux différents sites.
La page d’accueil par défaut de Firefox fait très bien ce travail.

> Préférences > Accueil > Page d’accueil et nouvelles fenêtres
Sélectionner Page d’accueil de Firefox (par défaut)

Puis juste en dessous, nous allons paramétrer cette page d’accueil.

> Sites les plus visités
1 ligne, ou d’avantage si la place manque.

> Éléments-clés
4 lignes et nous gardons uniquement Marques pages. Cela nous permettra de mettre de côté facilement les émissions à voir.

  • Modules complémentaires pour Firefox
    • Window Titler
      Afin de pouvoir identifier la fenêtre Firefox à l’aide de la configuration des fenêtres de KDE (qui pour rappel nous permettra de placer la fenêtre sur le bureau choisi) nous allons installer l’extension Window Titler.

      Dans les préférences de l’extension, nous choissirons les tags [ et ] et le Profile title ReplayTV. Ainsi le titre de la fenêtre commencera toujours par [ReplayTV].
  • Optimisation de Firefox

Il n’est pas nécessaire de dégraisser Firefox de la même manière que pour Netflix, qui est beaucoup plus exigeant.
Toutefois, augmenter la taille du cache vidéo est toujours utile.

Dans la configuration de Firefox, about:config, changer les valeurs suivantes:

Augmenter le buffering multimédia:
Toute d’abord la taille du cache, puis la durée du buffer.

media.cache_size    1024000
media.cache_readhead_limit    600
media.cache_resume_threshold    300
  • Désactivation de l’accélération matérielle

Ainsi qu’expliqué avec Netflix, Firefox s’en sort parfois bien mieux sans l’accélération matérielle. Nous pouvons donc la désactiver ici:

> Préférences > Général > Performances
Désactiver Utiliser les paramètres de performance recommandés
Puis désactiver Utiliser l’accélération graphique matérielle si disponible

  • Configuration de la page d’accueil de Firefox

La page d’accueil de Firefox est pleine de services indésirables, Facebook, Amazon et autre Google…
La première chose à faire est de s’en débarrasser !

En haut à droite de chaque vignette, un petit menu est disponible. Il nous permettra de Retirer les indésirables.

Cela fait, nous pourrons ajouter un Nouveau Site populaire pour chaque service de Replay que nous souhaitons avoir.
L’ajout manuel va automatiquement épingler ces sites. Ils resteront donc en place.

  • Configuration de fenêtres KDE pour le Replay TV sur Firefox

Le fichier .kwinrule pour ReplayTV est le suivant:

[ReplayTV Firefox]
Description=ReplayTV Firefox
desktop=5
desktoprule=2
title=[ReplayTV]\s
titlematch=2
types=1
windowrole=browser
windowrolematch=1
wmclass=navigator firefox
wmclasscomplete=true
wmclassmatch=1

Service: Youtube

Je n’aime pas Youtube…
Mais je ne peux nier la richesse de sa collection de vidéos, qui n’a pas d’égales.
Heureusement, pour le moment du moins, il n’est pas nécessaire d’avoir un compte Google pour regarder le contenu de Youtube.

  • Profil Firefox

Comme pour Netflix, nous allons créer un profil dédié à l’usage de Firefox pour Youtube

firefox --ProfileManager

Puis nous créons un profile nommé Youtube. Encore et toujours, le nom doit simplement correspondre à celui indiqué dans le script Launcher.sh

Pour démarrer Firefox avec ce profil:

firefox -P Youtube --no-remote

A présent que nous avons un profil dédié, nous allons le configurer de manière adéquat.

  • Faciliter la navigation sans molette

Nous facilitons le défilement avec les touches haut/bas.

Désactiver les paramètres
> Préférences > Général> Utiliser le défilement automatique
> Préférences > Général> Toujours utiliser les touches de navigation pour se déplacer à l’intérieur d’une page

Également, pour plus de comfort, activer les paramètres suivants
> Préférences > Général > Utiliser le défilement doux
> Préférences > Général> Contrôler la lecture des médias via le clavier, un casque ou l’interface virtuelle

  • Page d’accueil Firefox par défaut

Pour s’épargner la page d’accueil de Youtube, toujours rempli de vidéos sans le moindre intérêt, nous allons garder la page d’accueil par défaut de Firefox.

> Préférences > Accueil > Page d’accueil et nouvelles fenêtres
Sélectionner Page d’accueil de Firefox (par défaut)

Puis juste en dessous, nous allons paramétrer cette page d’accueil.

> Sites les plus visités
1 ligne.

> Éléments-clés
4 lignes et nous gardons uniquement Marques pages.
De cette manière, nous allons pouvoir mettre de côté les vidéos à voir et les chaines dignes d’intérêt que nous souhaitons suivre.

  • Modules complémentaires pour Firefox
    • Window Titler
      Afin de pouvoir identifier la fenêtre Firefox à l’aide de la configuration des fenêtres de KDE (qui pour rappel nous permettra de placer la fenêtre sur le bureau choisi) nous allons installer l’extension Window Titler.

      Dans les préférences de l’extension, nous choissirons les tags [ et ] et le Profile title Youtube. Ainsi le titre de la fenêtre commencera toujours par [Youtube].
    • Enhancer for Youtube
      Ce plugin très utile va permettre de configurer différents aspects de Youtube et de garder un meilleur contrôle sur le comportement de l’interface.
    • Privacy Badger
      Indispensable sur un service Google, des filtres pour limiter les fuites d’informations sur nos activités.
      Je n’en ai pas parlé pour les autres profils, car c’est un choix personnel.
      Toutefois, sur l’ensemble des profils, sauf Netflix qui n’utilise pas de trackers, j’utilise une collection d’indispensables en plus de Privacy Badger:
  • Optimisation de Firefox

Il n’est pas nécessaire de dégraisser Firefox de la même manière que pour Netflix, qui est beaucoup plus exigeant.
Toutefois, augmenter la taille du cache vidéo est toujours utile.

Dans la configuration de Firefox, about:config, changer les valeurs suivantes:

Augmenter le buffering multimédia:
Toute d’abord la taille du cache, puis la durée du buffer.

media.cache_size    1024000
media.cache_readhead_limit    600
media.cache_resume_threshold    300
  • Désactivation de l’accélération matérielle

Ainsi qu’expliqué avec Netflix, Firefox s’en sort parfois bien mieux sans l’accélération matérielle. Nous pouvons donc la désactiver ici:

> Préférences > Général > Performances
Désactiver Utiliser les paramètres de performance recommandés
Puis désactiver Utiliser l’accélération graphique matérielle si disponible

  • Configuration de la page d’accueil de Firefox

De la même manière que pour le profil ReplayTV, il peut être utile de nettoyer les indésirables, puis d’épingler Youtube et éventuellement les chaines principales suivies.

  • Configuration de fenêtres KDE pour Youtube.

Le fichier .kwinrule pour Youtube est le suivant:

[Youtube Firefox]
Description=Youtube Firefox
desktop=6
desktoprule=2
title=[Youtube]\s
titlematch=2
types=1
windowrole=browser
windowrolematch=1
wmclass=navigator firefox
wmclasscomplete=true
wmclassmatch=1

Service: Firefox tout usage

Puisque chacun des profils Firefox précédent sont spécifiquement configurés pour nos différents usages, il est utile d’avoir un profil pour d’autres activités.

  • Profil Firefox

Comme pour Netflix, nous allons créer un profil dédié aux autres usages.

firefox --ProfileManager

Puis soit nous créons un profile dédié, soit nous utilisons le profil default

Pour démarrer Firefox avec ce profil:

firefox -P default --no-remote
  • Faciliter la navigation sans molette

Nous facilitons le défilement avec les touches haut/bas.

Désactiver les paramètres
> Préférences > Général> Utiliser le défilement automatique
> Préférences > Général> Toujours utiliser les touches de navigation pour se déplacer à l’intérieur d’une page

Également, pour plus de comfort, activer les paramètres suivants
> Préférences > Général > Utiliser le défilement doux
> Préférences > Général> Contrôler la lecture des médias via le clavier, un casque ou l’interface virtuelle

  • Modules complémentaires pour Firefox
    • Window Titler
      Afin de pouvoir identifier la fenêtre Firefox à l’aide de la configuration des fenêtres de KDE (qui pour rappel nous permettra de placer la fenêtre sur le bureau choisi) nous allons installer l’extension Window Titler.

      Dans les préférences de l’extension, nous choissirons les tags [ et ] et le Profile title Free Browsing. Ainsi le titre de la fenêtre commencera toujours par [Free Browsing].
  • Optimisation de Firefox

Nous pouvons raisonnablement imaginer que ce profil servira également à regarder des vidéos. Nous augmentons donc la taille du cache vidéo.

Dans la configuration de Firefox, about:config, changer les valeurs suivantes:

Augmenter le buffering multimédia:
Toute d’abord la taille du cache, puis la durée du buffer.

media.cache_size    1024000
media.cache_readhead_limit    600
media.cache_resume_threshold    300
  • Désactivation de l’accélération matérielle

Ainsi qu’expliqué avec Netflix, Firefox s’en sort parfois bien mieux sans l’accélération matérielle. Nous pouvons donc la désactiver ici:

> Préférences > Général > Performances
Désactiver Utiliser les paramètres de performance recommandés
Puis désactiver Utiliser l’accélération graphique matérielle si disponible

  • Configuration de fenêtres KDE pour Firefox.

Le fichier .kwinrule pour Firefox est le suivant:

[Firefox]
Description=Firefox
desktop=7
desktoprule=2
title=[Free Browsing]\s
titlematch=2
types=1
windowrole=browser
windowrolematch=1
wmclass=navigator firefox
wmclasscomplete=true
wmclassmatch=1

Backup automatique

Car nous n’avons pas envie de tout refaire en cas de problème, un backup est indispensable.
Il existe toute sortes de solutions pour un backup efficace, je vais choisir une solution personnelle que j’utilise régulièrement. Archivist.

Les détails de la configuration sont spécifiques au logiciel utilisé.
Ce qui importe c’est de sauvegarder au moins la configuration utilisateur et les configurations des applications. Donc principalement le dossier /home/$USER
Nous pouvons également sauvegarder les configurations supplémentaires dans le système qui ne se trouvent pas dans $HOME.

Toutefois, quelque soit le choix du logiciel d’archivage, il reste un problème de taille. Comment être sûr que le HTPC sera allumé au moment où il devra faire un backup ?
Le meilleur moyen d’en être sûr est de le forcer à se réveiller au bon moment.

  • Réveil du HTPC pour le backup

Pour réveiller un ordinateur en veille, en hibernation ou complètement éteint, nous allons utiliser l’alarme RTC.

echo "$(date "+%s" -d "+ 5 minutes")" | sudo tee /sys/class/rtc/rtc0/wakealarm

Cette commande réveillera l’ordinateur 5 minutes plus tard.
Nous allons nous servir de cette commande pour réveiller notre HTPC à temps pour ses backups réguliers.

rtcwake peut également être utilisé, mais il ne permet pas de programmer un réveil sans être affecté par un réveil manuel.
En effet, dans l’exemple précédent, si la machine est réveillée puis remise en veille avant le délai de 5 minutes, rtcwake ne la réveillera pas.

Nous verrons toutefois par la suite que même cette méthode n’est pas infaillible.

  • Planification du backup

Pour planifier les backups, nous allons simplement utiliser cron.
Un fichier backup dans /etc/cron.d fera le travail.

Le backup serait donc exécuté, par exemple, tout les 3 jours à 4h du matin.

Toutefois, afin d’être sûr que l’ordinateur soit démarré, nous devons également programmer un réveil régulier avec RTC juste avant que le backup ne soit démarré.

Ainsi, RTC reprogrammerait un réveil tout les 3 jours pour 3 jours plus tard 5 minutes avant l’exécution suivante de la tâche cron.

Toutefois, cron ne calcul pas les jours en ajoutant simplement 3 jours à la date actuelle, il détermine un planning en démarrant toujours au 1er de chaque mois.
Ceci nous oblige donc à compter de la même manière pour que RTC réveille l’ordinateur au bon moment.

  • Empêcher la mise en veille durant le backup

Notre backup est presque prêt à être mis en route, un seul point délicat subsiste. Si le backup est trop long à s’exécuter, notre HTPC pourrait se remettre en veille avant la fin du backup.
Pour éviter cela, nous allons utiliser systemctl mask sleep.target pour suspendre la mise en veille le temps du backup.

Toutes ces complications nous amènent à construire un script qui sera en charge de toutes les opérations pour automatiser notre backup:

#!/bin/bash

# frequency of the backup, number of days between each.
# ! This have to match the cron task !
days_frequency=3
hour="03:55am"

# Get the path of this script
script_dir="$(dirname $(realpath $0))"

get_next_backup_execution ()
{
    # Get the current day
    current_day=$(date '+%d')

    # Get the last day of the month
    last_day_of_month=$(date -d "-$(date +%d) days +1month" +%d)

    # Get the number of past executions for the current month
    past_exec=$((($current_day-1) / $days_frequency + 1))
    # Get the date of the last execution
    last_exec=$(( $days_frequency*($past_exec-1)+1 ))
    # Get the date of the next execution
    next_exec=$(( ($last_exec+$days_frequency) ))
    # Set the next execution to 1st if it goes on next month
    if [ $next_exec -gt $last_day_of_month ]; then next_exec=1; fi
    # Get the number of days before the next execution
    plus_days=$(( $next_exec - $current_day))
    # Fix the number of days if it goes on next month
    if [ $plus_days -lt 0 ]; then plus_days=$(($plus_days + $last_day_of_month)); fi

    # Return the value for rtcwake in number of days to the next wakeup
    echo "$plus_days"
}

# Remove any previous wake alarm
sudo rtcwake --mode disable
# Set the wake alarm with RTC
echo "$(date "+%s" -d "$hour + $(get_next_backup_execution) days")" | sudo tee /sys/class/rtc/rtc0/wakealarm > "$script_dir/wakealarm"

# Prevent automatic suspend while working on the backup
sudo systemctl mask sleep.target

# Do backup the system
sudo "$script_dir/archivist/archivist.sh"

# Authorize automatic suspend
sudo systemctl unmask sleep.target

days_frequency représente donc la fréquence de backup, ici tout les 3 jours.

hour représente l’heure de réveil de l’ordinateur pour effectuer le backup. De préférence au moins 5 minutes avant le backup lui-même.

get_next_backup_execution est la fonction qui va se charger de calculer la date de la prochaine exécution, en calculant de la même manière que cron.

Finalement, systemctl mask sleep.target est utilisé pour mettre en pause la mise en veille, le temps du backup.
Puis tout est remis en ordre et l’ordinateur pourra retourner en veille.

Il reste toutefois un seul problème, même en renseignant directement /sys/class/rtc/rtc0/wakealarm, rtc peut perdre la date du prochain réveil lors des incessants réveils et redémarrages que peut subir le HTPC dans son usage habituel.
Pour pallier ce problème, nous allons utiliser la copie faites dans le fichier local wakealarm pour forcer la valeur de /sys/class/rtc/rtc0/wakealarm à chaque démarrage.

Tout cela peut maintenant être placé dans une tâche cron simple.

sudo nano /etc/cron.d/backup
# Reinject wakealarm at each boot
@reboot root sleep 60;cat /home/USER/Backup/wakealarm > /sys/class/rtc/rtc0/wakealarm
# Execute the backup. This have to match the backup script !
0 4 */3 * * root /home/USER/Backup/Backup.sh | tee -a /home/USER/Backup/backup.log 2>&1

Pour démarrer l’automatisation, ou la relancer si nécessaire, une première exécution du script est nécessaire.

sudo /home/USER/Backup/Backup.sh