Arch Linux (im Dualboot)

Da meine Beratungsarbeit stark von Microsoft-Werkzeugen wie Office und Power BI abhängt, benutze ich vor allem Windows als Betriebssystem.
Ich programmiere weiterhin viel, und zu meiner Überraschung ist das Entwickeln unter Windows sehr angenehm. Wenn ich etwas brauche, das Linux voraussetzt — etwa Airflow oder Redmine — nehme ich WSL und Docker.
Ein Nachteil beim Virtualisieren von Linux ist der Geschwindigkeitsverlust. Deshalb habe ich rund 60 GB abgezweigt, um Arch im Dualboot auf meinem Notebook zu installieren.
Auf Twitter schrieb ich, dass ich Arch installiere, woraufhin mir jemand vorschlug, meine alte Anleitung zu aktualisieren — in 8 Jahren hat sich viel geändert. Also habe ich die über dreijährige Pause dieses Blogs beendet, um mein neues Vorgehen festzuhalten.
Als ich den Beitrag von 2012 schrieb, war das offizielle Wiki nicht aktuell. Heute ist es sehr vollständig, und ich empfehle, ihm für Aktualisierungen und weitere Details zu folgen.
Wie in den früheren Beiträgen weise ich darauf hin: das sind die Einstellungen, die ich für meine
Rechner gewählt habe (ein Dell Latitude 3480 und ein Acer Predator Helios 300).
Manches davon passt vielleicht nicht zu deinem System oder ist je nach Desktop-Umgebung schlicht
überflüssig.
Auf die einzelnen Befehle gehe ich nicht im Detail ein. Mehr dazu findest du im Internet und im
offiziellen Wiki.
Bei Fragen oder Vorschlägen hinterlass gern einen Kommentar hier oder schreib mir eine DM auf
Twitter.
Update: Seit Mai 2021 enthält das Arch-ISO einen geführten Installer namens Archinstall. Da ich es so gewohnt bin, bleibe ich bei der manuellen Installation.
Die Platte partitionieren
Ich habe zuerst Windows installiert und dabei die 240-GB-SSD so partitioniert:
- 529 MB: Windows Recovery
- 500 MB: EFI (größer als der Standard)
- 150 GB: Windows
- 60 GB: Arch Linux
- Rest: mit Veracrypt verschlüsselte NTFS-Partition, um sowohl von Linux als auch von Windows aus darauf zuzugreifen
Eine Partition für Swap habe ich nicht angelegt. Falls ich sie doch brauche, kann ich eine Swap-Datei auf der Platte, im Arbeitsspeicher oder im Grafikspeicher anlegen.
/, /home und /var liegen bei mir außerdem auf derselben Partition. /boot wird die
500-MB-EFI-Partition. Windows legt sie standardmäßig mit 100 MB an, was aber knapp wird, wenn du
viele Module laden oder mehrere Kernel vorhalten willst.
Hätte ich die Partitionen nicht unter Windows angelegt, könnte ich ein Linux-Werkzeug nehmen, etwa cgdisk oder parted
Installations-USB
Ich habe das ISO-Image per BitTorrent geladen und den bootfähigen Stick mit den Standardeinstellungen von Rufus Portable erstellt. Dann habe ich den Rechner neu gestartet und F12 gedrückt, bis die Bootauswahl mit dem Stick erschien. Beim Start der Arch-Installation kam die Meldung, dass auf einen Datenträger mit LABEL=ARCH202008 gewartet wird. Ich habe den Stick einfach neu eingesteckt, und das System startete korrekt.
Tastaturlayout
Nach dem Start im Terminal ist der erste Schritt, die Tastatur einzurichten. Da ich eine brasilianische Tastatur benutze, habe ich den folgenden Befehl ausgeführt:
Für eine brasilianische Tastatur:
loadkeys br-abnt2Für eine amerikanische Tastatur:
loadkeys us-acentos
Weitere Möglichkeiten zeigt ls /usr/share/kbd/keymaps/**/*.map.gz.
Die Systemuhr stellen
timedatectl set-ntp true
Unter Linux läuft die Hardwareuhr standardmäßig in UTC, unter Windows dagegen in Ortszeit. Ich lasse sie in UTC und stelle Windows über den Regedit um.
Die Platte verschlüsseln
lsblk # Para descobrir a partição. /dev/sda5 no meu caso
cryptsetup -v luksFormat /dev/sda5
Die Standardeinstellungen fand ich in Ordnung. Mehr Optionen stehen im Wiki.
Listet lsblk deine SSD (M.2 PCIe NVMe) nicht auf, prüfe im BIOS, ob der SATA Mode auf AHCI steht.
Wurde Windows im RAID-Modus installiert, musst du es im abgesicherten Modus starten und den SATA
Mode im BIOS ändern.
Die Wurzelpartition formatieren
cryptsetup luksOpen /dev/sda5 arch
mkfs.ext4 -L arch /dev/mapper/arch
Die Partitionen einhängen
mount /dev/mapper/arch /mnt
mkdir /mnt/boot
mount /dev/sda2 /mnt/boot
Verbindung mit dem Internet
WLAN
Verbinde dich über iwd mit dem WLAN
iwctl --passphrase MINHA_SENHA station wlan0 connect MEU_SSIDKabel
Kabelnetze sollten automatisch funktionieren. Falls nicht:
Mirrorlist
Pacman liest die Datei /etc/pacman.d/mirrorlist, um zu bestimmen, von welchen
Spiegeln die Pakete geladen werden. Die aktuellsten
und schnellsten sollten oben stehen, damit die Downloads zügig laufen.
Der neue Arch-Installer erledigt das mit Reflector automatisch, sobald die Internetverbindung erkannt wird. Prüfe nur, ob alles stimmt. Da ich in São Paulo bin, standen die Spiegel der UFSCar und der UFPR ganz oben.
Die wichtigsten Pakete installieren
In diesem Schritt installiere ich das Basissystem und alle Pakete, die ich brauche: Netzwerktools, Texteditor, Handbuchseiten, Xorg und PulseAudio.
pacstrap /mnt \
base{,-devel} \
linux{,-firmware} \
intel-ucode \
iwd \
dhcpcd \
iputils \
zsh \
go \
git \
neovim \
python{,-pip,-pynvim} \
man-db \
man-pages \
texinfo \
xorg-server \
xorg-xinit \
xf86-video-intel \
xf86-input-synaptics \
alsa-utils \
pipewire{,-pulse}
wireplumber
# pulseaudio{,-alsa,-bluetooth} \
# pavucontrol
Fstab
genfstab -U -p /mnt >> /mnt/etc/fstab
Chroot
arch-chroot /mnt
Zeitzone
Brasilien
ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtimeDeutschland
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
Speichere die Uhrzeit:
hwclock --systohc
Lokalisierung
Ich benutze das System auf Englisch, aktiviere aber auch pt_BR und de_DE. en_GB gefällt mir
meist besser als en_US, das ist aber Geschmackssache.
sed -i -e 's/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
sed -i -e 's/#en_GB.UTF-8 UTF-8/en_GB.UTF-8 UTF-8/' /etc/locale.gen
sed -i -e 's/#pt_BR.UTF-8 UTF-8/pt_BR.UTF-8 UTF-8/' /etc/locale.gen
sed -i -e 's/#de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
Virtual Console
Legt Tastaturlayout und Schriftart fest.
echo -e "KEYMAP=br-abnt2\nFONT=latarcyrheb-sun16" > /etc/vconsole.conf
ou
echo -e "KEYMAP=us-acentos\nFONT=latarcyrheb-sun16" > /etc/vconsole.conf
Netzwerkkonfiguration
Trägt den Rechnernamen in /etc/hosts ein und blockiert außerdem einige schädliche und
Werbe-Websites.
echo "nome_do_computador" > /etc/hostname
curl --output /etc/hosts --url "https://someonewhocares.org/hosts/zero/hosts"
echo -e "127.0.1.1\tnome_do_computador.localdomain\tnome_do_computador" >> /etc/hosts
Initramfs
Ich habe encrypt ergänzt, da die Systempartition verschlüsselt ist.
Außerdem lade ich die Nvidia-Module, wie weiter unten erklärt.
$ nvim /etc/mkinitcpio.conf
HOOKS=(base udev autodetect modconf block encrypt filesystems keyboard keymap consolefont fsck)
mkinitcpio -p linux
Pacman
Ergänzt das Repository multilib, färbt Pacman ein und fügt die Pac-Man-Animation hinzu.
sed -i -e '/^#\[multilib\]$/,+1s/#//' /etc/pacman.conf
sed -i -e '/# Misc options/a ILoveCandy' /etc/pacman.conf
sed -i -e 's/^# Color/Color/' /etc/pacman.conf
Root-Passwort
passwd
DNS und Netzwerk
Für die Verbindung mit Kabel- und Funknetzen kannst du direkt Iproute2, wpa_supplicant oder Iwd benutzen, ein Verbindungsmanager macht es aber bequemer.
Ein paar Konfigurationen, die ich schon benutzt habe:
Der NetworkManager stammt von RedHat und gehört inzwischen zum GNOME-Projekt.
Damit richtest du Kabelnetze, WLAN, Modems und VPNs ein — über die Kommandozeile ebenso wie über grafische Oberflächen (sehr gut in Gnome und KDE integriert).
sudo pacman -S networkmanager sudo systemctl enable NetworkManager.service$ nmcli device DEVICE TYPE STATE CONNECTION enp7s0 ethernet disconnected -- wlp0s20f3 wifi disconnected -- p2p-dev-wlp0s20f3 wifi-p2p disconnected -- lo loopback unmanaged --$ nmcli connection add type ethernet con-name Casa ifname enp7s0 Connection 'Casa' (0acb09e3-40a4-479f-9532-a154d8d65dfc) successfully added.$ nmcli connection up Casa Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)$ nmcli device disconnect enp7s0 Device 'enp7s0' successfully disconnected.Hinweis: Kabel und WLAN können gleichzeitig verbunden bleiben, sodass es beim Abziehen des Kabels keine Unterbrechung gibt.
$ nmcli device wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY 7C:05:07:04:38:52 MEU_SSID Infra 4 130 Mbit/s 80 ▂▄▆_ WPA2 A4:33:D7:A7:EA:10 Vizinho 1 Infra 6 130 Mbit/s 70 ▂▄▆_ WPA2 C0:3D:D9:88:1E:00 Vizinho 2 Infra 1 130 Mbit/s 65 ▂▄▆_ WPA2 68:02:B8:28:9A:60 Vizinho 3 Infra 6 195 Mbit/s 60 ▂▄▆_ WPA1 WPA2 00:26:F2:6B:D6:F2 Vizinho 4 Infra 11 54 Mbit/s 59 ▂▄▆_ WPA1 WPA2$ nmcli device wifi connect MEU_SSID password MINHA_SENHA Device 'wlp0s20f3' successfully activated with '3eafc7d7-8a89-40ae-8b01-ade3ba474de0'.$ nmcli connection show NAME UUID TYPE DEVICE MEU_SSID 3eafc7d7-8a89-40ae-8b01-ade3ba474de0 wifi wlp0s20f3 Casa 0acb09e3-40a4-479f-9532-a154d8d65dfc ethernet --ls /etc/NetworkManager/system-connections/ Casa.nmconnection MEU_SSID.nmconnectionsystemd-networkd + systemd-resolved + iwd
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf$ nvim /etc/iwd/main.conf [General] EnableNetworkConfiguration=true [Network] NameResolvingService=systemdDas Netzwerk kann beim Hochfahren gestartet werden:
sudo systemctl enable systemd-resolved iwd
Benutzer
~# useradd -m -g users -G wheel,storage,power,video,audio,rfkill -s /bin/zsh julio
~# passwd julio
~# EDITOR=nvim visudo
Descomente a linha `%wheel ALL=(ALL) ALL`
Bootloader
Ich benutze systemd-boot. Da mein Prozessor von Intel ist, lade ich zusätzlich dessen Microcode.
~# bootctl install
~# nvim /boot/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options cryptdevice=UUID=0a1b2c3d-…-4e5f6g:arch root=/dev/mapper/arch rootfstype=ext4 add_efi_memmap
sudo nvim /boot/loader/loader.conf
timeout 3
Die UUID der verschlüsselten Partition (/dev/sda5) zeigt der Befehl lsblk -o +UUID.
Mit eingerichtetem Bootloader können wir den Rechner neu starten. Wenn alles klappt, erscheint ein Menü zur Auswahl des Betriebssystems.
sudo umount /mnt/boot
sudo umount /mnt
sudo systemctl reboot
Wurde kein Display Manager installiert, startet Arch im Terminal. Melde dich mit dem im vorigen Schritt angelegten Benutzer an.
Dotfiles
Meine Dotfiles liegen auf GitHub. Ich klone das Repository und lege die passenden Symlinks an. Sobald ich Zeit habe, automatisiere ich das mit rcm, chezmoi oder GNU Stow.
~$ git clone https://github.com/jbsilva/dotfiles.git
~$ ln -s dotfiles/.config ~/.config
~$ ln -s dotfiles/.zsh ~/.zsh
~$ ln -s dotfiles/.zshrc ~/.zshrc
~$ ln -s dotfiles/.gitconfig ~/.gitconfig
~$ ln -s dotfiles/.p10k_console.zsh ~/.p10k_console.zsh
~$ ln -s dotfiles/.p10k.zsh ~/.p10k.zsh
~$ ln -s dotfiles/.xinitrc ~/.xinitrc
~$ ln -s dotfiles/XCompose/.XCompose ~/.XCompose
~$ ln -s dotfiles/bin ~/bin
Shell
Es gibt viele Kommandozeilen-Shells, etwa
Bash, Zsh,
KornShell und
Fish. Die installierten Shells listet chsh -l auf.
Zsh benutze ich seit Jahren. Es ist POSIX-konform und wird mit ein paar Plugins (PowerLevel10k usw.) ausgesprochen komfortabel; mein Dotfile installiert und konfiguriert sie automatisch über zplug.
Ich habe meinen Benutzer mit dem Parameter -s /bin/zsh angelegt; die Standard-Shell lässt sich
aber auch mit chsh -s full-path-to-shell wechseln.
Terminal-Emulatoren
Für Linux gibt es viele Terminal-Emulatoren, jeder mit eigenen Vor- und Nachteilen.
Früher habe ich urxvt benutzt, weil Startzeit und Speicherverbrauch für mich die wichtigsten Kriterien waren. Jetzt, mit leistungsfähigeren Rechnern, zählen andere Dinge:
- Plattformübergreifend (zumindest Linux und macOS)
- Unicode
- Truecolor
- Ligatures
- Tabs
- GPU accelerated
- Gute Dokumentation
Von allen, die ich getestet habe, kann Kitty am meisten. Perfekt ist es leider nicht: es hat Phone-Home-Funktionen, benutzt ein eigenes terminfo, das Probleme macht, und der Entwickler verhält sich häufig ausgesprochen unhöflich.
Alacritty ist gut, hat aber keine Tabs — und bekommt sie vielleicht nie.
Terminal-Multiplexer
Terminal-Emulatoren wie Kitty können ein Fenster in mehrere Terminals teilen; die meisten Terminal-Multiplexer können das und noch viel mehr — etwa eine Sitzung weiterlaufen lassen, nachdem das Terminal geschlossen wurde.
Einige, die ich benutzt habe:
- GNU Screen
- Am schlichtesten und in vielen Distributionen schon installiert.
- Tmux
- Umfangreicher als Screen.
- Projekte wie .tmux machen es deutlich hübscher und bequemer.
- Weitere Projekte: https://github.com/rothgar/awesome-tmux
- Byobu
- Eine Schicht über Screen oder Tmux. Ich mag es sehr, aber das Projekt wurde im Februar 2020 eingestellt.
- Zellij
- Mein aktueller Favorit. Ein junges Projekt (2020 hieß es noch Mosaic), in Rust geschrieben und mit vielen interessanten Funktionen.
Yay
Yay ist ein in Go geschriebener AUR-Helper bzw. Pacman-Wrapper, der die Paketinstallation deutlich erleichtert.
$ git clone https://aur.archlinux.org/yay.git && \
cd yay && \
makepkg -sri && \
cd .. && \
rm -rf yay
Ein paar zusätzliche Pakete, die ich installiere: das Terminal Kitty, der Bildeditor Gimp, VS Code und diverse Hilfsprogramme:
$ yay -S \
ack \
aws-cli-v2-bin \
bleachbit \
bluez \
bluez-utils \
calibre \
chromium \
code \
ctags \
dbeaver \
digikam \
discord \
docker-compose \
duf \
dust \
fcitx5-chinese-addons \
fcitx5-im \
ffmpeg \
firefox \
gimp \
gitahead \
goldendict \
gparted \
htop \
hugo \
imagemagick \
insomnia-bin \
jq \
kitty \
lens-bin \
libreoffice-fresh \
make \
meld \
neofetch \
nerd-fonts-hack \
noto-fonts-emoji \
npm \
ntfs-3g \
oath-toolkit \
obs-studio \
okular \
openssh \
p7zip \
polkit \
qalculate-gtk \
renameutils \
rsync \
rust-analyzer \
slack-desktop \
spotify \
sshfs \
telegram-desktop \
texlive-core \
texlive-latexextra \
thunderbird \
transmission-remote-gtk \
tree \
ttf-joypixels \
usbutils \
veracrypt \
vlc \
wget \
xclip \
xorg-xrandr \
# audacity \
# awesome-git \
# aws-cli \
# blueman \
# byobu \
# copyq \
# feh \
# gnome-keyring \
# graphviz \
# hdparm \
# ibus \
# ibus-libpinyin \
# kdenlive \
# light-git \
# macchanger \
# maim \
# picom-git \
# postman-bin \
# redshift \
# rofi-git \
# sshpass \
# teams \
# unrar \
# unzip
Firewall
sudo pacman -S nftables
sudo systemctl enable nftables.service
sudo nft list ruleset
Schriftarten
Installiere die Schriften aus dem offiziellen Repository oder aus dem AUR:
$ yay -S \
inter-font \
nerd-fonts-fantasque-sans-mono \
noto-fonts \
noto-fonts-cjk \
noto-fonts-emoji \
otf-san-francisco \
otf-sfmono-patched \
ttf-dejavu \
ttf-liberation \
ttf-meslo-nerd-font-powerlevel10k
Manuelle Installation
Schriften, die es nicht als Paket gibt, lassen sich von Hand installieren. Du legst die Dateien
einfach in einen Unterordner von /usr/local/share/fonts (für alle Benutzer) oder
~/.local/share/fonts/ (nur für dich).
Beispiel:
sudo mkdir -p /usr/local/share/fonts/{otf,ttf}
wget http://www.exljbris.com/dl/fontin2_pc.zip
sudo 7z x fontin2_pc.zip -o/usr/local/share/fonts/ttf/Fontin
sudo find /usr/local/share/fonts -type d -exec chmod 755 {} \;
sudo find /usr/local/share/fonts -type f -exec chmod 644 {} \;
$ tree /usr/local/share/fonts
/usr/local/share/fonts
├── otf
│ └── Example_Sans
│ ├── Example_Sans_B.otf
│ ├── Example_Sans_BI.otf
│ ├── Example_Sans_I.otf
│ └── Example_Sans_R.otf
└── ttf
└── Fontin
├── Fontin-Bold.ttf
├── Fontin-Italic.ttf
├── Fontin-Regular.ttf
├── Fontin-SmallCaps.ttf
└── ReadMe.txt
fc-cache
fc-list
…
Willst du bestimmte Schriften
festlegen, bearbeite die Datei $XDG_CONFIG_HOME/fontconfig/fonts.conf.
Windows-Schriften
Die Schriften bekommst du aus dem ISO oder aus dem Ordner C:\Windows\Fonts eines installierten
Windows.
Kopiere die Schriften nach /usr/share/fonts/WindowsFonts:
sudo mkdir /usr/share/fonts/WindowsFonts
sudo cp /c/Windows/Fonts/* /usr/share/fonts/WindowsFonts/
sudo chmod 644 /usr/share/fonts/WindowsFonts/*
Alternativ nimmst du ein Paket wie ttf-ms-win10 oder ttf-ms-win11.
git clone https://aur.archlinux.org/ttf-ms-win11
cd ttf-ms-win11
cp /c/Windows/System32/Licenses/neutral/_Default/Core/license.rtf .
cp /c/Windows/Fonts/* .
makepkg -si
Tastaturen
Die Tastatur meines Notebooks ist ABNT2, manchmal schließe ich aber Tastaturen mit anderen Layouts an.
Jede Tastatur lässt sich über die Device-ID einzeln einrichten, oder man wechselt zwischen vorbereiteten Profilen.
Ermittle die Device-ID der Tastatur
sudo pacman -S xorg-xinput$ xinput -list | grep -i Keychron ⎜ ↳ Keychron Keychron K2 id=11 [slave pointer (2)] ↳ Keychron Keychron K2 id=10 [slave keyboard (3)] ↳ Keychron Keychron K2 id=19 [slave keyboard (3)]$ xinput list-props 10 Device 'Keychron Keychron K2': Device Enabled (189): 1 Device Node (313): "/dev/input/event5"$ ls -l /dev/input/by-id/usb-Keychron* … /dev/input/by-id/usb-Keychron_Keychron_K2-event-if01 -> ../event6 … /dev/input/by-id/usb-Keychron_Keychron_K2-event-kbd -> ../event5Richte sie mit
setxkbmapein$ setxkbmap -device `xinput -list | \ grep "Keychron K2.*keyboard" | \ sed -e 's/^.*id=\([0-9]\+\).*/\1/' | \ head -1` \ -layout us \ -variant intl \ -option lv3:ralt_switch \ -option compose:rctrl \ -option caps:swapescapeDie passende Konfiguration findest du über
localectl list-x11-keymap-layouts,localectl list-x11-keymap-variants us,localectl list-x11-keymap-optionsund die Datei/usr/share/X11/xkb/rules/base.lst.Mein Beispiel tauscht Feststelltaste und Esc, macht die rechte Strg-Taste zur Compose-Taste (Multi_Key) und die rechte Alt-Taste zur Ebene-3-Taste.
Führe den Befehl beim Systemstart aus
$ nvim ~/bin/keyboards.sh #!/bin/sh # Notebook keyboard keyboard_id=$( xinput -list | grep "AT Translated Set 2 keyboard.*keyboard" | sed -e 's/^.*id=\([0-9]\+\).*/\1/' | head -1 ) if [ ! -z "$keyboard_id" ]; then setxkbmap -device $keyboard_id \ -layout br \ -option lv3:ralt_switch \ -option compose:menu \ -option caps:swapescape fi # Keychron K2 keyboard_id=$( xinput -list | grep "Keychron K2.*keyboard" | sed -e 's/^.*id=\([0-9]\+\).*/\1/' | head -1 ) if [ ! -z "$keyboard_id" ]; then setxkbmap -device $keyboard_id \ -layout us \ -variant intl \ -option lv3:ralt_switch \ -option compose:rctrl \ -option caps:swapescape fi$ nvim ~/.config/autostart/keyboards.sh.desktop [Desktop Entry] Exec=/home/julio/bin/keyboards.sh Icon=dialog-scripts Name=keyboards.sh Path= Type=Application X-KDE-AutostartScript=trueCompose: C-Cedille
Im Layout
US International with Dead Keysbekommst duçmitAltGr + ,; ich nehme aber lieber´ + codercompose + c.Lege eine
~/.XCompose(oder~/.config/ibus/Compose) auf Basis von/usr/share/X11/locale/en_US.UTF-8/Composean:# UTF-8 (Unicode) compose sequence include "%L" <Multi_key> <c> : "ç" ccedilla <Multi_key> <C> : "Ç" Ccedilla <dead_acute> <c> : "ç" ccedilla <dead_acute> <C> : "Ç" Ccedilla <Multi_key> <t> <o> <w> <e> <r> : "🗼"
Ostasiatische Schriftzeichen
Zeichen, die deine Tastatur nicht hergibt, tippst du über ein Input Method Framework wie IBUS oder Fcitx5.
Ich zeige, wie man mit ibus-libpinyin und fcitx5-chinese-addons Chinesisch tippt. Für andere
Sprachen und andere IMEs (Input Method Editors) läuft die Einrichtung ähnlich.
IBUS
IBus (Intelligent Input Bus) ist weit verbreitet und in GNOME sogar fest integriert, funktioniert aber auch mit anderen Desktop-Umgebungen gut.
Installiere IBus
sudo pacman -S ibus ibus-libpinyinSetze die folgenden Umgebungsvariablen:
sudo nvim /etc/environment GTK_IM_MODULE=ibus QT_IM_MODULE=ibus XMODIFIERS=@im=ibus GLFW_IM_MODULE=ibusRichte IBus so ein, dass es mit der Desktop-Umgebung startet
$ nvim ~/.config/autostart/ibus-daemon.desktop [Desktop Entry] Comment=IBus Daemon #Exec=ibus-daemon -drx --panel=/usr/lib/kimpanel-ibus-panel Exec=ibus-daemon -drx GenericName=IBus Daemon Icon=ibus-engine Name=IBus Daemon StartupNotify=true Terminal=true Type=Application X-KDE-SubstituteUID=falseKDE hat ein Widget namens Input Method Panel, ich benutze aber lieber das Standardpanel von IBus.
Konfiguriere IBus
ibus-setupWähle unter Input Method Portuguese (Brazil), Chinese-Intelligent Pinyin und English (US, intl., with dead keys).
Lege unter General das Kürzel
<Super>spacefest, um zwischen den Eingabemethoden zu wechseln.Setz unter Advanced den Haken, das Systemlayout zu benutzen, damit IBus das mit
setxkbmapgesetzte Layout nicht überschreibt.Passe die Farbe des Panels an deine Taskleiste an
gsettings set org.freedesktop.ibus.panel xkb-icon-rgba '#ffffff'
Fcitx5
Fcitx (Flexible Context-aware Input Tool with eXtension support) ist das Input Method Framework, das ich benutze.
Es ist sehr flexibel, bringt viele Funktionen mit und fügt sich gut in KDE ein.
Installiere Fcitx5
sudo pacman -S fcitx5-im fcitx5-chinese-addonsSetze die folgenden Umgebungsvariablen:
sudo nvim /etc/environment GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx DefaultIMModule=fcitx SDL_IM_MODULE=fcitx GLFW_IM_MODULE=ibusDie letzte Zeile ist für Kitty. Sie bleibt tatsächlich auf ibus.
Richte Fcitx5 so ein, dass es mit der Desktop-Umgebung startet
$ nvim ~/.config/autostart/fcitx5.desktop [Desktop Entry] Name=Fcitx5 GenericName=Fcitx5 Input Method Comment=Start Fcitx5 Exec=fcitx5 Icon=fcitx Terminal=false Type=Application Categories=System;Utility; StartupNotify=false X-GNOME-Autostart-Phase=Applications X-GNOME-AutoRestart=false X-GNOME-Autostart-Notify=false X-KDE-autostart-after=panel X-KDE-StartupNotify=false X-GNOME-Autostart-enabled=trueKonfiguriere Fcitx5
Ich empfehle die Einrichtung über die grafische Oberfläche
fcitx5-configtool(in KDE ist sie in die Systemeinstellungen unterSystem Settings » Personalization » Regional Settings » Input Methodeingebettet).In meinen Tests wurden von Hand bearbeitete Dateien am Ende von den Werten der grafischen Oberfläche überschrieben.
Config
$ nvim ~/.config/fcitx5/config [Hotkey/TriggerKeys] 0=Super+space [Behavior/DisabledAddons] 0=cloudpinyin 1=wayland 2=waylandimLayouts
$ nvim ~/.config/fcitx5/profile [Groups/0] # Group Name Name="Group 1" # Layout Default Layout=us-intl # Default Input Method DefaultIM=keyboard-us-intl [Groups/0/Items/0] # Name Name=keyboard-us-intl # Layout Layout= [Groups/0/Items/1] # Name Name=pinyin # Layout Layout= [GroupOrder] 0="Group 1"Hinweis: der letzte Eintrag im
configtoolwird zumDefaultIM.XCB
$ nvim ~/.config/fcitx5/conf/xcb.conf Allow Overriding System XKB Settings=FalseUI
pacman -S fcitx5-material-color fcitx5-nord$ nvim ~/.config/fcitx5/conf/classicui.conf # Use Per Screen DPI PerScreenDPI=False # Font Font="Noto Sans Black 10" # Menu Font MenuFont="Sans 10" # Theme Theme=Material-Color-BlueCloud Pinyin
$ nvim ~/.config/fcitx5/conf/pinyin.conf CloudPinyinEnabled=False
Keychron-Tastatur
Damit die Tasten F1 bis F12 richtig funktionieren:
sudo nvim /etc/modprobe.d/hid_apple.conf
options hid_apple fnmode=2
sudo mkinitcpio -P
XDG user directories
Installiere xdg-user-dirs, um die Ordner anzulegen.
sudo pacman -S xdg-user-dirs
$ xdg-user-dirs-update --force
Energieverwaltung
Es gibt viele Werkzeuge zur Energieverwaltung. Ich benutze diese:
sudo pacman -S tlp acpid acpi_call upower xfce4-power-manager
sudo systemctl enable tlp.service
sudo systemctl enable acpid.service
Bluetooth
Starte nach der Installation von bluez den bluetooth.service:
sudo systemctl start bluetooth.service
Die Bluez-Konfiguration liegt in /etc/bluetooth/main.conf. Ich benutze die Standardwerte.
Die meisten Desktop-Umgebungen bringen eine Oberfläche fürs Verbinden mit, etwa Bluedevil in KDE;
ich installiere aber gern zusätzlich bluez-utils, um Bluetooth-Geräte über die Kommandozeile mit
bluetoothctl zu verbinden.
Beispiel: zwei Tastaturen und ein Kopfhörer werden verbunden:
$ bluetoothctl
Agent registered
[bluetooth]# power on
[CHG] Controller 8C:8D:28:F7:3A:77 Class: 0x007c010c
Changing power on succeeded
[CHG] Controller 8C:8D:28:F7:3A:77 Powered: yes
[bluetooth]# scan on
Discovery started
[CHG] Controller 8C:8D:28:F7:3A:77 Discovering: yes
[NEW] Device 20:20:01:07:B1:89 Bluetooth 3.0 Keyboard
[NEW] Device DC:2C:26:FF:24:BD Keychron K2
[NEW] Device 60:F4:3A:12:8E:02 EDIFIER W800BT
[bluetooth]# pair 20:20:01:07:B1:89
Attempting to pair with 20:20:01:07:B1:89
[CHG] Device 20:20:01:07:B1:89 Connected: yes
[agent] PIN code: 428084
[CHG] Device 20:20:01:07:B1:89 Modalias: usb:v04E8p7021d011B
[CHG] Device 20:20:01:07:B1:89 UUIDs: …
[CHG] Device 20:20:01:07:B1:89 ServicesResolved: yes
[CHG] Device 20:20:01:07:B1:89 Paired: yes
Pairing successful
[bluetooth]# trust 20:20:01:07:B1:89
[CHG] Device 20:20:01:07:B1:89 Trusted: yes
Changing 20:20:01:07:B1:89 trust succeeded
[bluetooth]# connect 20:20:01:07:B1:89
Attempting to connect to 20:20:01:07:B1:89
[CHG] Device 20:20:01:07:B1:89 Connected: yes
Connection successful
[Bluetooth 3.0 Keyboard]# pair 60:F4:3A:12:8E:02
Attempting to pair with 60:F4:3A:12:8E:02
[CHG] Device 60:F4:3A:12:8E:02 Connected: yes
[CHG] Device 60:F4:3A:12:8E:02 UUIDs: …
[CHG] Device 60:F4:3A:12:8E:02 ServicesResolved: yes
[CHG] Device 60:F4:3A:12:8E:02 Paired: yes
Pairing successful
[Bluetooth 3.0 Keyboard]# trust 60:F4:3A:12:8E:02
[CHG] Device 60:F4:3A:12:8E:02 Trusted: yes
Changing 60:F4:3A:12:8E:02 trust succeeded
[Bluetooth 3.0 Keyboard]# connect 60:F4:3A:12:8E:02
Attempting to connect to 60:F4:3A:12:8E:02
Connection successful
[EDIFIER W800BT]# pair DC:2C:26:FF:24:BD
Attempting to pair with DC:2C:26:FF:24:BD
[CHG] Device DC:2C:26:FF:24:BD Connected: yes
[CHG] Device DC:2C:26:FF:24:BD Modalias: usb:v05ACp024Fd011B
[CHG] Device DC:2C:26:FF:24:BD UUIDs: 00001000-0000-1000-8000-00805f9b34fb
[CHG] Device DC:2C:26:FF:24:BD UUIDs: 00001124-0000-1000-8000-00805f9b34fb
[CHG] Device DC:2C:26:FF:24:BD UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device DC:2C:26:FF:24:BD ServicesResolved: yes
[CHG] Device DC:2C:26:FF:24:BD Paired: yes
Pairing successful
[CHG] Device DC:2C:26:FF:24:BD WakeAllowed: yes
[CHG] Device DC:2C:26:FF:24:BD ServicesResolved: no
[CHG] Device DC:2C:26:FF:24:BD Connected: no
[EDIFIER W800BT]# trust DC:2C:26:FF:24:BD
[CHG] Device DC:2C:26:FF:24:BD Trusted: yes
Changing DC:2C:26:FF:24:BD trust succeeded
[EDIFIER W800BT]# connect DC:2C:26:FF:24:BD
Attempting to connect to DC:2C:26:FF:24:BD
[CHG] Device DC:2C:26:FF:24:BD Connected: yes
Connection successful
[Keychron K2]# paired-devices
Device 60:F4:3A:12:8E:02 EDIFIER W800BT
Device 20:20:01:07:B1:89 Bluetooth 3.0 Keyboard
Device DC:2C:26:FF:24:BD Keychron K2
[Keychron K2]# quit
Tipp: Mit FN+Z+J setzt du die Keychron-Tastatur zurück und legst die Verbindungen neu fest.
asdf
asdf hat Plugins für so gut wie alles. Es ersetzt pyenv, rbenv, goenv und
nvm — es gibt sogar ein Plugin, um verschiedene Poetry-Versionen zu verwalten.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.3
Benutze das oh-my-zsh-Plugin, um es zu aktivieren und die Vervollständigungen zu ergänzen.
pacman -S --needed base-devel openssl zlib xz tkasdf plugin add python asdf install python latest:3 asdf global python latestasdf install python latest:3.10 asdf local python latest:3.10 asdf uninstall python <python-version>Ruby
asdf plugin add ruby asdf install ruby latest asdf local ruby latestGo
asdf plugin add golang asdf install golang latest asdf global golang latestNode.js
asdf plugin add nodejs asdf install nodejs latest
Die globalen Versionen stehen in der Datei ~/.tool-versions.
Python
Meine erste Begegnung mit Python liegt über 10 Jahre zurück; heute ist es nicht nur meine Lieblingssprache, sondern auch die, die ich beruflich und für eigene Projekte am meisten benutze.
Das Zen of Python sagt:
“There should be one– and preferably only one –obvious way to do it.”
Für Code stimmt das, beim Packaging sieht die Sache aber ganz anders aus. Meine Gefühlslage beschreibt diese Reihe von xkcd-Comics recht gut: xkcd 353, xkcd 927, xkcd 1987.

