Arch Linux (im Dual‑Boot)
Da meine Beratungsarbeit stark von Microsoft‑Werkzeugen wie Office und Power BI abhängt, nutze ich primär Windows als Betriebssystem.
Ich programmiere weiterhin viel und, zu meiner Überraschung, ist Entwickeln unter Windows sehr gut geworden. Wenn ich etwas Linux‑Spezifisches wie Airflow oder Redmine ausführen muss, kann ich WSL und Docker verwenden.
Eines der Probleme bei der Virtualisierung von Linux ist der Performance‑Verlust. Daher habe ich ca. 60 GB reserviert, um Arch im Dual‑Boot auf meinem Notebook zu installieren.
Ich schrieb auf Twitter, dass ich Arch installiere, und mir wurde nahegelegt, meinen alten Leitfaden zu aktualisieren, denn in 8 Jahren hat sich viel geändert. Also habe ich beschlossen, die über 3‑jährige Blog‑Pause zu unterbrechen und meinen neuen Installationsprozess zu dokumentieren.
Als ich meinen Beitrag von 2012 schrieb, war die offizielle Wiki noch nicht auf dem aktuellen Stand. Heute ist sie sehr vollständig und ich empfehle, ihr zu folgen für mögliche Aktualisierungen und weitere Details.
Wie in den früheren Beiträgen stelle ich klar, dass dies die Konfigurationen sind, die ich für meine
Rechner gewählt habe (ein Dell Latitude 3480 und ein Acer Predator Helios 300).
Einige hier aufgeführte Einstellungen können mit deinem System inkompatibel sein oder je nach
verwendeter Desktop‑Umgebung einfach unnötig.
Ich gehe nicht allzu sehr auf die Details der verwendeten Befehle ein. Weitere Informationen dazu
findest du im Internet und in der offiziellen Wiki.
Wenn du Fragen oder Vorschläge hast, hinterlasse gerne einen Kommentar hier oder schicke mir eine DM
auf Twitter.
Update: Seit Mai 2021 enthält die Arch‑ISO einen geführten Installer namens Archinstall. Da ich den manuellen Weg gewohnt bin, führe ich die Installation weiterhin manuell durch.
Partitionierung der Festplatte
Ich habe zuerst Windows installiert und währenddessen die 240‑GB‑SSD wie folgt 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, sowohl unter Linux als auch unter Windows nutzbar
Ich habe keine Partition für Swap erstellt. Falls ich sie irgendwann benötige, kann ich eine Swap‑Datei auf der Platte, im Speicher oder im Videospeicher anlegen.
Außerdem habe ich /, /home und /var auf derselben Partition gelassen. /boot wird die 500‑MB‑
EFI‑Partition sein. Standardmäßig legt Windows diese Partition mit 100 MB an, was aber ggf. nicht
ausreicht, wenn du viele Module laden oder mehrere Kernel haben möchtest.
Wenn ich die Partitionen nicht mit Windows erstellt hätte, könnte ich auch ein Werkzeug unter Linux verwenden, z. B. cgdisk oder parted
Installations‑USB
Ich habe das ISO‑Image per BitTorrent heruntergeladen und den bootfähigen USB‑Stick mit den Standard‑Optionen von Rufus Portable erstellt. Ich habe den Rechner neu gestartet und wiederholt F12 gedrückt, bis die Liste mit der Boot‑Option für den USB‑Stick erschien. Beim Auswählen der Arch‑Installationsoption erschien eine Meldung, die auf einen Datenträger mit LABEL=ARCH202008 wartete. Ich habe den Stick einfach erneut an den USB‑Port angeschlossen und das System wurde korrekt geladen.
Tastaturlayout
Im Terminal ist der erste Schritt, die Tastatur zu konfigurieren. Da ich eine brasilianische Tastatur benutze, habe ich folgenden Befehl ausgeführt:
Für brasilianische Tastatur:
loadkeys br-abnt2Für US‑amerikanische Tastatur:
loadkeys us-acentos
Weitere Optionen findest du unter ls /usr/share/kbd/keymaps/**/*.map.gz.
Systemuhr aktualisieren
timedatectl set-ntp true
Der Standard unter Linux ist, die Hardware‑Uhr auf UTC zu lassen; Windows verwendet standardmäßig die Lokalzeit. Ich bevorzuge UTC und passe Windows per Regedit an.
Datenträgerverschlüsselung
lsblk # Um die Partition zu finden. Bei mir /dev/sda5
cryptsetup -v luksFormat /dev/sda5
Die Standardeinstellungen fand ich OK. Weitere Optionen findest du in der Wiki.
Wenn lsblk deine SSD (M.2 PCIe NVMe) nicht auflistet, prüfe im BIOS, ob der SATA‑Modus auf AHCI
steht. Wurde Windows im RAID‑Modus installiert, musst du es im Safe Mode starten und den SATA‑Modus
im BIOS ändern.
Formatierung der Root‑Partition
cryptsetup luksOpen /dev/sda5 arch
mkfs.ext4 -L arch /dev/mapper/arch
Partitionen einhängen
mount /dev/mapper/arch /mnt
mkdir /mnt/boot
mount /dev/sda2 /mnt/boot
Internetverbindung
WLAN
Verbinde dich per iwd mit dem WLAN
iwctl --passphrase MINHA_SENHA station wlan0 connect MEU_SSIDKabel
Kabelgebundene Netzwerke sollten automatisch funktionieren. Falls nicht:
Mirrorlist
Pacman liest die Datei /etc/pacman.d/mirrorlist, um zu bestimmen, von welchen
Mirrors Pakete heruntergeladen werden. Es ist gut,
die aktuellsten und schnellsten oben zu lassen, damit Downloads nicht lange dauern.
Der neue Arch‑Installer sollte dies automatisch mit dem Reflector erledigen, sobald die Internetverbindung erkannt wurde. Überprüfe nur, ob alles OK ist. Da ich in São Paulo bin, standen die Mirrors der UFSCar und UFPR ganz oben.
Installation der Hauptpakete
In diesem Schritt installiere ich das Basissystem und alle Pakete, die ich benötigen werde, wie Netzwerk‑Tools, 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. Ich tendiere zu
en_GB statt 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
Virtuelle Konsole
Konfiguriert das Tastaturlayout und die Schriftart.
echo -e "KEYMAP=br-abnt2\nFONT=latarcyrheb-sun16" > /etc/vconsole.conf
oder
echo -e "KEYMAP=us-acentos\nFONT=latarcyrheb-sun16" > /etc/vconsole.conf
Netzwerkkonfiguration
Fügt den Rechnernamen in /etc/hosts ein und blockiert außerdem einige bösartige 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 hinzugefügt, 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
Fügt das multilib‑Repository hinzu, färbt Pacman ein und aktiviert die Pac‑Man‑Animation.
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
Man kann sich direkt mit Iproute2, wpa_supplicant oder Iwd mit kabelgebundenen und drahtlosen Netzen verbinden, aber ein Network‑Manager vereinfacht den Prozess.
Einige Konfigurationen, die ich genutzt habe:
Der NetworkManager wurde von Red Hat geschaffen und ist jetzt Teil des GNOME‑Projekts.
Er erlaubt die Konfiguration von Kabel, WLAN, Modems und VPNs sowohl per Kommandozeile als auch via GUI (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: Es ist möglich, sowohl Kabel als auch WLAN gleichzeitig verbunden zu lassen, sodass beim Abziehen des Kabels keine Downtime entsteht.
$ 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
Entkommentiere die Zeile `%wheel ALL=(ALL) ALL`
Bootloader
Ich verwende systemd-boot. Da mein Prozessor von Intel ist, lade ich auch 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) kann mit lsblk -o +UUID angezeigt werden.
Mit dem konfigurierten 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
Wenn kein Display‑Manager installiert wurde, startet Arch im Terminal. Melde dich mit dem im vorherigen Schritt erstellten Benutzer an.
Dotfiles
Meine Dotfiles sind auf Github verfügbar. Ich klone das Repository und erstelle die passenden Symlinks. Wenn ich Zeit habe, werde ich rcm, chezmoi oder GNU Stow benutzen, um das zu automatisieren.
~$ 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 Optionen für Kommandozeilen‑Shells wie
Bash, Zsh,
KornShell und
Fish. Um die installierten Shells aufzulisten, führe
chsh -l aus.
Ich benutze seit Jahren Zsh. Sie ist POSIX‑konform und wird mit einigen Plugins (PowerLevel10k etc.), die meine Dotfiles automatisch mit zplug installieren und konfigurieren, sehr benutzerfreundlich.
Ich habe meinen Benutzer mit dem Parameter -s /bin/zsh erstellt, aber man kann die Standard‑Shell
mit chsh -s full-path-to-shell ändern.
Terminalemulatoren
Es gibt viele Terminal‑ Emulatoren für Linux, jeweils mit Vor‑ und Nachteilen.
Früher habe ich urxvt verwendet, weil Startzeit und Speicherverbrauch für mich früher die Hauptfaktoren waren. Jetzt, da ich leistungsfähigere Rechner habe, stechen andere Features hervor:
- Multiplattform (mindestens Linux und macOS)
- Unicode
- Truecolor
- Ligatures
- Tabs
- GPU‑beschleunigt
- Gute Dokumentation
Von allen, die ich getestet habe, bietet Kitty die meisten Funktionen. Leider ist es nicht perfekt, hat Phone‑Home‑Funktionen, verwendet eine eigene terminfo, die Probleme verursacht, und der Entwickler verhält sich häufig unhöflich bis rüde.
Alacritty ist gut, hat aber keine Tabs und wird sie vielleicht nie haben.
Terminal‑Multiplexer
Terminalemulatoren wie Kitty erlauben, ein einzelnes Fenster in mehrere Terminals zu teilen, aber die meisten Multiplexer können das und noch viel mehr, z. B. eine Sitzung weiterlaufen lassen, auch wenn das Terminal geschlossen wird.
Einige, die ich verwendet habe:
- GNU Screen
- Am einfachsten und auf vielen Distributionen bereits vorinstalliert.
- Tmux
- Umfangreicher als Screen.
- Einige Projekte wie .tmux machen ihn deutlich hübscher und benutzbarer.
- 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 neues Projekt (hieß 2020 Mosaic), in Rust geschrieben und mit vielen interessanten Features.
Yay
Yay ist ein in Go geschriebener AUR‑Helper/Pacman‑Wrapper, der die Paketinstallation stark erleichtert.
$ git clone https://aur.archlinux.org/yay.git && \
cd yay && \
makepkg -sri && \
cd .. && \
rm -rf yay
Einige zusätzliche Pakete, die ich installiere, darunter das Terminal Kitty, der Bildeditor Gimp, VS Code und diverse Utilities:
$ 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
Schriften
Installiere die im offiziellen Repository oder im AUR verfügbaren Schriften:
$ 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 nicht als Paket verfügbar sind, können manuell installiert werden. Lege die Dateien
einfach in ein Unterverzeichnis von /usr/local/share/fonts (für alle Benutzer) oder
~/.local/share/fonts/ (nur für den eigenen Benutzer).
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
…
Wenn du bestimmte Schriften erzwingen
möchtest, bearbeite die Datei $XDG_CONFIG_HOME/fontconfig/fonts.conf.
Windows‑Schriften
Du kannst die Schriften von der ISO oder aus dem Ordner C:\\Windows\\Fonts einer installierten
Windows‑Installation holen.
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 nutze 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, aber gelegentlich schließe ich Tastaturen mit anderen Layouts an.
Es ist möglich, jede Tastatur individuell per Device‑ID zu konfigurieren oder zwischen vorkonfigurierten Profilen umzuschalten.
Ermittele 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 -> ../event5Konfiguriere with
setxkbmap$ 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:swapescapeBenutze
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, um die passende Konfiguration zu finden.In meinem Beispiel wird CapsLock mit Esc getauscht, die rechte Strg‑Taste als Compose‑Taste (Multi_Key) verwendet und die rechte Alt‑Taste für die dritte Ebene.
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‑Cedilha
Im Layout „US International with Dead Keys“ erhält man „ç“ mit „AltGr + ,“, ich bevorzuge jedoch „´ + c“ oder „compose + c“.
Erstelle eine Datei
~/.XCompose(oder~/.config/ibus/Compose) basierend auf/usr/share/X11/locale/en_US.UTF-8/Compose:# 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 Zeichen
Man kann Zeichen, die auf der eigenen Tastatur nicht vorhanden sind, mit Hilfe eines Input‑Method‑Frameworks wie IBUS oder Fcitx5 eingeben.
Ich zeige, wie man mit ibus-libpinyin und fcitx5-chinese-addons Chinesisch tippt. Die
Konfiguration für andere Sprachen mit anderen IMEs (Input Method Editors) ist ähnlich.
IBUS
IBus (Intelligent Input Bus) ist sehr beliebt. Es ist sogar im GNOME integriert, funktioniert aber auch gut mit anderen Desktop‑Umgebungen.
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=ibusStarte IBus mit dem DE
$ 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 verwende jedoch lieber das Standard‑Panel des IBus.
Konfiguriere IBus
ibus-setupUnter Input Method wähle Portuguese (Brazil), Chinese‑Intelligent Pinyin und English (US, intl., with dead keys).
Unter General konfiguriere den Shortcut „Super+Leertaste“, um zwischen Input‑Methoden zu wechseln.
Unter Advanced aktiviere die Option, das System‑Layout zu verwenden, damit IBus das mit
setxkbmapdefinierte Layout nicht überschreibt.Ändere die Farbe des Panels, damit es zur Taskleiste passt
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, hat viele Funktionen und integriert sich gut mit KDE.
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 auf ibus.
Starte Fcitx5 mit dem DE
$ 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 Konfiguration über das GUI‑Tool
fcitx5-configtoolvorzunehmen (unter KDE ist es in die Systemeinstellungen integriert unter System Settings » Personalization » Regional Settings » Input Method).In meinen Tests wurden manuell bearbeitete Dateien von den Werten aus der GUI ü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 derDefaultIMsein.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 Funktionstasten F1,…,F12 korrekt funktionieren:
sudo nvim /etc/modprobe.d/hid_apple.conf
options hid_apple fnmode=2
sudo mkinitcpio -P
XDG‑Benutzerverzeichnisse
Installiere xdg-user-dirs, um die Ordner zu erstellen.
sudo pacman -S xdg-user-dirs
$ xdg-user-dirs-update --force
Energiemanagement
Es gibt viele Tools für das Energiemanagement. Ich verwende folgende:
sudo pacman -S tlp acpid acpi_call upower xfce4-power-manager
sudo systemctl enable tlp.service
sudo systemctl enable acpid.service
Bluetooth
Nach der Installation von bluez starte den bluetooth.service:
sudo systemctl start bluetooth.service
Die Konfiguration von Bluez befindet sich unter /etc/bluetooth/main.conf. Ich nutze die Standards.
Die meisten Desktop‑Umgebungen enthalten eine GUI zur einfachen Verbindung, wie Bluedevil unter KDE.
Zusätzlich installiere ich gerne bluez-utils, um Bluetooth‑Geräte in der Konsole mit
bluetoothctl zu verbinden.
Beispiel: Verbinden von zwei Tastaturen und einem Kopfhörer:
$ 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: Benutze FN+Z+J, um die Keychron‑Tastatur zurückzusetzen und die Verbindungen zu löschen.
asdf
asdf besitzt Plugins für fast alles. Es kann pyenv, rbenv, goenv und nvm
ersetzen. Es gibt sogar ein Plugin, um verschiedene Versionen von Poetry zu verwalten.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.3
Nutze das Plugin von oh-my-zsh, um es zu aktivieren und Completions hinzuzufügen.
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
Globale Versionen werden in der Datei ~/.tool-versions definiert.
Python
Ich hatte meinen ersten Kontakt mit Python vor über 10 Jahren und heute ist es nicht nur meine Lieblingssprache, sondern auch die Sprache, die ich am meisten für Arbeit und persönliche Projekte verwende.
Der Zen von Python sagt:
“There should be one– and preferably only one –obvious way to do it.”
Das gilt für Code, aber beim Packaging ist die Geschichte ganz anders. Meine Gefühle werden in dieser xkcd‑Reihe gut dargestellt: xkcd 353, xkcd 927, xkcd 1987.

