ArchLinux

De Banane Atomic
Aller à la navigationAller à la recherche

Liens

Astuces

Utiliser les fichiers SIG (signature)

Bash.svg
# Vérification de la correspondance entre un fichier et sa signature
gpg --verify signature.sig
# BAD signature signifie que fichier ne correspond pas à sa signature

# gpg: Signature faite le ven. 31 août 2012 21:33:57 CEST avec la clé DSA ID 62D84F01
# gpg: Impossible de vérifier la signature: Pas de clé publique
# Il va falloir télécharger la clé publique dont l'ID a été donné
gpg --recv-keys 62D84F01
# Puis relancer la vérification

# Autre solution : pacman-key
pacman-key -v signature.sig

WARNING: This key is not certified with a trusted signature!
Use the Kernel.org web of trust. This will require that you first locate the members of kernel.org in your area and sign their keys. Short of meeting the actual owner of the PGP key in real life, this is your best option to verify the validity of a PGP key signature.

Connaitre le PID correspond à une application fenêtre

Bash.svg
xprop _NET_WM_PID
# cliquer sur la fenêtre
# _NET_WM_PID(CARDINAL) = 666

# obtenir le nom de l'application lié au PID 666
ps -p 666

Convertir des fichiers WMA en OGG

Utilisez Oggenc

Bash.svg
# installation
pacman -S vorbis-tools

# convertion du fichier pureson.wav en pureson.ogg
oggenc pureson.wav

Extraire le contenu d'un fichier dmg

Bash.svg
7z x fichier.dmg
sudo mount -o loop fichier.hfs dossier

Les variables d'environnement

Bash.svg
# Ajouter un chemin à PATH
PATH="${PATH}:/mon/chemin"

Modules

Bash.svg
# charger un module
sudo modprobe mon_module

# décharger proprement un module : si aucun autre module n'a de dépendances vers lui
sudo modprobe -r mon_module
# ou décharger un module sans vérifier les dépendances
sudo rmmode mon_module

# liste les dépendances d'un module
modprobe --show-depends mon_module

# liste des modules chargés
lsmod

# information sur un module
modinfo mon_module

Blacklisting

Charger un module au démarrage

/etc/modules-load.d/mon-module.conf
# Load mon-module.ko at boot
mon-module

Désactiver les bip

Bash.svg
sudo rmmod pcspkr

# Cinnamon seems to play a "water drop" sound. To disable it, set in dconf:
dconf write /org/cinnamon/desktop/wm/preferences/audible-bell false
/etc/modprobe.d/nobeep.conf
blacklist pcspkr

Groupes

Bash.svg
# liste les groupes auxquels appartient l'utilisateur courant
groups

# liste des groupes existants avec les utilisateurs
cat /etc/group
# liste les utilisateur d'un groupe
cat /etc/group | grep mon_groupe

# ajouter/supprimer un utilisateur d'un groupe
sudo gpasswd -a [user] [group]
sudo gpasswd -d [user] [group]

# ajouter/supprimer un groupe
sudo groupadd [group]
sudo groupdel [group]

# changer l'id d'un groupe pour 9999
groupmod -g 9999 mon_groupe

# changer le groupe principal d'un utilisateur
usermod -g [group] [user]
Si l'utilisateur ciblé par les modifications est actuellement loggué, il devra se délogguer puis se relogguer avant que les modifications ne prennent effet.

Utilisateurs

Bash.svg
# Ajouter un utilisateur, méthode interactive
adduser
# méthode explicite
useradd -m -g [Group] -s /bin/zsh [User]
# -m: créé un dossier home, par défaut ce n'est pas le cas
# -g: set the group, by default a group with the same name as the user name is created
# -G: add the new user to these groups
# -s: set the shell, by default /bin/bash (must be one of the shell listed in /etc/shells)
# -s /bin/false   → tous les accès au système sont désactivés
# -s /usr/bin/nologin → pas de connexion direct au système ni via su et ssh (/bin/nologin, /sbin/nologin, /usr/sbin/nologin)