xkcd 927
Meine derzeitigen Vorlieben, der Reihe nach:
Zum Verwalten verschiedener Python-Versionen: asdf oder Pyenv.
Zum Verwalten virtueller Umgebungen, Steuern von Abhängigkeiten und Veröffentlichen von Paketen: PDM oder Poetry.
Für komplexere Machine-Learning-Fälle oder Projekte, die Pakete und Binärdateien brauchen, die es nicht auf pypi gibt: Mambaforge.
IDE: VSCode mit der offiziellen Erweiterung oder PyCharm.
Das Problem bei PyCharm: einige wichtige Funktionen (Framework-Anbindung, SQL-Bearbeitung, Docker-Anbindung usw.) kosten Geld.
Pyenv
Mit Pyenv installierst und benutzt du verschiedene Python-Versionen.
Es ist wie asdf, aber nur für Python. Wenn du asdf ohnehin für andere Sprachen benutzt, lohnt sich Pyenv vermutlich nicht.
Installiere Pyenv:
sudo pacman -S pyenvInstalliere optional auch pyenv-virtualenv:
yay -S pyenv-virtualenvErgänze
~/.zshrcum die folgenden Zeilen:if (( $+commands[pyenv] )); then eval "$(pyenv init --path)"; fi if (( $+commands[pyenv-virtualenv-init] )); then eval "$(pyenv virtualenv-init -)"; fiSieh nach, welche Versionen es gibt, und installiere die, die du brauchst:
pyenv install --list pyenv install 3.8.12 pyenv install mambaforgeListe die installierten Versionen auf
pyenv versionsLege im Ordner eines Projekts die zu benutzende Version fest
pyenv local 3.8.12Dabei entsteht eine Datei namens
.python-version:$ cat .python-version 3.8.12
Poetry
Update: Abschnitt auf Version 1.2 aktualisiert.
Installiere Poetry
Für Poetry nehme ich lieber nicht die Paketverwaltung des Systems; es gibt gute Alternativen:
Skript:
wget -O install-poetry.py https://install.python-poetry.org python install-poetry.py --previewHinweis: der alte Installer (
get-poetry.py) wurde durchinstall-poetry.pyersetzt. Gib den Parameter--previewnicht an, wenn du die neueste stabile Version willst.asdf:
asdf plugin add poetry asdf install poetry latest asdf global poetry latestpipx:
pipx install poetry
Nimm es in den PATH auf
Der alte Installer benutzte
$HOME/.poetry/bin, der neue$HOME/.local/bin.Mit meiner Funktion in der
.zshrc:addToPathStart $HOME/.local/binInstalliere die Vervollständigungen
poetry completions zsh > ~/.zprezto/modules/completion/external/src/_poetryDer Befehl oben rührt daher, dass ich Prezto benutze. Wichtig ist nur, in einen Ordner zu installieren, der im
$fpathsteht.Lege ein neues Projekt an
poetry new meu-projeto cd meu-projetoLege die Python-Version über Pyenv oder asdf fest
pyenv local 3.8.12ou
asdf local 3.8.12$ nvim pyproject.toml … [tool.poetry.dependencies] python = "^3.8" …poetry env use -- /home/julio/.pyenv/versions/3.10.3/bin/pythonou
poetry env use -- /home/julio/.asdf/installs/python/3.10.3/bin/pythonpoetry run python --version poetry debug infoFüge die Abhängigkeiten hinzu
Entwicklungsabhängigkeiten gibst du mit
--devan.$ poetry add --group dev \ bandit \ black \ codecov \ coverage \ flake8 \ gitchangelog \ isort \ mkdocs \ mypy \ pydocstyle \ pytest \ pytest-covpoetry add typer\[all\]Aktualisiere Poetry
poetry self updateDenk daran, die Vervollständigungen neu zu erzeugen.
Installiere poetry-plugin-up
poetry self add poetry-plugin-up poetry up --latestDieses Plugin hebt die Pakete in
pyproject.tomlauf die neueste Version.
Bleibt Poetry bei “Resolving dependencies” hängen, probier Folgendes:
find ~/.cache/pypoetry -name '*.lock' -type f -delete
poetry env remove --all
poetry cache clear --all .
rm -rf $(poetry config cache-dir)/artifacts
Mambaforge
Mambaforge verbindet Mamba und Conda-Forge.
Mamba ist eine Neuimplementierung der Paketverwaltung Conda in C++. Es löst Abhängigkeiten sehr schnell auf und lädt parallel herunter.
Der Conda-Forge-Kanal enthält von der Community geschriebene Recipes für Conda. Er hat weit mehr Pakete als das offizielle Conda-Repository.
Wenn du Pyenv nicht benutzen willst, kannst du Mambaforge von Hand installieren:
wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh bash Mambaforge-Linux-x86_64.shAktualisiere die Basispakete
mamba update mamba mamba update --allLege eine virtuelle Umgebung an und aktiviere sie
mamba create -n nome_do_env python=3.10 jupyterlab … conda activate nome_do_envInstalliere ein paar zusätzliche Pakete
$ mamba install \ azure-identity \ bandit \ black \ bokeh \ dask \ flake8 \ ipywidgets \ isort \ jupyterlab_code_formatter \ kafka-python \ keras \ koalas \ matplotlib \ mypy \ numpy \ openpyxl \ pandas \ plotly \ pyarrow \ pycodestyle \ pydocstyle \ pylama \ pylint \ pyspark \ pytest \ python-graphviz \ python-wget \ scikit-learn \ seaborn \ sqlalchemy \ tenacity \ tensorflow \ unidecode \ xgboost
PDM
Wie Poetry ist PDM eine Paket- und Abhängigkeitsverwaltung.
Der Unterschied: es folgt den neuen PEPs (PEP 582, PEP 517 und PEP 621).
Du kannst ein virtualenv benutzen oder PEP 582 folgen und einen Ordner namens __pypackages__
nehmen. Er entspricht node_modules und wird dem sys.path hinzugefügt.
Installation
Über ein Skript:
curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3 -Über asdf:
asdf plugin add pdm asdf install pdm latest asdf local pdm latestVervollständigungen in ZSH
pdm completion zsh > ~/.zprezto/modules/completion/external/src/_pdm
Verwendung
Ein Projekt anlegen
pdm initAbhängigkeiten hinzufügen
pdm add requests flaskEntwicklungsabhängigkeiten hinzufügen
pdm add -dG dev jupyterlab jupyterlab-code-formatter black isort pylint mypyAbhängigkeiten entfernen
pdm remove flaskAbhängigkeiten auflisten
pdm list --graphDas Projekt installieren
pdm installAnhand der .lock-Datei installieren
pdm syncAbhängigkeiten aktualisieren
Alle Pakete
pdm updateEin bestimmtes Paket
pdm update <paket>Pakete einer Gruppe
pdm update -G <gruppe>Aktualisierung angepinnter Pakete erzwingen
pdm update --update-eager
Nicht aufgeführte Pakete entfernen
pdm sync --cleanEine Binärdatei in der Umgebung ausführen
pdm run jupyter lab
Aktualisierung
pdm self update
Rust
Für die Rust-Entwicklung wird rustup empfohlen; installieren lässt es sich auf zwei Wegen:
Offizielles Skript:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shPacman:
sudo pacman -S rustup rustup default stableUnter Arch ist das bequemer, da Rust und die davon abhängigen Pakete so stets aktuell bleiben.
Teste die Installation:
$ rustc --version
rustc 1.53.0 (53cb7b09b 2021-06-17)
$ cargo --version
cargo 1.53.0 (4369396ce 2021-04-27)
$ rustdoc --version
rustdoc 1.53.0 (53cb7b09b 2021-06-17)
$ cargo new hello
Created binary (application) `hello` package
$ cd hello
$ cargo run
Compiling hello v0.1.0 (/home/julio/hello)
Finished dev [unoptimized + debuginfo] target(s) in 0.43s
Running `target/debug/hello`
Hello, world!
Mein Neovim benutzt rust-analyzer als LSP-Server. Es genügt, die Binärdatei zu installieren:
sudo pacman -S rust-analyzer
Nvidia
Eines der Notebooks hat eine integrierte Intel-GPU und eine Nvidia GeForce RTX 2070 Max-Q. Letztere ist schneller als die Intel-GPU, braucht aber mehr Strom.
Du kannst eine der Karten dauerhaft abschalten oder mit Nvidia Optimus je nach Bedarf zwischen ihnen wechseln.
Installiere Treiber und Hilfsprogramme:
sudo pacman -S nvidia nvidia-utils nvidia-settings opencl-nvidia
Ein bestimmtes Programm auf der Nvidia ausführen
Für das sogenannte
PRIME render offload startest du das
Programm einfach mit prime-run. Zum Beispiel:
sudo pacman -S nvidia-prime
prime-run kdenlive
Nur die Nvidia-Karte benutzen
sudo nvim /etc/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
Section "OutputClass"
Identifier "intel"
MatchDriver "i915"
Driver "modesetting"
EndSection
Section "OutputClass"
Identifier "nvidia"
MatchDriver "nvidia-drm"
Driver "nvidia"
Option "AllowEmptyInitialConfiguration"
Option "PrimaryGPU" "yes"
ModulePath "/usr/lib/nvidia/xorg"
ModulePath "/usr/lib/xorg/modules"
EndSection
$ nvim ~/.xinitrc (ou /usr/share/sddm/scripts/Xsetup para o SDDM)
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
setxkbmap br -option caps:swapescape
Damit das Modul vor der grafischen Oberfläche geladen wird.
sudo nvim /etc/modprobe.d/nvidia-drm-nomodeset.conf
options nvidia-drm modeset=1
sudo nvim /etc/mkinitcpio.conf
MODULES=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)
sudo mkinitcpio -P
(Hinweis: Ist auf der /boot-Partition wenig Platz, kannst du das Erzeugen des Fallback-Images
abschalten, indem du die zugehörigen Zeilen in /etc/mkinitcpio.d/linux.preset auskommentierst.
Reicht das nicht, musst du die Partitionen anpassen.)
sudo systemctl reboot
nvidia-smi
sudo pacman -S virtualgl
glxspheres64
Tearing
Screen Tearing heißt, dass Teile verschiedener Einzelbilder gleichzeitig auf dem Bildschirm erscheinen.
Beim Ansehen von Videos auf dem per HDMI angeschlossenen Monitor war das deutlich sichtbar. Teste es mit dem Video https://youtu.be/MfL_JkcEFbE und der Seite https://www.vsynctester.com.
Browser-Einstellung
Prüfe, ob es etwas bringt,
layers.acceleration.force-enabledin Firefox’about:configzu aktivieren.Force composition
Diese Option kann die Latenz erhöhen, hat mein Problem aber gelöst.
Sieh dir die aktuellen Einstellungen an:
$ nvidia-settings --query CurrentMetaMode Attribute 'CurrentMetaMode' (Predator:0.0): id=50, switchable=yes, source=RandR :: DPY-2: nvidia-auto-select @1920x1080 +1920+0 {ViewPortIn=1920x1080, ViewPortOut=1920x1080+0+0}Aktiviere
ForceCompositionPipeline(oderForceFullCompositionPipeline):nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +1920+0 { ForceCompositionPipeline = On }"Der Versatz
+1920+0rührt daher, dass das Notebook-Display Full HD ist und links vom externen Monitor steht.Sieh dir die neuen Einstellungen an:
$ nvidia-settings --query CurrentMetaMode Attribute 'CurrentMetaMode' (Predator:0.0): id=50, switchable=no, source=nv-control :: DPY-2: nvidia-auto-select @1920x1080 +1920+0 {ViewPortIn=1920x1080, ViewPortOut=1920x1080+0+0, ForceCompositionPipeline=On}Trag diesen Befehl in eine Datei ein, die beim Start ausgeführt wird, etwa
autostart,xinitoderXsetup.~/bin/nvidia-force_comp_pipeline.sh:#!/bin/sh s="$(nvidia-settings -q CurrentMetaMode -t)" echo "$s" if [[ "${s}" != "" ]]; then s="${s#*" :: "}" echo "$s" if [[ "${s}" != "NULL" ]]; then nvidia-settings -a CurrentMetaMode="${s//\}/, ForceCompositionPipeline=On\}}" fi fi/usr/share/sddm/scripts/Xsetup:#!/bin/sh # Xsetup - run as root before the login dialog appears # Keyboards kb_script="/home/julio/bin/keyboards.sh" [ -s "$kb_script" ] && \. "$kb_script" # Nvidia xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto # Force Composition Pipeline nfcp_script="/home/julio/bin/nvidia-force_comp_pipeline.sh" [ -s "$nfcp_script" ] && \. "$nfcp_script"Sind deine Monitore fest, kannst du
/etc/X11/xorg.conf.d/20-nvidia.confbenutzen:Section "Screen" … Option "MetaModes" "nvidia-auto-select +0+0 {ForceFullCompositionPipeline=On}" … EndSection
Fenstermanager und Desktop-Umgebungen
Awesome
Für AwesomeWM mag ich die Konfiguration von Gerome Matilla. Sie ist etwas aufgebläht, aber die Layouts sind schön und haben interessante Funktionen.
KDE
KDE Plasma ist eine sehr gute Desktop-Umgebung, deren Standardeinstellungen mir gut gefallen.
Auf meinen alten Rechnern habe ich KDE gemieden, weil es nicht leichtgewichtig genug war; mit meiner heutigen Hardware ist das kein großes Problem mehr.
Ich empfehle, die folgenden Pakete zu installieren:
sudo pacman -S ark \
dolphin \
gwenview \
packagekit-qt5 \
plasma-browser-integration \
sddm \
spectacle
Feststelltaste und ESC tauschst du unter
System Settings » Keyboard » Advanced » Caps Lock behavior » Swap Esc and Caps Lock.
Installiere kdeconnect auf dem Rechner und auf Android-Geräten, um Benachrichtigungen
abzugleichen, Dateien und die Zwischenablage zu teilen, das Android-Gerät als Maus und Tastatur zu
benutzen und vieles mehr.
Probier die Optionen OpenGL und XRender unter
System Settings » Hardware » Display and Monitor » Compositor » Rendering backend aus. OpenGL ist
vermutlich die bessere Wahl, ich habe aber von Problemen mit Nvidia-Karten gelesen.
Willst du die Mediensteuerung nicht im Sperrbildschirm sehen, führe den folgenden Befehl aus:
kwriteconfig5 --file kscreenlockerrc --group Greeter --group LnF --group General --key showMediaControls --type bool false
Sind die Schriften zu groß, erzwing den DPI-Wert unter
System Settings » Fonts » Force font DPI: 96.
Tiling in KDE: Kröhnkite
Verschiebe die Taskleiste an den oberen Bildschirmrand;
Verkleinere die Leiste (ich habe 30 genommen);
Klick mit der rechten Maustaste auf die Taskleiste, wähle Show Alternatives und dann “Icons-only Task Manager”;
Rechtsklick auf den Pager » Configure Pager
- Show application icons on window outlines
- Text display: Desktop number
System Settings » Workspace » Window Management » KWin Scripts » Get New Scripts…
Aktiviere die Kröhnkite-Einstellungen
mkdir -p ~/.local/share/kservices5/ ln -s ~/.local/share/kwin/scripts/krohnkite/metadata.desktop ~/.local/share/kservices5/krohnkite.desktopIm Fenster KWin Scripts erscheint eine Schaltfläche zum Konfigurieren von Kröhnkite. Dort mache ich Folgendes:
- Das Quarter layout aktivieren
- Gaps between tiles: 3 px
- Prevent windows from minimizing
Remove borders of tiled windows
System Settings » Appearance » Window Decorations » Edit Theme » Window-Specific Overrides » Add
- Regular expression to match:
.* - Border size: Tiny
- Hide window title bar
- Regular expression to match:
Geh auf System Settings » Workspace » Workspace Behavior » Virtual Desktops und lege so viele Arbeitsflächen an, wie du magst (ich habe 8, in zwei Reihen);
System Settings » Workspace » Workspace Behavior » Desktop Effects » Focus » Dim Inactive;
System Settings » Workspace » Window Management » Window Behavior » Focus » Multiscreen behavior: Separate screen focus;
Farbe der Ränder
kwriteconfig5 --file ~/.config/kdeglobals --group WM --key frame 61,174,233 kwriteconfig5 --file ~/.config/kdeglobals --group WM --key inactiveFrame 239,240,241Die Mindestgröße der Fenster entfernen
- System Settings » Workspace » Window Management » Window Rules
- Add New…
- Window class: Unimportant
- Window types: Normal Window
- Add Properties…
- Minimum Size: Force 0 x 0
Ändere die Kürzel unter System Settings » Workspace » Shortcuts » KRunner
- KRunner:
Meta + R
- KRunner:
Ändere die Kürzel unter System Settings » Workspace » Shortcuts » KWin
- Switch to Desktop n:
Meta + n - Switch to Previous Screen:
Meta + , - Switch to Next Screen:
Meta + . - Window to Desktop n:
Meta+Shift+Fn(ich benutzeMeta + F1,…,F8, weilMeta+Shift+6mit einer US-intl.-Tastatur nicht funktioniert) - Window to Previous Screen:
Meta + < - Window to Next Screen:
Meta + > - Krohnkite: Float All:
Meta+Shift+F - Krohnkite: Right: Meta+L (zum Sperren des Bildschirms
ctrl+alt+Lbenutzen)
- Switch to Desktop n:
Anbindung an Android
Auf MTP-Geräte kann immer nur ein Programm zugreifen.
Um ein Tablet mit Calibre abzugleichen, darf KDE das Gerät nicht schon eingehängt haben.
Beende den Prozess kiod5.
Gnome
Gnome ist eine vollständige und weit verbreitete Desktop-Umgebung. Die Standardeinstellungen mag ich nicht besonders, aber nach ein paar schnellen Anpassungen lässt es sich gut benutzen:
sudo pacman -S gnome gnome-tweaks gnome-shell-extension-appindicator evolution
sudo systemctl enable gdm
dconf write /org/gnome/desktop/input-sources/xkb-options "['caps:swapescape']"
Aktiviere über Tweaks die App-Indicator-Erweiterung sowie die Schaltflächen zum Minimieren und Maximieren.
Installiere Pipewire, damit die Bildschirmfreigabe unter Wayland funktioniert:
sudo pacman -S pipewire xdg-desktop-portal-gtk
Wine
- Installiere einige der folgenden Pakete (nicht alle sind nötig)
$ sudo pacman -S \
wine-staging \
wine-gecko \
wine-mono \
winetricks \
zenity \
playonlinux
$ sudo pacman -S \
giflib \
lib32-giflib \
libpng \
lib32-libpng \
libldap \
lib32-libldap \
gnutls \
lib32-gnutls \
mpg123 \
lib32-mpg123 \
openal \
lib32-openal \
v4l-utils \
lib32-v4l-utils \
libpulse \
lib32-libpulse \
alsa-plugins \
lib32-alsa-plugins \
alsa-lib \
lib32-alsa-lib \
libjpeg-turbo \
lib32-libjpeg-turbo \
libxcomposite \
lib32-libxcomposite \
libxinerama \
lib32-libxinerama \
ncurses \
lib32-ncurses \
opencl-icd-loader \
lib32-opencl-icd-loader \
libxslt \
lib32-libxslt \
libva \
lib32-libva \
gtk3 \
lib32-gtk3 \
gst-plugins-base-libs \
lib32-gst-plugins-base-libs \
vulkan-icd-loader \
lib32-vulkan-icd-loader \
cups \
samba \
dosbox
Installiere die Windows-Schriften wie oben beschrieben
Führe
winetricksausIst
zenityinstalliert, erscheint eine grafische Oberfläche, die beim Anlegen von Prefixes, beim Installieren von Abhängigkeiten und beim Installieren und Entfernen von Programmen hilft.Die Prefixes landen in
~/.local/share/wineprefixes/.Ruf ein Programm über die Kommandozeile auf
WINEPREFIX="~/.local/share/wineprefixes/nome_prefixo" wine ~/.local/share/wineprefixes/nome_prefixo/drive_c/Programa.exe
VPNs
Die meisten VPNs bringen einen eigenen Installer mit (der oft schon im AUR liegt).
Nimm nach Möglichkeit WireGuard statt OpenVPN.
Links
- https://wiki.archlinux.org/title/NVIDIA
- https://wiki.archlinux.org/title/NVIDIA_Optimus
- https://wiki.archlinux.org/title/PRIME
- https://www.dell.com/community/Laptops-General-Read-Only/Dell-M-2-FAQ-regarding-AHCI-vs-RAID-ON-Storage-Drivers-M-2-Lanes/m-p/5072571/highlight/true#M903278
- https://jeffreytse.net/computer/2020/11/19/how-to-use-fcitx5-elegantly-on-arch-linux.html
- https://wiki.archlinux.org/title/Private_Internet_Access

Ich bin ein brasilianischer Computeringenieur mit Wohnsitz in Deutschland und begeistere mich für Technik, Wissenschaft, Fotografie und Sprachen.
Ich programmiere seit etwa zwei Jahrzehnten und habe dabei alles von mobilen Apps und Webentwicklung bis hin zu Machine Learning erkundet. Derzeit fokussiere ich mich auf Cloud‑SRE und Data Engineering.
Ich engagiere mich ehrenamtlich in den Open‑Source- und Python‑Communities, helfe bei der Organisation der PyCon DE und PyData Berlin, betreue als Mentor und trage mit Code und Übersetzungen bei.
In meinem Blog teile ich Linux‑Tipps, Einrichtungsanleitungen und persönliche Notizen, die ich als spätere Referenz geschrieben habe. Ich hoffe, dass sie auch anderen nützlich sind. Die Inhalte sind in mehreren Sprachen verfügbar.
Schau dir meine Galerie an, um einige meiner Fotografien zu sehen.
Abseits der Tastatur findest du mich auf Konzerten, beim Klarinettenspiel, Radfahren, Tauchen oder beim Erkunden neuer Orte, Kulturen und Küchen.
Ich freue mich immer über den Austausch! 🙂