Limiter le débit internet sous Linux avec une fenêtre à cliquer.

Avec une fibre à 1 Gb/s, on oublie vite ce qu'est une connexion lente. Pourtant, il est utile de la brider pour tester un site, une vidéo ou un jeu en conditions « ADSL ». Voici une méthode testée sur Zorin OS, avec une fenêtre pour choisir 12, 15 ou 20 Mb/s en un clic. Elle repose sur tc, l'outil de contrôle du trafic intégré au noyau Linux, et sur zenity pour les fenêtres.



1. Installer les outils

Ce groupe de commandes met à jour la liste des paquets, puis installe trois éléments : iproute2 (qui fournit ip et tc), zenity (les fenêtres graphiques) et les modules supplémentaires du noyau. Ces modules sont nécessaires à la limitation de débit. Sans eux, tc répond « qdisc kind is unknown ».

sudo apt update

sudo apt install -y iproute2 zenity linux-modules-extra-$(uname -r)


Redémarrez ensuite l'ordinateur, pour que les modules soient pris en compte.

2. Créer le script qui limite

Ce groupe de commandes crée le fichier /usr/local/bin/limite. Quand on le lance, il fait trois choses :


Sans chiffre après la commande, la limite est de 12 Mb/s en réception et 1 Mb/s en émission. Par exemple, limite 20 donne 20 Mb/s en réception.


sudo tee /usr/local/bin/limite >/dev/null <<'EOF'

#!/bin/bash

[ "$EUID" -ne 0 ] && exec sudo "$0" "$@"

DOWN=${1:-12}

UP=${2:-1}

IF=$(ip route show default | awk '{print $5}' | head -n1)

modprobe ifb

ip link add ifb0 type ifb 2>/dev/null

ip link set dev ifb0 up

tc qdisc del dev $IF ingress 2>/dev/null

tc qdisc del dev $IF root 2>/dev/null

tc qdisc del dev ifb0 root 2>/dev/null

tc qdisc add dev $IF handle ffff: ingress

tc filter add dev $IF parent ffff: protocol all u32 match u32 0 0 action mirred egress redirect dev ifb0

tc qdisc add dev ifb0 root tbf rate ${DOWN}mbit burst 256kb latency 400ms

tc qdisc add dev $IF root tbf rate ${UP}mbit burst 128kb latency 400ms

echo "Limite active sur $IF : ${DOWN} Mb/s en réception, ${UP} Mb/s en émission"

EOF


3. Créer le script qui annule la limite

Ce groupe crée le fichier /usr/local/bin/illimite. Il supprime toutes les règles de limitation et désactive l'interface virtuelle, ce qui rend la fibre à pleine vitesse.


sudo tee /usr/local/bin/illimite >/dev/null <<'EOF'

#!/bin/bash

[ "$EUID" -ne 0 ] && exec sudo "$0" "$@"

IF=$(ip route show default | awk '{print $5}' | head -n1)

tc qdisc del dev $IF ingress 2>/dev/null

tc qdisc del dev $IF root 2>/dev/null

tc qdisc del dev ifb0 root 2>/dev/null

ip link set dev ifb0 down 2>/dev/null

echo "Limite supprimée sur $IF"

EOF


Ce petit groupe rend ensuite les deux scripts exécutables, et demande au terminal de relire la liste des commandes disponibles :


sudo chmod +x /usr/local/bin/limite /usr/local/bin/illimite

hash -r


4. Créer la fenêtre de choix

Ce groupe crée le fichier ~/.local/bin/limite-gui. Il affiche une liste avec quatre choix : 12, 15, 20 Mb/s et « Illimité ». Il lance ensuite le bon script, en demandant le mot de passe dans une fenêtre graphique. Un message confirme que la limite est posée, ou affiche l'erreur.


mkdir -p ~/.local/bin ~/.local/share/applications

cat > ~/.local/bin/limite-gui <<'EOF'

#!/bin/bash

CHOIX=$(zenity --list --title="Limiter la connexion" --text="Choisis le débit :" --column="Débit" "12 Mb/s" "15 Mb/s" "20 Mb/s" "Illimité (fibre)" --width=300 --height=280) || exit 0

case "$CHOIX" in

"12 Mb/s") CMD="/usr/local/bin/limite 12 1" ;;

"15 Mb/s") CMD="/usr/local/bin/limite 15 1" ;;

"20 Mb/s") CMD="/usr/local/bin/limite 20 1" ;;

*) CMD="/usr/local/bin/illimite" ;;

esac

if OUT=$(pkexec $CMD 2>&1); then

  zenity --info --title="Fait" --text="$OUT" --timeout=4

else

  zenity --error --title="Erreur" --text="$OUT"

fi

EOF

chmod +x ~/.local/bin/limite-gui


5. Ajouter l'icône au menu

Ce dernier groupe crée un lanceur, qui ajoute « Limiter le débit » au menu des applications, dans la catégorie Réseau.


cat > ~/.local/share/applications/limite-debit.desktop <<EOF

[Desktop Entry]

Type=Application

Name=Limiter le débit

Comment=Choisir 12, 15 ou 20 Mb/s

Exec=$HOME/.local/bin/limite-gui

Icon=network-wired

Terminal=false

Categories=Network;

EOF


Cherchez ensuite « Limiter le débit » dans le menu, cliquez sur un débit, puis sur OK, et entrez votre mot de passe. Si l'icône n'apparaît pas, fermez la session puis rouvrez-la.

Limites à connaître