Arch Linux (en dual boot)

Como mi trabajo de consultoría depende mucho de herramientas de Microsoft como Office y Power BI, últimamente uso Windows como sistema operativo principal.
Sigo programando bastante y, para mi sorpresa, desarrollar en Windows va muy bien. Cuando necesito ejecutar algo que depende de Linux, como Airflow o Redmine, puedo usar WSL y Docker.
Uno de los problemas de virtualizar Linux es la pérdida de rendimiento. Por eso aparté unos 60 GB para instalar Arch en dual boot en mi portátil.
Escribí en Twitter que estaba instalando Arch y me sugirieron actualizar mi guía antigua, porque han cambiado muchas cosas en 8 años. Así que decidí romper el parón de más de 3 años de este blog para documentar mi nuevo proceso de instalación.
Cuando escribí la entrada de 2012, la wiki oficial no estaba al día. Hoy está muy completa y recomiendo seguirla para posibles actualizaciones y más detalles.
Como en las entradas anteriores, dejo claro que esta es la configuración que elegí para mis
ordenadores (un Dell Latitude 3480 y un Acer Predator Helios 300).
Algunos ajustes de aquí pueden ser incompatibles con tu sistema o simplemente innecesarios según el
entorno de escritorio que uses.
No entraré en muchos detalles sobre los comandos usados. Encontrarás más información sobre ellos en
internet y en la wiki oficial.
Si tienes alguna duda o sugerencia, no dudes en dejar un comentario aquí o mandarme un DM por
Twitter.
Actualización: desde mayo de 2021 la imagen ISO de Arch incluye un instalador guiado llamado Archinstall. Como ya estoy acostumbrado, seguiré con la instalación manual.
Particionado del disco
Instalé Windows primero y, durante la instalación, particioné el SSD de 240 GB así:
- 529 MB: Windows Recovery
- 500 MB: EFI (mayor que la de por defecto)
- 150 GB: Windows
- 60 GB: Arch Linux
- El resto: partición NTFS cifrada con Veracrypt para acceder tanto desde Linux como desde Windows
No creé una partición de swap. Si algún día la necesito, podré crear un archivo de intercambio en el disco, en memoria o en la memoria de la tarjeta gráfica.
También dejé /, /home y /var en la misma partición. El /boot será la partición EFI de 500
MB. Por defecto Windows crea esa partición con 100 MB, pero puede no ser suficiente si quieres
cargar muchos módulos o tener más de un kernel.
Si no hubiera creado las particiones desde Windows, podría usar alguna herramienta de Linux como cgdisk o parted
USB de instalación
Descargué la imagen ISO por BitTorrent y creé el USB arrancable con las opciones por defecto de Rufus Portable. Reinicié el ordenador y fui pulsando F12 hasta que apareció la lista con la opción de arrancar desde el pendrive. Al elegir instalar Arch salió un mensaje diciendo que esperaba un disco con LABEL=ARCH202008. Simplemente volví a conectar el pendrive al puerto USB y el sistema cargó bien.
Distribución del teclado
Al caer en el terminal, el primer paso es configurar el teclado. Como uso un teclado brasileño, ejecuté este comando:
Para teclado brasileño:
loadkeys br-abnt2Para teclado estadounidense:
loadkeys us-acentos
Encontrarás otras opciones con ls /usr/share/kbd/keymaps/**/*.map.gz.
Actualización del reloj del sistema
timedatectl set-ntp true
Linux deja por defecto el reloj del hardware en UTC, mientras que Windows usa la hora local. Yo prefiero dejarlo en UTC y configurar Windows desde el Regedit.
Cifrado del disco
lsblk # Para descobrir a partição. /dev/sda5 no meu caso
cryptsetup -v luksFormat /dev/sda5
A mí la configuración por defecto me pareció bien. Hay más opciones en la wiki.
Si lsblk no lista tu SSD (M.2 PCIe NVMe), comprueba en la BIOS que el SATA Mode está en AHCI. Si
Windows se instaló en modo RAID, tendrás que reiniciarlo en modo seguro y cambiar el SATA Mode en la
BIOS.
Formateo de la partición raíz
cryptsetup luksOpen /dev/sda5 arch
mkfs.ext4 -L arch /dev/mapper/arch
Montaje de las particiones
mount /dev/mapper/arch /mnt
mkdir /mnt/boot
mount /dev/sda2 /mnt/boot
Conexión a internet
Wifi
Conéctate al wifi con iwd
iwctl --passphrase MINHA_SENHA station wlan0 connect MEU_SSIDCable
Las redes por cable deberían funcionar solas. Si no es el caso:
Mirrorlist
Pacman lee el archivo /etc/pacman.d/mirrorlist para decidir de qué
mirrors descargar los paquetes. Conviene dejar
arriba los más actualizados y rápidos para que las descargas no tarden mucho.
El nuevo instalador de Arch debería hacerlo automáticamente con Reflector en cuanto detecte la conexión a internet. Solo hay que comprobar que está todo bien. Como estoy en São Paulo, los mirrors de la UFSCar y la UFPR quedaron arriba.
Instalación de los paquetes principales
En este paso instalo el sistema base y todos los paquetes que necesitaré: herramientas de red, editor de texto, páginas de manual, Xorg y 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
Zona horaria
Brasil
ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtimeAlemania
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
Guarda la hora:
hwclock --systohc
Localización
Uso el sistema en inglés, pero también activo pt_BR y de_DE. Suelo preferir en_GB a en_US,
pero eso va en gustos.
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
Configura la distribución del teclado y la fuente.
echo -e "KEYMAP=br-abnt2\nFONT=latarcyrheb-sun16" > /etc/vconsole.conf
ou
echo -e "KEYMAP=us-acentos\nFONT=latarcyrheb-sun16" > /etc/vconsole.conf
Configuración de red
Añade el nombre del ordenador al /etc/hosts y además bloquea algunos sitios maliciosos y de
publicidad.
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
Añadí encrypt, porque la partición del sistema está cifrada.
También cargo los módulos de Nvidia, como se explica más abajo.
$ nvim /etc/mkinitcpio.conf
HOOKS=(base udev autodetect modconf block encrypt filesystems keyboard keymap consolefont fsck)
mkinitcpio -p linux
Pacman
Añade el repositorio multilib, pone color a pacman y añade la animación de Pac-Man.
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
Contraseña de root
passwd
DNS y red
Se puede usar Iproute2, wpa_supplicant o Iwd directamente para conectarse a redes por cable e inalámbricas, pero un gestor de conexiones facilita el proceso.
Algunas configuraciones que he usado:
NetworkManager lo creó RedHat y ahora forma parte del proyecto GNOME.
Permite configurar redes por cable, wifi, módems y VPN tanto desde la línea de comandos como desde interfaces gráficas (muy bien integradas en Gnome y KDE).
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.Nota: se pueden mantener el cable y el wifi conectados a la vez, de forma que si desconectas el cable no haya corte.
$ 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=systemdLa red se puede arrancar al encender el ordenador:
sudo systemctl enable systemd-resolved iwd
Usuarios
~# 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
Uso systemd-boot. Como mi procesador es Intel, también cargo su 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
El UUID de la partición cifrada (/dev/sda5) se ve ejecutando el comando lsblk -o +UUID.
Con el gestor de arranque configurado ya podemos reiniciar el ordenador. Si todo va bien, aparecerá un menú para elegir el sistema operativo.
sudo umount /mnt/boot
sudo umount /mnt
sudo systemctl reboot
Si no se instaló ningún gestor de sesiones, Arch arrancará en el terminal. Entra con el usuario creado en el paso anterior.
Dotfiles
Mis dotfiles están en Github. Clono el repositorio y creo los enlaces simbólicos correspondientes. Cuando tenga tiempo usaré rcm, chezmoi o GNU Stow para automatizarlo.
~$ 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
Hay muchas opciones de shell de línea de comandos, como
Bash, Zsh,
KornShell y
Fish. Para listar los shells instalados ejecuta el
comando chsh -l.
Uso Zsh desde hace años. Cumple POSIX y resulta extremadamente cómodo con algunos plugins (PowerLevel10k, etc.), que mi dotfile instala y configura automáticamente con zplug.
Yo creé mi usuario con el parámetro -s /bin/zsh, pero se puede cambiar el shell por defecto con el
comando chsh -s full-path-to-shell.
Emuladores de terminal
Hay muchos emuladores de terminal para Linux, cada uno con sus ventajas e inconvenientes.
Yo solía usar urxvt, porque antes el tiempo de arranque y el consumo de memoria eran lo que más me importaba. Ahora que tengo ordenadores más potentes destacan otras cosas:
- Multiplataforma (al menos Linux y macOS)
- Unicode
- Truecolor
- Ligatures
- Tabs
- GPU accelerated
- Buena documentación
De todos los que he probado, Kitty es el que más funciones tiene. Por desgracia no es perfecto: tiene phone home features, usa un terminfo propio que da problemas y su desarrollador a menudo se comporta de forma grosera.
Alacritty está bien, pero no tiene pestañas y quizá nunca las tenga.
Multiplexores de terminal
Los emuladores de terminal como Kitty permiten dividir una única ventana en varios terminales, pero la mayoría de los multiplexores hacen eso y mucho más, como dejar una sesión en marcha aunque cierres el terminal.
Algunos que he usado:
- GNU Screen
- Es el más sencillo y ya viene instalado en varias distribuciones.
- Tmux
- Más completo que Screen.
- Algunos proyectos como .tmux lo dejan mucho más bonito y usable.
- Otros proyectos: https://github.com/rothgar/awesome-tmux
- Byobu
- Es una capa sobre Screen o Tmux. Me gusta bastante, pero el proyecto se abandonó en febrero de 2020.
- Zellij
- Mi favorito actual. Es un proyecto nuevo (en 2020 se llamaba Mosaic) escrito en Rust y con muchas funciones interesantes.
Yay
Yay es un AUR helper, un wrapper de Pacman escrito en Go que ayuda bastante a instalar paquetes.
$ git clone https://aur.archlinux.org/yay.git && \
cd yay && \
makepkg -sri && \
cd .. && \
rm -rf yay
Algunos paquetes extra que instalo, entre ellos el terminal Kitty, el editor de imágenes Gimp, VS Code y varias utilidades:
$ 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
Fuentes
Instala las fuentes disponibles en el repositorio oficial o en el 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
Instalación manual
Las fuentes que no están disponibles como paquete se pueden instalar a mano. Basta con poner los
archivos en alguna subcarpeta de /usr/local/share/fonts (para todos los usuarios) o de
~/.local/share/fonts/ (solo para tu usuario).
Ejemplo:
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
…
Si quieres definir fuentes concretas,
edita el archivo $XDG_CONFIG_HOME/fontconfig/fonts.conf.
Fuentes de Windows
Puedes sacar las fuentes de la ISO o de la carpeta C:\Windows\Fonts de un Windows instalado.
Copia las fuentes a /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/*
Otra opción es usar un paquete como ttf-ms-win10 o 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
Teclados
El teclado de mi portátil es ABNT2, pero a veces conecto teclados con otras distribuciones.
Se puede configurar cada teclado por separado usando su device id, o alternar entre perfiles preconfigurados.
Averigua el device id del teclado
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 -> ../event5Configúralo con
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:swapescapeUsa los comandos
localectl list-x11-keymap-layouts,localectl list-x11-keymap-variants us,localectl list-x11-keymap-optionsy el archivo/usr/share/X11/xkb/rules/base.lstpara dar con la configuración adecuada.Mi ejemplo intercambia el Bloq Mayús con el Esc, usa el control derecho como tecla compose (Multi_Key) y el Alt derecho para el tercer nivel.
Ejecuta el comando al arrancar el sistema
$ 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: ce cedilla
En la distribución
US International with Dead Keyslaçse consigue conAltGr + ,, pero yo prefiero usar´ + cocompose + c.Crea un
~/.XCompose(o~/.config/ibus/Compose) basado en/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> : "🗼"
Caracteres orientales
Se pueden escribir caracteres que no están en tu teclado mediante un input method framework como IBUS o Fcitx5.
Voy a mostrar cómo usar ibus-libpinyin y fcitx5-chinese-addons para escribir en chino. La
configuración de otros idiomas con otros IME (input method editors) es parecida.
IBUS
IBus (Intelligent Input Bus) es bastante popular. De hecho viene integrado en GNOME, pero también funciona bien con otros entornos de escritorio.
Instala IBus
sudo pacman -S ibus ibus-libpinyinDefine estas variables de entorno:
sudo nvim /etc/environment GTK_IM_MODULE=ibus QT_IM_MODULE=ibus XMODIFIERS=@im=ibus GLFW_IM_MODULE=ibusConfigura IBus para que arranque con el entorno de escritorio
$ 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 tiene un widget llamado Input Method Panel, pero yo prefiero usar el panel propio de IBus.
Configura IBus
ibus-setupEn Input Method, elige Portuguese (Brazil), Chinese-Intelligent Pinyin e English (US, intl., with dead keys).
En General, configura el atajo
<Super>spacepara alternar entre los input methods.En Advanced, marca la opción de usar la distribución del sistema para que IBus no sobrescriba la que definiste con
setxkbmap.Cambia el color del panel para que combine con tu barra de tareas
gsettings set org.freedesktop.ibus.panel xkb-icon-rgba '#ffffff'
Fcitx5
Fcitx (Flexible Context-aware Input Tool with eXtension support) es el input method framework que uso.
Es bastante flexible, tiene muchas funciones y se integra bien con KDE.
Instala Fcitx5
sudo pacman -S fcitx5-im fcitx5-chinese-addonsDefine estas variables de entorno:
sudo nvim /etc/environment GTK_IM_MODULE=fcitx QT_IM_MODULE=fcitx XMODIFIERS=@im=fcitx DefaultIMModule=fcitx SDL_IM_MODULE=fcitx GLFW_IM_MODULE=ibusLa última línea es para Kitty. Se queda como ibus, sí.
Configura Fcitx5 para que arranque con el entorno de escritorio
$ 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=trueConfigura Fcitx5
Recomiendo hacer los ajustes desde la interfaz gráfica
fcitx5-configtool(en KDE queda integrada en la configuración del sistema, enSystem Settings » Personalization » Regional Settings » Input Method).En mis pruebas, los archivos editados a mano acabaron sobrescritos con los valores configurados desde la interfaz gráfica.
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"Nota: la última entrada en
configtoolserá elDefaultIM.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
Teclado Keychron
Para que las teclas F1,…,F12 funcionen bien:
sudo nvim /etc/modprobe.d/hid_apple.conf
options hid_apple fnmode=2
sudo mkinitcpio -P
XDG user directories
Instala xdg-user-dirs para crear las carpetas.
sudo pacman -S xdg-user-dirs
$ xdg-user-dirs-update --force
Gestión de la energía
Hay muchas herramientas de gestión de la energía. Yo uso estas:
sudo pacman -S tlp acpid acpi_call upower xfce4-power-manager
sudo systemctl enable tlp.service
sudo systemctl enable acpid.service
Bluetooth
Tras instalar bluez, arranca el bluetooth.service:
sudo systemctl start bluetooth.service
La configuración de Bluez está en /etc/bluetooth/main.conf. Yo uso la de por defecto.
La mayoría de los entornos de escritorio incluyen alguna interfaz gráfica para facilitar la
conexión, como Bluedevil en KDE, pero a mí también me gusta instalar bluez-utils para conectar
dispositivos bluetooth desde la línea de comandos con bluetoothctl.
Ejemplo conectando dos teclados y unos auriculares:
$ 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
Consejo: usa FN+Z+J para reiniciar el teclado Keychron y restablecer las conexiones.
asdf
asdf tiene plugins para casi cualquier cosa. Puede sustituir a pyenv, rbenv,
goenv y nvm. Hasta hay un plugin para gestionar distintas versiones de Poetry.
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.11.3
Usa el plugin de oh-my-zsh para activarlo y añadir el autocompletado.
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
Las versiones globales se definen en el archivo ~/.tool-versions.
Python
Tuve mi primer contacto con Python hace más de 10 años y hoy, además de ser mi lenguaje de programación favorito, es el que más uso en el trabajo y en proyectos personales.
El Zen de Python dice:
“There should be one– and preferably only one –obvious way to do it.”
Lo cual vale para el código, pero con el packaging la historia es bien distinta. Mis sentimientos quedan bien retratados en esta serie de viñetas de xkcd: xkcd 353, xkcd 927, xkcd 1987.

xkcd 927
Mis preferencias actuales son estas, por orden:
Para gestionar entornos virtuales, controlar dependencias y facilitar la publicación de paquetes: PDM o Poetry.
Para casos más complejos de machine learning o proyectos que dependan de paquetes y binarios que no están en pypi: Mambaforge.
IDE: VSCode con la extensión oficial o PyCharm.
El problema de PyCharm es que algunas funciones importantes (integración con frameworks, edición de SQL, integración con Docker, etc.) son de pago.
Pyenv
Pyenv permite instalar y usar distintas versiones de Python.
Es como asdf, pero solo para Python. Si ya usas asdf para otros lenguajes, quizá no tenga mucho sentido instalar Pyenv.
Instala Pyenv:
sudo pacman -S pyenvOpcionalmente, instala también pyenv-virtualenv:
yay -S pyenv-virtualenvAñade estas líneas al
~/.zshrc:if (( $+commands[pyenv] )); then eval "$(pyenv init --path)"; fi if (( $+commands[pyenv-virtualenv-init] )); then eval "$(pyenv virtualenv-init -)"; fiComprueba qué versiones hay disponibles e instala las que vayas a usar:
pyenv install --list pyenv install 3.8.12 pyenv install mambaforgeLista las versiones instaladas
pyenv versionsEn la carpeta de algún proyecto, define la versión que se usará
pyenv local 3.8.12Se creará un archivo llamado
.python-version:$ cat .python-version 3.8.12
Poetry
Actualización: sección actualizada a la versión 1.2.
Instala Poetry
Prefiero no usar el gestor de paquetes del sistema para Poetry; hay buenas alternativas:
Script:
wget -O install-poetry.py https://install.python-poetry.org python install-poetry.py --previewNota: el instalador antiguo (
get-poetry.py) fue sustituido porinstall-poetry.py. No pases el parámetro--previewsi quieres la última versión estable.asdf:
asdf plugin add poetry asdf install poetry latest asdf global poetry latestpipx:
pipx install poetry
Añádelo al PATH
El instalador antiguo usaba la carpeta
$HOME/.poetry/bin. El nuevo usa$HOME/.local/bin.Usando mi función del
.zshrc:addToPathStart $HOME/.local/binInstala el autocompletado
poetry completions zsh > ~/.zprezto/modules/completion/external/src/_poetryEl comando anterior es porque uso Prezto. Lo importante es instalarlo en alguna carpeta que esté en el
$fpath.Crea un proyecto nuevo
poetry new meu-projeto cd meu-projetoDefine la versión de Python con Pyenv o asdf
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 infoAñade las dependencias
Las dependencias de desarrollo se pasan con
--dev.$ poetry add --group dev \ bandit \ black \ codecov \ coverage \ flake8 \ gitchangelog \ isort \ mkdocs \ mypy \ pydocstyle \ pytest \ pytest-covpoetry add typer\[all\]Actualiza Poetry
poetry self updateAcuérdate de volver a generar el autocompletado.
Instala poetry-plugin-up
poetry self add poetry-plugin-up poetry up --latestEste plugin actualiza los paquetes de
pyproject.tomla la última versión.
Si Poetry se queda atascado en “Resolving dependencies”, prueba esto:
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 combina Mamba y Conda-Forge.
Mamba es una reimplementación en C++ del gestor de paquetes Conda. Resuelve dependencias muy rápido y descarga en paralelo.
El canal Conda-Forge contiene recipes escritas por la comunidad para Conda. Tiene muchos más paquetes que el repositorio oficial de Conda.
Si no quieres usar Pyenv, puedes instalar Mambaforge a mano:
wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh bash Mambaforge-Linux-x86_64.shActualiza los paquetes base
mamba update mamba mamba update --allCrea y activa un entorno virtual
mamba create -n nome_do_env python=3.10 jupyterlab … conda activate nome_do_envInstala algunos paquetes adicionales
$ 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
rechazada por el Python Steering Council en marzo de 2023.
Igual que Poetry, PDM es un gestor de paquetes y dependencias.
La diferencia es que sigue las nuevas PEP (PEP 582, PEP 517 y PEP 621).
Se puede usar un virtualenv o seguir la PEP 582 y usar una carpeta llamada __pypackages__. Esa
carpeta equivale a node_modules y se añade al sys.path.
Instalación
Con script:
curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3 -Con asdf:
asdf plugin add pdm asdf install pdm latest asdf local pdm latestAutocompletado en ZSH
pdm completion zsh > ~/.zprezto/modules/completion/external/src/_pdm
Uso
Crear un proyecto
pdm initAñadir dependencias
pdm add requests flaskAñadir dependencias de desarrollo
pdm add -dG dev jupyterlab jupyterlab-code-formatter black isort pylint mypyQuitar dependencias
pdm remove flaskListar dependencias
pdm list --graphInstalar el proyecto
pdm installInstalar a partir del archivo .lock
pdm syncActualizar dependencias
Todos los paquetes
pdm updateUn paquete concreto
pdm update <paquete>Paquetes de un grupo
pdm update -G <grupo>Forzar la actualización de paquetes fijados
pdm update --update-eager
Quitar los paquetes no listados
pdm sync --cleanEjecutar un binario en el entorno
pdm run jupyter lab
Actualización
pdm self update
Rust
Para desarrollar en Rust se recomienda usar rustup, que se puede instalar de dos formas:
Script oficial:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shPacman:
sudo pacman -S rustup rustup default stableEsta forma es más cómoda en Arch, porque mantiene Rust y los paquetes que dependen de él siempre actualizados.
Prueba la instalación:
$ 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!
Mi Neovim está configurado para usar rust-analyzer como servidor LSP. Basta con instalar el binario:
sudo pacman -S rust-analyzer
Nvidia
Uno de los portátiles tiene una GPU integrada de Intel y una Nvidia GeForce RTX 2070 Max-Q, que rinde más que la de Intel pero consume más energía.
Se puede apagar una de las tarjetas de forma permanente o usar la tecnología Nvidia Optimus para alternar entre ellas según haga falta.
Instala los controladores y utilidades:
sudo pacman -S nvidia nvidia-utils nvidia-settings opencl-nvidia
Ejecutar un programa concreto en la Nvidia
Para hacer el llamado
PRIME render offload basta con
arrancar el programa con el comando prime-run. Por ejemplo:
sudo pacman -S nvidia-prime
prime-run kdenlive
Usar solo la tarjeta Nvidia
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
Para asegurarse de que el módulo se carga antes que la interfaz gráfica.
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
(Nota: si la partición /boot tiene poco espacio libre, se puede desactivar la generación de la
imagen de reserva comentando las líneas correspondientes en /etc/mkinitcpio.d/linux.preset. Si con
eso no basta, habrá que redimensionar las particiones.)
sudo systemctl reboot
nvidia-smi
sudo pacman -S virtualgl
glxspheres64
Tearing
El screen tearing es cuando en la pantalla se muestran a la vez partes de fotogramas distintos.
Este problema se notaba mucho al ver vídeos en el monitor conectado por HDMI. Pruébalo con el vídeo https://youtu.be/MfL_JkcEFbE y con la web https://www.vsynctester.com.
Configuración del navegador
Comprueba si activar
layers.acceleration.force-enableden elabout:configde Firefox mejora algo.Force composition
Esta opción puede aumentar la latencia, pero fue lo que resolvió mi problema.
Comprueba la configuración actual:
$ 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}Activa
ForceCompositionPipeline(oForceFullCompositionPipeline):nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +1920+0 { ForceCompositionPipeline = On }"El desplazamiento
+1920+0es porque la pantalla del portátil es Full HD y está a la izquierda del monitor externo.Comprueba la nueva configuración:
$ 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}Añade este comando a un archivo que se ejecute al arrancar, como
autostart,xinitoXsetup.~/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"Si tus monitores son fijos, puedes usar el
/etc/X11/xorg.conf.d/20-nvidia.conf:Section "Screen" … Option "MetaModes" "nvidia-auto-select +0+0 {ForceFullCompositionPipeline=On}" … EndSection
Gestores de ventanas y entornos de escritorio
Awesome
Para AwesomeWM me gusta la configuración de Gerome Matilla. Está un poco hinchada, pero los diseños son muy bonitos y tienen cosas interesantes.
KDE
KDE Plasma es un entorno de escritorio muy bueno, con una configuración por defecto que me gusta bastante.
Evitaba usar KDE en mis ordenadores antiguos porque no era lo bastante ligero, pero con mi hardware actual eso ya no es un gran problema.
Recomiendo instalar estos paquetes:
sudo pacman -S ark \
dolphin \
gwenview \
packagekit-qt5 \
plasma-browser-integration \
sddm \
spectacle
El intercambio del Bloq Mayús por el ESC se puede hacer en
System Settings » Keyboard » Advanced » Caps Lock behavior » Swap Esc and Caps Lock.
Instala kdeconnect en el ordenador y en los dispositivos Android para sincronizar notificaciones,
compartir archivos, compartir el portapapeles, usar el Android como ratón y teclado, entre otras
cosas.
Prueba las opciones OpenGL y XRender en
System Settings » Hardware » Display and Monitor » Compositor » Rendering backend. Seguramente la
mejor opción sea OpenGL, aunque he leído casos de problemas con tarjetas Nvidia.
Si no quieres que se muestren los controles multimedia en la pantalla de bloqueo, ejecuta este comando:
kwriteconfig5 --file kscreenlockerrc --group Greeter --group LnF --group General --key showMediaControls --type bool false
Si las fuentes se ven muy grandes, fuerza el DPI en System Settings » Fonts » Force font DPI: 96.
Tiling en KDE: Kröhnkite
Mueve la barra de tareas a la parte superior de la pantalla;
Reduce el tamaño de la barra (yo la dejé en 30);
Pulsa con el botón derecho en la barra de tareas, entra en Show Alternatives y elige “Icons-only Task Manager”;
Botón derecho sobre el Pager » Configure Pager
- Show application icons on window outlines
- Text display: Desktop number
System Settings » Workspace » Window Management » KWin Scripts » Get New Scripts…
Activa la configuración de Kröhnkite
mkdir -p ~/.local/share/kservices5/ ln -s ~/.local/share/kwin/scripts/krohnkite/metadata.desktop ~/.local/share/kservices5/krohnkite.desktopEn la pantalla KWin Scripts aparecerá un botón para configurar Khrönkite. Allí hago lo siguiente:
- Activar el Quarter layout
- 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:
Entra en System Settings » Workspace » Workspace Behavior » Virtual Desktops y añade tantos escritorios como quieras (yo dejé 8, mostrados en dos filas);
System Settings » Workspace » Workspace Behavior » Desktop Effects » Focus » Dim Inactive;
System Settings » Workspace » Window Management » Window Behavior » Focus » Multiscreen behavior: Separate screen focus;
Color de los bordes
kwriteconfig5 --file ~/.config/kdeglobals --group WM --key frame 61,174,233 kwriteconfig5 --file ~/.config/kdeglobals --group WM --key inactiveFrame 239,240,241Quitar el tamaño mínimo de las ventanas
- System Settings » Workspace » Window Management » Window Rules
- Add New…
- Window class: Unimportant
- Window types: Normal Window
- Add Properties…
- Minimum Size: Force 0 x 0
Cambia los atajos en System Settings » Workspace » Shortcuts » KRunner
- KRunner:
Meta + R
- KRunner:
Cambia los atajos en 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(usoMeta + F1,…,F8, porqueMeta+Shift+6no funciona con el teclado US intl.) - Window to Previous Screen:
Meta + < - Window to Next Screen:
Meta + > - Krohnkite: Float All:
Meta+Shift+F - Krohnkite: Right: Meta+L (usa
ctrl+alt+Lpara bloquear la pantalla)
- Switch to Desktop n:
Integración con Android
A los dispositivos MTP solo puede acceder un programa a la vez.
Para sincronizar una tableta con Calibre, KDE no puede haber montado antes el dispositivo.
Mata el proceso kiod5.
Gnome
Gnome es un entorno de escritorio completo y bastante popular. No me gusta mucho su configuración por defecto, pero con unos ajustes rápidos queda bastante usable:
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']"
Desde Tweaks, activa la extensión app indicator y los botones de minimizar y maximizar.
Instala Pipewire para que funcione el compartir pantalla en Wayland:
sudo pacman -S pipewire xdg-desktop-portal-gtk
Wine
- Instala algunos de estos paquetes (no todos son necesarios)
$ 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
Instala las fuentes de Windows como se explicó antes
Ejecuta
winetricksCon
zenityinstalado aparecerá una interfaz gráfica que ayuda a crear prefijos, instalar dependencias e instalar y desinstalar programas.Los prefijos se crean en
~/.local/share/wineprefixes/.Llama a un programa desde la línea de comandos
WINEPREFIX="~/.local/share/wineprefixes/nome_prefixo" wine ~/.local/share/wineprefixes/nome_prefixo/drive_c/Programa.exe
VPNs
La mayoría de las VPN tienen su propio instalador (que a menudo ya estará en el AUR).
Cuando sea posible, prefiere WireGuard a 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

Soy un ingeniero informático brasileño radicado en Alemania, apasionado por la tecnología, la ciencia, la fotografía y los idiomas.
Llevo programando cerca de dos décadas, explorando desde apps móviles y desarrollo web hasta aprendizaje automático. Hoy me enfoco en SRE en la nube e ingeniería de datos.
Soy voluntario en las comunidades de open source y Python, ayudando a organizar PyCon DE y PyData Berlin, dando mentorías y contribuyendo con código y traducciones.
En mi blog comparto consejos de Linux, guías de configuración y notas personales que escribí como referencia futura. Espero que también sean útiles para otras personas. El contenido está disponible en varios idiomas.
Visita mi galería para ver algunas de mis fotografías.
Fuera del teclado, me encontrarás en conciertos, tocando el clarinete, en bicicleta, buceando o explorando nuevos lugares, culturas y cocinas.
¡Siempre feliz de conectar! 🙂