# create a daemon user
useradd -r -s /usr/bin/nologin -N -g nobody [User]
# -r: system user, system user id (<1000) and the home folder is not created
# -N: do not create a group with the same name as the user, but add the user to the group specified by the -g option or by the GROUP variable in /etc/default/useradd

# Supprimer un utilisateur, -r pour supprimer le répertoire de l'utilisateur
userdel -r [USERNAME]

# Lister les utilisateurs
cat /etc/passwd

# user info (uid, gid, groups)
id [USERNAME]

# changer le mot de passe d'un utilisateur
passwd [USERNAME]

# changer l'id d'un utilisateur pour 9999
usermod -u 9999 [USERNAME]

# changer le shell d'un utilisateur
chsh --shell /bin/bash [USERNAME]
cat /etc/shells  # liste des shells disponibles
grep [USERNAME] /etc/passwd  # afficher le shell de l'utilisateur

# créer un dossier home pour un utilisateur qui n'en a pas
mkdir /home/[USERNAME]
cd /home/[USERNAME]
cp -r /etc/skel/. .
chown -R [USERNAME]:[USERNAME] .
chmod -R go=u,go-w .
chmod go= .
usermod -d /home/[USERNAME] [USERNAME]

/etc/shadow

  • user name
  • encrypted password
    • s'il commence par $6$ : encrypté avec SHA-512
    • s'il commence par $1$ : encrypté avec MD5
    • sinon : encrypté avec DES
    • * the account is deactivated and locked
    • ! x the login is deactivated, user will be unable to login
    • !! the password has expired
  • nombre de jours entre la dernière date de changement du mot de passe et le 1er Jan. 1970
  • nombre de jours restant avant que l'utilisateur puisse modifier son mot de passe
  • nombre de jours de validité du mot de passe (après que l'utilisateur fut forcé de le changer)
  • nombre de jours avant l'expiration du mot de passe pour l'envoie d'un avertissement à l'utilisateur pour qu'il le change
  • The number of days after password expires that account is disabled
  • Days since Jan 1, 1970 that account is disabled i.e. an absolute date specifying when the login may no longer be used
Bash.svg
# générer le hash à partir du mot de passe et du salage
# $6$kxB2aa2K$CbY3pMBrBhskEa/WYCzeyGotlT9OBnt76blE4xbW8Nj/VhydWRxNLz26gE7W4bLUiRoKmTqWTHSlo2OPaBeP30
# $6 → encrypté avec SHA-512
# salt → kxB2aa2K
# hash → CbY3pMBrBhskEa/WYCzeyGotlT9OBnt76blE4xbW8Nj/VhydWRxNLz26gE7W4bLUiRoKmTqWTHSlo2OPaBeP30

# mot de passe → test
# salt → kxB2aa2K
python3 -c 'import crypt; print(crypt.crypt("test", "$6$kxB2aa2K"))'
# $6$kxB2aa2K$CbY3pMBrBhskEa/WYCzeyGotlT9OBnt76blE4xbW8Nj/VhydWRxNLz26gE7W4bLUiRoKmTqWTHSlo2OPaBeP30

Boot message

/etc/systemd/system/getty.target.wants/getty@tty1.service
# change yes pour no
TTYVTDisallocate=no

Disable Clearing of Boot Messages

Ancienne méthode

/etc/inittab
# Ajouter --noclear au terminal 1
c1:2345:respawn:/sbin/agetty --noclear -8 38400 tty1 linux
c2:2345:respawn:/sbin/agetty -8 38400 tty2 linux

Boot time

Bash.svg
systemd-analyze critical-chain

NTFS

Le support NTFS n'est pas installé par défaut, ce qui a pour effet de monter en lecture seul les disques NTFS.

Bash.svg
sudo pacman -S ntfs-3g

Type de système de fichier utilisé

Bash.svg
df -Th

Fonts - Polices

Bash.svg
# lister les familles de fonts
fc-list : family | sort -f

# tester si un font est disponible, et retourne le font de remplacement
fc-match "Mon Font"

Le logiciel gnome-font-viewer permet de visualiser les rendus des différents fonts installés.

Installation d'un nouveau font

Copiez le fichier dans un sous-dossier de /usr/share/fonts, ou dans ~/.local/share/fonts ou ~/.fonts
D'autres fonts sont présents dans /usr/share/ghostscript/9.06/Resource/Font

Bash.svg
# update the fontconfig font cache
fc-cache -vf
Les fonts de Windows se trouvent dans C:\Windows\Fonts
Redémarrer writer pour que la nouvelle police soit disponible.)

