Outils pour utilisateurs

Outils du site


config:archlinux:laptop_install

Propos

Suite à un méchant crash de mon portable (une mise à jour Windows 10 qui a vraiment mal tournée), j'ai décidé de ré-installer ArchLinux sur icelui.

Mon portable est un Clevo 11.6“, i5-3210M, 8Go de RAM, Intel HD4000 + NVIDIA GeForce GT 650M. Et j'ai remplacé le disque SATA 750Go par un SSD Crucial-M500 de 256Go.

Voici les étapes en détail, mais peut-être pas dans l'ordre…

N.B. : Les commandes commençant par ' # ' doivent être lancées en root et celles commençant par ' $ ' en tant qu'utilisateur normal.

Installation

Étapes classiques : téléchargement de l'ISO, ' dd ' sur une clé USB et redémarrage du portable depuis celle-ci.

Partitionnement simple : j'ai un SSD de 256Go, et je vais peut-être installer un Windows à un moment ou un autre…

/dev/sda1 50M 83 Linux
/dev/sda2 50G 7 HPFS/NTFS/exFAT
/dev/sda3 173,5G 5 Étendue
/dev/sda5 8G 82 partition d'échange
/dev/sda6 30G 83 Linux
/dev/sda7 135,5G 83 Linux

Avec un montage comme suit :

/dev/sda1 on /boot type ext2 (rw,relatime,stripe=4)
/dev/sda6 on / type ext4 (rw,relatime,data=ordered)
/dev/sda7 on /home type ext4 (rw,relatime,data=ordered)

N'oubliez pas d'activer le repos ' [multilib] ' dans ' /etc/pacman.conf ' si vous comptez jouer avec des jeux 32 bits…

Après installation de base avec réseau ethernet pendant laquelle tout est reconnu (ou presque), il faut penser à installer tous les périphériques.

C'est là que les choses amusantes commencent…

Wifi

Ma carte réseau Wifi est une Intel(R) Centrino(R) Wireless-N 2230 BGN, qui est supportée par le driver iwlwifi. En revanche, il me faut activer la carte à chaque (re)démarrage pour avoir du réseau. Pénible.

Device

Déjà, obtenir le nom de la carte :

# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp4s0f2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:90:f5:d3:2a:3d brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether 68:5d:43:98:37:a8 brd ff:ff:ff:ff:ff:ff

Il s'agit donc de wlp3s0, qu'il est possible de renommer en wlan0 en tripatouillant les règles de udev

Packages

Installer les packages voulus tant que votre connexion Ethernet fonctionne :

# pacman -S iw wpa_supplicant rfkill

Configuration initiale

Ensuite, activer la carte :

# ip link set wlp3s0 up

Pour mes premiers pas avec wpa_supplicant, il m'a fallu créé un fichier de conf minimaliste :

/etc/wpa_supplicant/example.conf
ctrl_interface=/run/wpa_supplicant
update_config=1

Puis démarrer le process :

# wpa_supplicant -B -i wlp3s0 -c /etc/wpa_supplicant/example.conf

Et lancer le client :

# wpa_cli
> scan
OK
<3>CTRL-EVENT-SCAN-RESULTS
> scan_results
bssid / frequency / signal level / flags / ssid
00:00:00:00:00:00 2462 -49 [WPA2-PSK-CCMP][ESS] MYSSID
11:11:11:11:11:11 2437 -64 [WPA2-PSK-CCMP][ESS] ANOTHERSSID
> add_network
0
> set_network 0 ssid "MYSSID"
> set_network 0 psk "passphrase"
> enable_network 0
<2>CTRL-EVENT-CONNECTED - Connection to 00:00:00:00:00:00 completed (reauth) [id=0 id_str=]
> save_config
OK

Voir si tout cela fonctionne :

# dhcpcd wlp3s0
# ip addr show wlp3s0

Youhou ! J'ai du réseau, cool.

Après un redémarrage, j'en ai plus.

Ah oui, il faut faire des choses avec systemd. Alors logiquement, un simple :

# ln -s /etc/wpa-supplicant/example.conf /etc/wpa-supplicant/wpa_supplicant-wlp3s0.conf
# systemctl enable dhcpcd.service

(dhcpcd invoquera automatiquement wpa_supplicant@wlp3s0.service) devrait suffire… Mais non !

Bon, en fait si, avec rfkill et tout, ça fonctionne très bien.

Bidouillage

En effet, pour moi, cela ne fonctionne que si j'active la carte “à la main” à chaque démarrage (ip link set wlp3s0 up). Du coup, je suis bon pour modifier une Unit de systemd :