xkcd 927
Meine aktuellen Vorlieben sind in dieser Reihenfolge:
Zum Verwalten verschiedener Python‑Versionen: asdf oder Pyenv.
Zum Verwalten virtueller Umgebungen, Steuern von Abhängigkeiten und einfaches Veröffentlichen von Paketen: PDM oder Poetry.
Für komplexere Fälle von Machine Learning oder Projekte, die von Paketen und Binaries abhängen, die nicht auf pypi verfügbar sind: Mambaforge.
IDE: VSCode mit offizieller Erweiterung oder PyCharm.
Das Problem bei PyCharm ist, dass einige wichtige Funktionen (Framework‑Integration, SQL‑Editor, Docker‑Integration etc.) kostenpflichtig sind.
Pyenv
Pyenv ermöglicht die Installation und Nutzung verschiedener Python‑Versionen.
Es ist wie asdf, aber ausschließlich für Python. Wenn du bereits asdf für andere Sprachen benutzt, ergibt es vielleicht wenig Sinn, Pyenv zu installieren.
- Installiere Pyenv:
sudo pacman -S pyenv
- Optional: installiere auch pyenv-virtualenv:
yay -S pyenv-virtualenv
- Füge die folgenden Zeilen in
~/.zshrcein:
if (( $+commands[pyenv] )); then eval "$(pyenv init --path)"; fi
if (( $+commands[pyenv-virtualenv-init] )); then eval "$(pyenv virtualenv-init -)"; fi
- Prüfe, welche Versionen vorhanden sind, und installiere die benötigten:
pyenv install --list
pyenv install 3.8.12
pyenv install mambaforge
- Liste die installierten Versionen auf
pyenv versions
- Lege im Projektordner die zu verwendende Version fest
pyenv local 3.8.12
Es wird eine Datei namens .python-version erzeugt:
$ cat .python-version
3.8.12
Poetry
Update: Abschnitt für Version 1.2 aktualisiert.
- Installiere Poetry
Ich bevorzuge es, den System‑Paketmanager nicht für Poetry zu verwenden; es gibt ein paar gute Alternativen:
Script:
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. Lass--previewweg, wenn du die letzte stabile Version willst.asdf:
asdf plugin add poetry asdf install poetry latest asdf global poetry latestpipx:
pipx install poetry
- Füge es zum PATH hinzu
Der alte Installer nutzte $HOME/.poetry/bin. Der neue nutzt $HOME/.local/bin.
Mit meiner Funktion in .zshrc:
addToPathStart $HOME/.local/bin
- Installiere Completions
poetry completions zsh > ~/.zprezto/modules/completion/external/src/_poetry
Der obige Befehl liegt daran, dass ich Prezto nutze.
Wichtig ist, es in einem Ordner zu installieren, der im $fpath liegt.
- Erstelle ein neues Projekt
poetry new mein-projekt
cd mein-projekt
- Lege die Python‑Version mit Pyenv oder asdf fest
pyenv local 3.8.12
oder
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/python
oder
poetry env use -- /home/julio/.asdf/installs/python/3.10.3/bin/python
poetry run python --version
poetry debug info
- Abhängigkeiten hinzufügen
Dev‑Abhängigkeiten werden mit --dev bzw. in neueren Versionen über Gruppen angegeben:
$ poetry add --group dev \
bandit \
black \
codecov \
coverage \
flake8 \
gitchangelog \
isort \
mkdocs \
mypy \
pydocstyle \
pytest \
pytest-cov
poetry add typer\[all\]
- Poetry aktualisieren
poetry self update
Denk daran, die Completions erneut zu generieren.
- poetry-plugin-up installieren
poetry self add poetry-plugin-up
poetry up --latest
Dieses Plugin aktualisiert die Pakete in pyproject.toml auf die neuesten Versionen.
Wenn Poetry bei “Resolving dependencies” hängen bleibt, versuch 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 kombiniert Mamba und Conda-Forge.
Mamba ist eine Reimplementierung des Paketmanagers Conda in C++. Es löst Abhängigkeiten sehr schnell und lädt parallel herunter.
Der Conda-Forge-Kanal enthält Community‑Rezepte für Conda. Er hat viel mehr Pakete als das offizielle Conda-Repository.
Wenn du Pyenv nicht nutzen willst, kannst du Mambaforge manuell installieren:
wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh bash Mambaforge-Linux-x86_64.shBasis‑Pakete aktualisieren
mamba update mamba mamba update --allVirtuelle Umgebung erstellen und aktivieren
mamba create -n name_des_env python=3.10 jupyterlab … conda activate name_des_envEinige zusätzliche Pakete installieren
$ 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 ein Paket‑ und Abhängigkeitsmanager.
Der Unterschied ist, dass er den neuen PEPs folgt (PEP 582, PEP 517 und PEP 621).
Es ist möglich, ein Virtualenv zu verwenden oder PEP 582 zu folgen und einen Ordner namens
__pypackages__ zu nutzen. Dieser Ordner entspricht node_modules und wird zu sys.path
hinzugefügt.
Installation
Per Script:
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 latestCompletions in ZSH
pdm completion zsh > ~/.zprezto/modules/completion/external/src/_pdm
Verwendung
Projekt erstellen
pdm initAbhängigkeiten hinzufügen
pdm add requests flaskDev‑Abhängigkeiten hinzufügen
pdm add -dG dev jupyterlab jupyterlab-code-formatter black isort pylint mypyAbhängigkeiten entfernen
pdm remove flaskAbhängigkeiten auflisten
pdm list --graphProjekt installieren
pdm installInstallation basierend auf der .lock‑Datei
pdm syncAbhängigkeiten aktualisieren
Alle Pakete
pdm updateEin bestimmtes Paket
pdm update <paket>Pakete einer Gruppe
pdm update -G <gruppe>Erzwingt Update gepinnter Pakete
pdm update --update-eager
Nicht gelistete Pakete entfernen
pdm sync --cleanBinärdatei in der Umgebung ausführen
pdm run jupyter lab
Aktualisierung
pdm self update
Rust
Empfohlen für Rust‑Entwicklung ist die Nutzung von rustup, das auf zwei Arten installiert werden kann:
- Offizielles Script:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- Pacman:
sudo pacman -S rustup
rustup default stable
Diese Variante ist unter Arch bequemer, da Rust und davon abhängige Pakete ständig aktuell bleiben.
Installation testen:
$ 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 ist so konfiguriert, dass er den rust-analyzer als LSP‑Server nutzt. Installiere einfach das Binary:
sudo pacman -S rust-analyzer
Nvidia
Eines meiner Notebooks hat eine integrierte Intel‑GPU und eine Nvidia GeForce RTX 2070 Max‑Q, die leistungsfähiger ist als die Intel‑GPU, aber mehr Energie verbraucht.
Es ist möglich, eine der Karten dauerhaft zu deaktivieren oder die Nvidia Optimus‑Technologie zu verwenden, um je nach Bedarf zwischen den Karten zu wechseln.
Installiere die Treiber und Tools:
sudo pacman -S nvidia nvidia-utils nvidia-settings opencl-nvidia
Ein bestimmtes Programm auf der Nvidia ausführen
Für das PRIME render offload starte
das Programm einfach mit prime-run. Beispiel:
sudo pacman -S nvidia-prime
prime-run kdenlive
Nur die Nvidia‑Karte verwenden
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 (oder /usr/share/sddm/scripts/Xsetup für SDDM)
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
setxkbmap br -option caps:swapescape
Sorge dafür, dass 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: Wenn auf der Partition /boot wenig freier Speicher vorhanden ist, kann die Erstellung
des Fallback‑Images deaktiviert werden, indem die entsprechenden Zeilen in
/etc/mkinitcpio.d/linux.preset auskommentiert werden. Reicht das nicht, müssen die Partitionen
vergrößert werden.)
sudo systemctl reboot
nvidia-smi
sudo pacman -S virtualgl
glxspheres64
Tearing
Screen tearing ist, wenn Teile verschiedener Frames gleichzeitig auf dem Bildschirm angezeigt werden.
Dieses Problem war beim Ansehen von Videos am per HDMI angeschlossenen Monitor deutlich sichtbar. Teste mit dem Video https://youtu.be/MfL_JkcEFbE und der Seite https://www.vsynctester.com.
- Browser‑Konfiguration
Prüfe, ob das Aktivieren von layers.acceleration.force-enabled in about:config von Firefox etwas
verbessert.
- Force composition
Diese Option kann die Latenz erhöhen, hat aber mein Problem gelöst.
Prüfe die aktuellen Einstellungen:
$ 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 (oder ForceFullCompositionPipeline):
nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +1920+0 { ForceCompositionPipeline = On }"
Der Offset +1920+0 ist, weil das Notebook‑Display Full HD hat und links vom externen Monitor
steht.
Prüfe die neuen Einstellungen:
$ 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}
Füge diesen Befehl in eine Datei ein, die beim Start ausgeführt wird, z. B. autostart, xinit
oder Xsetup.
~/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"
Wenn deine Monitore fix sind, kannst du /etc/X11/xorg.conf.d/20-nvidia.conf verwenden:
Section "Screen"
…
Option "MetaModes" "nvidia-auto-select +0+0 {ForceFullCompositionPipeline=On}"
…
EndSection
Window Manager und Desktop Environments
Awesome
Für AwesomeWM mag ich die Konfigurationen von Gerome Matilla. Sie sind etwas aufgebläht, aber die Layouts sind hübsch und haben interessante Features.
KDE
KDE Plasma ist ein sehr gutes DE mit Standardeinstellungen, die mir gut gefallen.
Früher habe ich KDE auf meinen alten Rechnern gemieden, weil es nicht leicht genug war, aber mit meiner aktuellen Hardware ist das kein großes Problem mehr.
Ich empfehle, folgende Pakete zu installieren:
sudo pacman -S ark \
dolphin \
gwenview \
packagekit-qt5 \
plasma-browser-integration \
sddm \
spectacle
Das Tauschen von Caps Lock mit ESC kann unter
System Settings » Keyboard » Advanced » Caps Lock behavior » Swap Esc and Caps Lock erfolgen.
Installiere kdeconnect auf dem Rechner und auf Android‑Geräten, um Benachrichtigungen zu
synchronisieren, Dateien zu teilen, die Zwischenablage zu teilen, das Android‑Gerät als Maus und
Tastatur zu verwenden und mehr.
Teste die Optionen OpenGL und XRender unter
System Settings » Hardware » Display and Monitor » Compositor » Rendering backend. Die beste
Option ist wahrscheinlich OpenGL, aber es gibt Berichte über Probleme mit Nvidia‑Karten.
Wenn du die Mediensteuerung auf dem Sperrbildschirm nicht anzeigen möchtest, führe folgenden Befehl aus:
kwriteconfig5 --file kscreenlockerrc --group Greeter --group LnF --group General --key showMediaControls --type bool false
Wenn die Schriften zu groß sind, erzwinge den DPI‑Wert unter
System Settings » Fonts » Force font DPI: 96.
Tiling in KDE: Kröhnkite
Verschiebe die Taskleiste an den oberen Bildschirmrand;
Verringere die Leistenhöhe (ich verwende 30);
Rechtsklick auf die Taskleiste, „Show Alternatives“ und „Icons‑only Task Manager“ wählen;
Rechtsklick auf Pager » Configure Pager
- Show application icons on window outlines
- Text display: Desktop number
System Settings » Workspace » Window Management » KWin Scripts » Get New Scripts…
Kröhnkite‑Einstellungen aktivieren
mkdir -p ~/.local/share/kservices5/ ln -s ~/.local/share/kwin/scripts/krohnkite/metadata.desktop ~/.local/share/kservices5/krohnkite.desktopÜber den KWin‑Scripts‑Bildschirm erscheint ein Konfigurationsbutton für Kröhnkite. Dort mache ich:
- Aktivierung des Quarter‑Layouts
- 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:
Öffne System Settings » Workspace » Workspace Behavior » Virtual Desktops und füge so viele Desktops hinzu, wie du willst (ich nutze 8, angezeigt 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;
Rahmenfarben
kwriteconfig5 --file ~/.config/kdeglobals --group WM --key frame 61,174,233 kwriteconfig5 --file ~/.config/kdeglobals --group WM --key inactiveFrame 239,240,241Minimale Fenstergröße entfernen
- System Settings » Workspace » Window Rules
- Add New…
- Window class: Unimportant
- Window types: Normal Window
- Add Properties…
- Minimum Size: Force 0 x 0
Shortcuts ändern unter System Settings » Workspace » Shortcuts » KRunner
- KRunner:
Meta + R
- KRunner:
Shortcuts ändern 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 nutzeMeta + F1,…,F8, daMeta+Shift+6nicht mit US‑intl. Tastatur funktioniert.) - Window to Previous Screen:
Meta + < - Window to Next Screen:
Meta + > - Krohnkite: Float All:
Meta+Shift+F - Krohnkite: Right: Meta+L (nutze
ctrl+alt+Lzum Sperren)
- Switch to Desktop n:
Integration mit Android
MTP‑Geräte können immer nur von einem Programm genutzt werden.
Um ein Tablet mit Calibre zu synchronisieren, darf KDE das Gerät zuvor nicht gemountet haben.
Beende den Prozess kiod5.
Gnome
Gnome ist ein vollständiges und beliebtes DE. Ich mag die Standardeinstellungen nicht so sehr, aber nach ein paar Anpassungen ist es gut nutzbar:
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']"
Über Tweaks aktiviere die App‑Indicator‑Erweiterung sowie die Buttons „Minimieren“ und „Maximieren“.
Installiere Pipewire, damit Screen‑Sharing unter Wayland funktioniert:
sudo pacman -S pipewire xdg-desktop-portal-gtk
Wine
- Installiere einige der folgenden Pakete (nicht alle sind erforderlich)
$ 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
Starte
winetricksMit installiertem
zenityerscheint eine GUI, um Prefixe zu erstellen, Abhängigkeiten zu installieren, Programme zu installieren/deinstallieren.Die Prefixe werden unter
~/.local/share/wineprefixes/erstellt.Programm über die Kommandozeile starten
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 (oft auch im AUR verfügbar).
Bevorzuge WireGuard gegenüber OpenVPN, wenn möglich.
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