Xorg

Bash.svg
# liste les chemins dans lesquels Xorg va chercher les fonts
grep /fonts /var/log/Xorg.0.log
# ou
xset q

A la différence de Fontconfig, Xorg ne cherche pas les fonts récursivement dans le dossier « /usr/share/fonts ».
Il faut donc ajouter les chemins dans un fichier de configuration de Xorg :

/etc/X11/xorg.conf.d/99-fonts.conf
Section "Files"
    FontPath     "/usr/share/fonts/artwiz-fonts/"
    FontPath     "/usr/share/fonts/cantarell/"
    FontPath     "/usr/share/fonts/cyrillic/"
    FontPath     "/usr/share/fonts/encodings/"
    FontPath     "/usr/share/fonts/speedo/"
    FontPath     "/usr/share/fonts/util/"
EndSection

Mes préférences

Code Cascadia Code, Source Code Pro, Inconsolata-g, monofur, Ubuntu Mono, DejaVu Sans Mono
Texte Mint Spirit No2, Cantarell, DejaVu Serif, Droid Serif, Liberation Serif
Symboles DejaVu Sans, Dingbats, FreeSerif, OpenSymbol, Font Awesome
M$ : Webdings, Wingdings
Bash.svg
pacman -S ttf-inconsolata ttf-dejavu ttf-ubuntu-font-family
yay ttf-monofur ttf-mintysis

Remaper les chemins vers les dossiers Musique, Images, Vidéos

Bash.svg
# installer xdg-user-dirs-gtk
sudo pacman -S xdg-user-dirs-gtk

# créer le fichier ~/.config/user-dirs.dirs
xdg-user-dirs-update

# appliquer les modifications du fichier user-dirs.dirs
xdg-user-dirs-update && xdg-user-dirs-gtk-update
~/.config/user-dirs.dirs
XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Data/Téléchargements"
XDG_TEMPLATES_DIR="$HOME/Modèles"
XDG_PUBLICSHARE_DIR="$HOME/Public"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Data/Musique"
XDG_PICTURES_DIR="$HOME/Data/Images"
XDG_VIDEOS_DIR="$HOME/Data/Vidéos"

Types MIME

Shared MIME-info Database
Gnome : Shared MIME-info Database
Bases de données :

  • $XDG_DATA_DIRS : /usr/share , /usr/local/share
  • $XDG_DATA_HOME : ~/.local/share

/etc/mime.types ou ~/.mime.types

Créez un nouveau type MIME

~/.local/share/mime/packages/nouveau_type.xml
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
  <mime-type type="application/maff">
    <comment>Mozilla Archive Format File</comment>
    <acronym>MAFF</acronym>
    <expanded-acronym>Mozilla Archive Format File</expanded-acronym>
    <sub-class-of type="application/zip"/>
    <generic-icon name="application-x-maff"/>
    <glob pattern="*.maff"/>
  </mime-type>
</mime-info>
Bash.svg
# puis mettre à jour la base de données locale des types MIME
sudo update-mime-database ~/.local/share/mime

Changing filetype association via MIME

  • mime-type type: type de média -x- sous-type
    • type de média : text, application, audio, image, video, message,model
  • icon name: /usr/share/icons/Theme/scalable/mimetypes

Association type MIME - icône

Dans le cas de l'ajout d'une nouvelle icône : mettre à jour le cache des icônes