# systemctl edit wpa_supplicant@.service

Ajouter :

/etc/systemd/system/wpa_supplicant@.service.d/override.conf
[Service]
ExecStartPre=/usr/bin/ip link set %i up

Le fichier est automatiquement créé par la commande systemctl edit ….

Puis activer le tout pour avoir du réseau :

# systemctl reenable --now dhcpcd.service

SSD

Lorsque l'on a un SSD, il faut faire attention à faire des ”TRIM“ réguliers pour le garder en forme.

Et donc, il faut déjà vérifier que ladite commande est bien supportée par le matériel :

# hdparm -I /dev/sda | grep TRIM
	   *	Data Set Management TRIM supported (limit 8 blocks)
	   *	Deterministic read ZEROs after TRIM

C'est bon !

Alors ensuite, il faut choisir comment activer cela. Deux possibilité :

  • Ajouter l'option discard aux options de montage des partitions dans ' /etc/fstab ' (et ça, c'est maaaal à priori. Par exemple, il semblerait que mon Crucial M500 le supporte très mal.)
  • Lancer périodiquement une commande TRIM

Tant qu'à faire, on va choisir la seconde solution hein !

# systemctl enable --now fstrim.timer

L'unité fstrim.timer est installée par défaut, donc il n'y a rien d'autre à faire. Avec cela, un TRIM aura lieu tous les sept jours.

Xorg

Il faut régler un peu l'interface graphique pour qu'elle fonctionne bien.

Clavier

En premier lieu, un clavier en français, c'est mieux :

# localectl set-x11-keymap fr

Il est possible d'ajouter des options, comme le type de clavier (pc105, pc104, etc), une variante (oss), et des options (terminate:ctrl_alt:bksp) :

# localectl set-x11-keymap fr "" oss terminate:ctrl_alt_bksp

Environnement

Même si j'adore FVWM, j'ai opté pour XFCE, plus simple et plus complet “de base” :

# pacman -S xorg xfce4 xfce4-goodies

Un petit startx lance Xorg correctement, il n'y a plus qu'à voir comment activer la carte NVIDIA à la demande (oui, parce que là, depuis le début, elle tourne et chauffe, un truc de malade).

Bumblebee

Bumblebee sert à exploiter les cartes secondaires NVIDIA, avec la technologie Optimus.

