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 :
Il trouve tout seul la carte réseau utilisée.
Il redirige le trafic entrant vers une interface virtuelle, car tc ne sait freiner que le trafic sortant.
Il applique la limite de débit choisie en réception et en émission.
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
La limite s'applique à tout l'ordinateur, pas à un seul programme.
Elle disparaît au redémarrage, il suffit alors de recliquer.
Avec un VPN ou plusieurs connexions actives, le script peut cibler la mauvaise interface.
L'émission est fixée à 1 Mb/s. Pour la changer, modifiez le dernier chiffre des lignes limite … 1 dans limite-gui.