Bash.svg
sudo gtk-update-icon-cache /usr/share/icons/Mon_Theme

Locale

~/.local/share/mime/packages/Override.xml
<?xml version="1.0"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">

  <mime-type type="text/x-xxx">
    <generic-icon name="text-plain"/>
  </mime-type>

</mime-info>
Bash.svg
# puis mettre à jour la base de données locale des types MIME
update-mime-database ~/.local/share/mime

Autre méthode (ne marche pas!):

Bash.svg
xdg-icon-resource install --context mimetypes --mode user --size 24 /usr/share/icons/GartoonRedux/24x24/mimetypes/text-plain.png text/plain

Système

Éditez le fichier XML correspondant au type MIME dans /usr/share/mime/packages:

Le fichier freedesktop.org.xml contient les types mime de base.
/usr/share/mime/packages/virtualbox.xml
<mime-type type="application/x-virtualbox-vbox">
   <icon name="virtualbox-vbox"/>
</mime-type>

Ou pour éviter que les modifications ne soit écrasées par une prochaine mise à jour, éditez le fichier Override.xml:

/usr/share/mime/packages/Override.xml
<?xml version="1.0"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">

   <mime-type type="application/x-virtualbox-vbox">
      <icon name="virtualbox-vbox"/>
   </mime-type> 

</mime-info>
Bash.svg
# puis mettre à jour la base de données des types MIME
sudo update-mime-database /usr/share/mime

mime-editor

Permet l'ajout et suppression de types MIME au travers du fichier $XDG_DATA_HOME/mime/packages/Override.xml

~/.local/share/mime/packages/Override.xml
<?xml version="1.0"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">

  <mime-type type="text/x-xxx">
    <glob pattern="*.xxx" />
    <comment>xxx file</comment>
  </mime-type>

</mime-info>

Enregistrez une nouvelle icône

Bash.svg
xdg-icon-resource install --context mimetypes --size 32 /chemin/image.png

Mettre à jour les icônes d'un thème

Utile lorsqu'une icône d'un des thèmes système (/usr/share/icons) est modifiée.
Inutile avec les icônes des thèmes utilisateur (~/icons)

Bash.svg
sudo gtk-update-icon-cache /usr/share/icons/theme_d_icône

Fichiers desktop

Ils se trouvent dans /usr/share/applications et ~/.local/share/applications

Les fichiers dans ~/.local/share/applications ont la priorité sur ceux de /usr/share/applications
exemple.desktop
[Desktop Entry]
Name=Urban Terror
Comment=Launch in a new X server
Type=Application
Categories=Game;
Terminal=false
Exec=/home/nicolas/Scripts/Xorg/ut.sh
Icon=urbanterror
La valeur de Exec doit être exécutable sinon l’icône ne s'affiche pas
Pour les applications PlayOnLinux utilisez la syntaxe suivante:
Exec=/usr/share/playonlinux/playonlinux --run "mon programme"
Pour permettre au navigateur de fichiers d'afficher l’icône et le Name du fichier desktop, il faut rendre celui-ci exécutable.

Catégories

  • Accessoires : Utility
  • Bureautique : Office
  • Graphisme : Graphics
  • Internet : Network
  • Jeux : Game
  • Outils système : System
  • Programmation : Programming
  • Son et vidéo : AudioVideo
  • Autre : Other

Type

  • Application
  • Link
  • Directory

Application par défaut

Default Applications

~/.local/share/applications/mimeapps.list
[Added Associations]
application/xml=geany.desktop;

[Default Applications]

[Removed Associations]

Configuration avec Nautilus

Hibernation (suspend2disk)

Passez la paramètre resume=SWAP_PARTITION au noyau :

/etc/default/grub
GRUB_CMDLINE_LINUX="resume=/dev/sda5"
Bash.svg
# Re-générez le fichier de configuration 
sudo grub-mkconfig -o /boot/grub/grub.cfg

Ajoutez le hook resume après block (et lvm2) et avant filesystems :