On installe le tout (oui, on ré-installe les packages déjà présents, c'est normal…) :

# pacman -S bumblebee mesa xf86-video-intel nvidia lib32-nvidia-utils lib32-mesa-libgl primus lib32-primus

Il faut faire partie du bon groupe pour utiliser la carte secondaire :

# gpasswd -a cyriac bumblebee

Et on active le tout :

# systemctl enable bumblebeed.service

On créé un petit fichier :

/usr/local/bin/optiprime
#!/bin/sh
#
# Wrapper to disable VSYNC while running primusrun
#
 
vblank_mode=0 primusrun "$@"
 
# EoF

Et on l'utilisera pour lancer les applications nécessitant la carte NVIDIA :

$ optiprime mon_super_jeu

Gestionnaire de connexion

Pour avoir un login graphique dès le démarrage, j'ai installé un “display manager”. En l'occurrence lxdm.

# pacman -S lxdm
# systemctl enable lxdm.service

Et ça fonctionne.

On choisit une session XFCE et zou…

Par contre, j'aime bien lancer 2-3 trucs au démarrage, et l'autostart n'est pas trop ma came.

Donc j'ai créé un fichier $HOME/.xsession:

.xsession
#
# .xsession
#
 
# Language
LANG=fr_FR.UTF-8
LC_MESSAGES=fr_FR.UTF-8
LANGUAGE=fr:en
export LANG LANGUAGE LC_MESSAGES
 
export EDITOR=vim
 
# Disable speaker beep
xset -b
 
# Disable touchpad while typing
syndaemon -k -i 1 &
 
# For MIDI playback
export ALSA_OUTPUT_PORTS="$(aplaymidi -l | grep Synth | cut -f1 -d' ')"
 
# Disable mouse acceleration for fullscreen games
export SDL_VIDEO_X11_DGAMOUSE=0
 
# Set audio driver for games
export SDL_AUDIODRIVER=pulse
 
# Speed up VirtualGL rendering with optimus technology
export VGL_READBACK=pbo
 
# Xbox360 Wireless controller heaven -- two controllers supported w/hotplug
xboxdrv --daemon --detach --pid-file /dev/shm/xboxdrv.pid --dbus disabled --trigger-as-button --next-controller --trigger-as-button &
 
# EoF
$ chmod +x .xsession

Un petit redémarrage de sûreté (pas obligatoire…) et hop !

Son

J'aime bien avoir du son, c'pratique pour regarder des vidéos, jouer ou… écouter de la musique par exemple. La carte son est reconnu directement, donc pas trop de bidouilles.

Alsa

Tout un lot de packages à installer :

# pacman -S alsa-lib alsa-oss alsa-plugins alsa-tools alsa-utils lib32-alsa-lib lib32-alsa-oss lib32-alsa-plugins

Et voilà, le son fonctionne très bien.

PulseAudio

Pour une raison qui sera expliquée plus bas, j'ai aussi besoin de PulseAudio. Dont je m'étais toujours passé jusque là.

# pacman -S pulseaudio pulseaudio-alsa ossp
# systemctl enable osspd.service

Et c'est tout : PulseAudio sera lancé automatiquement par XFCE (XDG). Avec un autre gestionnaire de fenêtre (comme FVWM par exemple), il faudra lancer start-pulseaudio-x11 ou pulseaudio –start manuellement.

FluidSynth

J'aime bien avoir du son dans les jeux MS-DOS émulé avec dosemu par exemple. Pour cela, il faut une banque de son MIDI et un synthétiseur.

# pacman -S fluidsynth soudfont-fluid

Modifier le fichier de conf de fluidsynth :

/etc/conf.d/fluidsynth
# Mandatory parameters (uncomment and edit)
SOUND_FONT=/usr/share/soundfonts/FluidR3_GM2-2.sf2
AUDIO_DRIVER=pulseaudio
#AUDIO_DRIVER=alsa|jack|pulseaudio
# see 'fluidsynth -a help'
 
# Optional parameters (may be helpful)
OTHER_OPTS='-m alsa_seq -r 48000'
# man fluidsynth, please

Ensuite, les ennuis commencent : si vous activez/lancez le service fluidsynth, vous n'aurez toujours pas de son MIDI. Le service parait bien lancé, mais il y a une erreur (“Failed to create PulseAudio connection”). Il faut lancer le service en tant qu'utilisateur et non en root.

Ceci est dû au fait que PulseAudio est lancé par l'utilisateur et qu'un service lancé en root ne pourra pas s'y connecter.

On y va :

$ mkdir -p $HOME/.config/systemd/user
$ cd $HOME/.config/systemd/user
$ cp /usr/lib/systemd/system/fluidsynth.service .
$ sed -i 's/multi-user.target/default.target/' fluidsynth.service
$ systemctl --user enable --now fluidsynth.service

Elle est pas belle la vie ?

Bluetooth

Oui, j'ai craqué, j'ai un casque bluetooth et j'aimerais bien l'utiliser avec mon portable, même si je peux le brancher par prise jack. C'est la raison pour laquelle j'ai besoin de PulseAudio.

# pacman -S bluez bluez-libs bluez-utils blueman pulseaudio-bluetooth rfkill

Ajouter ces lignes au fichier ' /etc/pulse/default.pa ' :

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

Et relancer PulseAudio.

Créer une règle udev pour activer l'interface au lancement :

/etc/udev/rules.d/10-local.rules
# 10-local.rules
# Set bluetooth power up
ACTION=="add", SUBSYSTEM=="bluetooth", KERNEL=="hci[0-9]*", RUN="/usr/bin/hciconfig %k up"

Enfin, il faut activer le service et se donner les droits d'accès :

# gpasswd -a cyriac lp
# systemctl enable --now bluetooth.service

Il est ensuite possible d'utiliser ' bluetoothctl ' pour configurer tout ça, mais j'ai préféré utiliser ' blueman '. Il suffit de le lancer, de cliquer à droite sur l'icône dans la barre de notification (“systray”) et de chercher un peu.

/!\ Petite précision : sur ce portable, je suis obligé d'activer la puce bluetooth à chaque démarrage (Fn-F12), et je n'ai pas (encore) trouvé de magouille pour outrepasser cela. /!\

En fait, suite à un passage dans le BIOS où je n'ai rien changé, tout fonctionne normalement, à savoir que le redémarrage garde la configuration précédente, que ce soit “activé” ou “désactivé”…

Webcam

C'est l'enfance de l'art : il suffit d'activer la webcam par le raccourci clavier (Fn-F10) et elle est détectée par le système.

août 14 10:16:38 clevo kernel: usb 4-1.6: new high-speed USB device number 3 using ehci-pci
août 14 10:16:38 clevo mtp-probe[1876]: checking bus 4, device 3: "/sys/devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.6"
août 14 10:16:38 clevo mtp-probe[1876]: bus: 4, device: 3 was not an MTP device
août 14 10:16:38 clevo kernel: media: Linux media interface: v0.10
août 14 10:16:38 clevo kernel: Linux video capture interface: v2.00
août 14 10:16:38 clevo kernel: uvcvideo: Found UVC 1.00 device Chicony USB 2.0 Camera (04f2:b2b0)
août 14 10:16:38 clevo kernel: input: Chicony USB 2.0 Camera as /devices/pci0000:00/0000:00:1d.0/usb4/4-1/4-1.6/4-1.6:1.0/input/input20
août 14 10:16:38 clevo kernel: usbcore: registered new interface driver uvcvideo
août 14 10:16:38 clevo kernel: USB Video Class driver (1.1.1)

Elle utilise le pilote uvcvideo, du coup :

# pacman -S guvcview

et vous pouvez la tester.

Luminosité

La seule chose que ne sait pas gérer systemd en tant que gestionnaire d'énergie pour le moment est l'état de la batterie (branchée ou non).

Donc il faut passer outre, grâce à une règle udev et un p'tit script.

/etc/udev/rules.d/01-powersave.rules
# 01-powersave.rules
# Launch power saving script when AC is unplugged
SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/usr/local/bin/powersave true"
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/usr/local/bin/powersave false"
/usr/local/bin/powersave
#!/bin/bash
#
# powersave
#
# Power saving script, simple and short.
# Can be customised by adding commands.
#
 
# Variables to edit to reflect your configuration
# Path to backlight file
declare -r BACKLIGHT="/sys/class/backlight/acpi_video0/brightness"
# Brightness value for unplugged state
declare -r MIN_LIGHT=1
# Brightness value for plugged state (check for *your* hardware max value in /path/to/backlight/function/max_brightness)
declare -r MAX_LIGHT=5
# Modules to load/unload depending on AC state
declare -r MODULES="bluetooth btusb uvcvideo"
 
function usage () {
  echo "Usage: $0 [true|false]"
  exit 1
}
 
if [ $# -lt 1 ]; then
  usage
fi
 
# Function run when the AC battery is unplugged
function unplugged () {
  # Change screen brightness
  echo $MIN_LIGHT > $BACKLIGHT
 
  # Unload power hungry modules
  modprobe -rs $MODULES
 
  # Change CPU scaling governor
  # tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor <<< powersave
  for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
    echo powersave > $i
  done 
 
  # Enter power save state for sound device
  echo 1 > /sys/module/snd_hda_intel/parameters/power_save
}
 
# Function run when the AC battery is plugged
function plugged () {
  # Change screen brightness
  echo $MAX_LIGHT > $BACKLIGHT
 
  # Load power hungry modules
  for m in $MODULES; do
    modprobe -s $m
  done
 
  # Change CPU scaling governor
  for i in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
    echo performance > $i
  done 
 
  # Quit power save state for sound device
  echo 0 > /sys/module/snd_hda_intel/parameters/power_save
}
 
case "$1" in
  true)
    echo "Powersave state: Unplugged"
    unplugged
    ;;
  false)
    echo "Powersave state: Plugged"
    plugged
    ;;
  *)
    usage
    ;;