/etc/mkinitcpio.conf
HOOKS="base udev autodetect modconf block resume filesystems usbinput fsck"
Bash.svg
# recontruisez l'image initrd
sudo mkinitcpio -p linux
Bash.svg
# lancez l'hibernation avec upower
dbus-send --system --print-reply --dest="org.freedesktop.UPower" \
/org/freedesktop/UPower org.freedesktop.UPower.Hibernate

Sorties de veille imprévues

Bash.svg
# vérifier le journal
journalctl -b
# ehci-pci 0000:00:1d.0: System wakeup enabled by ACPI
# ehci-pci 0000:00:1a.0: System wakeup enabled by ACPI
# xhci_hcd 0000:00:14.0: System wakeup enabled by ACPI

# recouper les identifiants avec lspci
lspci
# 00:1d.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #1 (rev 04)
# 00:1a.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB Enhanced Host Controller #2 (rev 04)
# 00:14.0 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller (rev 04)

# vérifier quels matériels ont le droit de réveiller le système
cat /proc/acpi/wakeup
# EHC1      S4    *enabled   pci:0000:00:1d.0
# EHC2      S4    *enabled   pci:0000:00:1a.0
# XHC       S4    *enabled   pci:0000:00:14.0

# changer les droits d'un matériel jusqu'au prochain redémarrage
sudo sh -c "echo XHC > /proc/acpi/wakeup"

Désactiver les droits de matériels au démarrage

/etc/systemd/system/disable-usb-wakeup.service
[Unit]
Description=Disable acpi wakeup triggers in /proc/acpi/wakeup

[Service]
ExecStart=/usr/lib/systemd/scripts/disable_acpi_wakeup.sh

[Install]
WantedBy=multi-user.target
/usr/lib/systemd/scripts/disable_acpi_wakeup.sh
#!/usr/bin/bash

DEVICES="EHC2 XHC PWRB"
for DEVICE in ${DEVICES}; do
	DEVICE_ENABLED=$(grep enabled /proc/acpi/wakeup | cut -f 1 | grep ${DEVICE})
	if [ -n "${DEVICE_ENABLED}" ]; then 
		echo ${DEVICE} > /proc/acpi/wakeup
	fi
done

DVD

Erreur : libdvdread: Encrypted DVD support unavailable.
La plupart des DVD sont encryptés avec CSS. Pour les lire il faut installer le paquet "libdvdcss".

Compilez et installez depuis du code source

Bash.svg
# création du fichier Makefile
./configure --prefix=/usr --sysconfdir=/etc
# créé un fichier config.log

# appel de la section prepare du fichier Makefile
make

# appel de la section install du fichier Makefile
sudo make install

Arguments de configure

prefix

Par défault à /usr/local.

Makefile
PREFIX = /usr/local

sysconfdir

Par défault à PREFIX/etc.

Désinstallation

Bash.svg
make uninstall

Si make uninstall n'existe pas

  • script uninstall
  • make -n install liste tous les fichiers installés

Problème avec Python

ArchLinux utilise par défaut python3, alors que le script de configuration peut s'attendre à python2.

checking for python... /usr/bin/python
checking for pygtk... no
configure: error: couldn't find pygtk

Pour corriger ce problème, éditez le fichier configuration et remplacer python par python2
Il sera nécessaire de faire de même avec le fichier Makefile

config.status: error: cannot find input file: `Makefile.in' ou `config.h.in'

Bash.svg
aclocal
autoconf
autoheader
automake --add-missing

Makefile: *** séparateur manquant

Vérifiez que les lignes commencent par une tabulation et non des espaces.

Compilation multi-threads

/etc/makepkg.conf
# pour un processeur double coeurs
MAKEFLAGS="-j2"
Bash.svg
# pour connaître le nombre de processeurs disponibles
nproc

Erreur de syntaxe : fin de fichier prématurée

Bash.svg
@if [ -n $(VARIABLE) ]; \
    then \
    commande;\
    commande;\