esac
 
exit 0
 
# EoF
# chmod +x /usr/local/bin/powersave

Et voilà.

Conclusion

Après un rapide test, même le “suspend/resume” en fermant l'écran est fonctionnel : je retrouve bien les fonctionnalités d'Optimus après le “resume” et le son revient bien aussi. Je viens tout juste de perdre la souris (première fois que cela m'arrive…), mais un rapide switch Fn-F1 corrige cela.

Petit résumé de ce qui est lancé au démarrage :

  • bluetooth.service
  • dbus-org.bluez.service
  • display-manager.service
  • getty@tty1.service
  • bumblebeed.service
  • cpupower.service
  • dhcpcd.service
  • fstrim.timer
  • osspd.service
  • remote-fs.target
  • wpa_supplicant@wlp3s0.service
  • systemd-timesync.service

Et cela démarre très, très vite :

$ systemd-analyze 
Startup finished in 1.022s (kernel) + 594ms (userspace) = 1.617s

Le plus long étant le montage de ma partition ”/“ :

$ systemd-analyze blame | head -1
           314ms dev-sda6.device

Et voilà, à priori, je n'ai rien oublié et tout fonctionne très bien. Content je suis. :)

config/archlinux/laptop_install.txt · Dernière modification: 2015/08/29 22:33 par cyriac