else\
    commande;\
fi

Fichiers Patch

Bash.svg
# création d'un fichier patch ou diff
diff -u fichier_originel fichier_modifié > modifications.patch

# application d'un patch
patch -p0 < modifications.patch

Python2

doc

Bash.svg
# Installation
sudo pacman -S python2

# Pour forcer l'utilisation de python2, modifier la première ligne du script
#!/usr/bin/env python
# devient
#!/usr/bin/env python2

Auto-completion avec bash

Bash.svg
# auto-complétion améliorée
sudo pacman -S bash-completion
~/.bashrc
# auto-completion après man
complete -cf man

Auto-completion

MAN en couleur

Afficher les pages de manuel en couleur grace à MOST.

Bash.svg
# Installation
sudo pacman -S most

# Editer le fichier .bashrc
export PAGER=most

Informations matériel

Bash.svg
# Cartes PCI : carte graphique, ...
lspci

lshw

# fréquence du cpu
sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq

Bluetooth

Bash.svg
# installation
pacman -S bluez bluez-utils

# démarrer le service bluetooth 
sudo systemctl start bluetooth

# dongle
sudo hciconfig hci0 up
hcitool dev  # tester que le dongle a bien été détecté

# configuration
bluetoothctl
power on
agent on
default-agent
scan on
pair xx:xx:xx:xx:xx:xx
connect xx:xx:xx:xx:xx:xx

# autres commandes
devices  # liste des devices qui ont été précédemment associé

Variable d'environnement

*.desktop
# Utilisez env pour modifier une variable d'environnement
Exec=env GTK2_RC_FILES=/usr/share/themes/Clearlooks/gtk-2.0/gtkrc /usr/bin/netbeans

Lecteur d'empreintes

Utiliser le lecteur d'empreintes pour se connecter au système pause problème avec Gnome Keyring car celui-ci utilise le mot de passe de l'utilisateur pour encrypter les certificats, clés et autres mots de passe. Et comme aucun mot de passe n'a été entré, tous sera stocké en clair

Fprint
pam_fprint
Fingerprint-gui

Connaitre le modèle du lecteur d'empreintes

Bash.svg
lsusb

# Bus 004 Device 002: ID 147e:2016 Upek Biometric Touchchip/Touchstrip Fingerprint Sensor

Installation

Bash.svg
sudo pacman -S pam fprint

Tests

Bash.svg
# enregistrer une empreinte
fprintd-enroll

# lister les empreintes enregistrées d'un utilisateur
fprintd-list utilisateur

# tester la reconnaissance d'empreintes
fprintd-verify

Configurer PAM

/etc/pam.d/gdm
# ajouter ces lignes au debut du fichier (en dessous de #%PAM-1.0)
auth			required		pam_env.so
auth			sufficient		pam_fprintd.so
auth			sufficient		pam_unix.so try_first_pass likeauth nullok
auth			required		pam_deny.so

Erreurs

/usr/lib/libharfbuzz.so.0: undefined symbol: FT_Done_MM_Var

La version de libfreetype n'est pas compatible avec harfbuzz.
Supprimer les fichiers libfreetype.so et libfreetype.so.6 fournit avec l'application afin d'utiliser ceux du système.

There is not enough room on the disk to save /tmp/...

Il n'y a plus d'espace libre sur /tmp, il faut supprimer des éléments.

Bash.svg
# vérifier que /tmp est plein
df -h /tmp

# localiser les éléments qui prennent de la place
baobab /tmp

Impossible de trouver le moteur de thème dans module_path : « murrine »

Le moteur gtk murrine n'est pas installé

Bash.svg
# installer le moteur gtk murrine
pacman -S gtk-engine-murrine

Error binding socket;
addr='AF_UNIX(/run/systemd/journal/syslog)', error='No such file or directory (2)'

/etc/syslog-ng/syslog-ng.conf
# remplacer unix-dgram("/run/systemd/journal/syslog"); par
unix-dgram("/dev/log");