Skip to content

Arch Linux notes

Algunas de estas notas pueden estar deactualizadas.

Algún día podría pasar estas cosas a la wiki de Arch Linux si es digno.

Instalación

Instrucciones para instalar Arch Linux (en sistema UEFI) y tips de uso.

Casi todo es de la wiki oficial: https://wiki.archlinux.org/title/Installation_guide

Hay mucho material online, como este: https://denovatoanovato.net/instalar-arch-linux/

Notas de instalación

Previa

Instalar Arch desde un live USB.

Bajar la ISO https://www.archlinux.org/download/ y grabarla con dd.

Si es una reinstalación desde otra partición con Arch, ver: proyectos/linux/arch

Network Shared Pacman Cache

Si hay otra PC con Arch en la LAN, conviene hacer un "Network Shared Pacman Cache":

En la otra compu, correr:

  # ln /var/lib/pacman/sync/*.db /var/cache/pacman/pkg
  $ sudo ufw allow proto tcp from 192.168.2.0/24 to any port 8080  # si UFW está andando
  $ sudo -u http darkhttpd /var/cache/pacman/pkg --no-server-id

Y en la compu donde se está instalando Arch, agregar al principio de /etc/pacman.d/mirrorlist:

  Server = http://mymirror:8080

Reemplazando mymirror por lo que corresponda (la IP de la otra compu por ejemplo).

Conectar a internet

Bootear desde el USB (tecla F10).

wpa_supplicant -B -i wlan0 -c <(wpa_passphrase SSID PASSWORD)
ping google.com

File-system setup

Usar parted /dev/nvme0n1 y el comando print free para ver como esta distribuido el espacio libre. A veces está interrumpido!

Con gdisk /dev/nvme0n1 se puede borrar particiones:

IMPORTANTE: chequear antes si el disco tiene tabla de particion GTP, si no lo es, usar fdisk

  1. Comando m para ayuda
  2. Comando p para ver la tabla
  3. Comando i para chequear que una particion es lo que es (se nombran por número, no por nombre)
  4. Comando d para borrar.
  5. Comando w para guardar y salir.

Crear particiones. Por ejemplo, para crear una partición EFI:

  1. Comando n para una nueva particion.
    1. Numero de aprticion: por defecto
    2. Sector de inicio: por defecto
    3. Sector final: +512M
    4. Hexcode: ef00 (para el EFI), el valor por defecto 8600 para Linux Filesystem, o 8302 para /home.
  2. Repetir para cada una de las particiones necesarias.

Para más info sobre hexcodes de MBR y GPT en gdisk, ver: https://askubuntu.com/questions/703443/gdisk-hex-codes

Para más info sobre particiones EFI, ver: proyectos/linux

Ahora formatear las particiones usando mkfs, y montarlas en /mnt:

lsblk  # para ver los nombres de las particiones en /dev

mkfs.ext4 /dev/nvme0n1p6  # Root
mount /dev/nvme0n1p6 /mnt

mkfs.ext4 /dev/nvme0n1p7  # Home
mkdir /mnt/home
mount /dev/nvme0n1p7 /mnt/home

mkfs.fat -F32 /dev/nvme0n1p5  # EFS for Arch's /efi
mkdir /mnf/efi
mount /dev/nvme0n1p5 /mnt/efi

También me hice una particion de 5gb para el cache de pacman: /usr/local/var/cache/pacman/pkg

  mount /dev/nvme0n1p7 /mnt/usr/local/var/cache/pacman

Esa hay que montarla después del pacstrap me parece.

Instalar

Acá quizás quiera hacer un pacstrap más completo y omitir los pacman más adelante:

# Mínimo
pacstrap /mnt base linux linux-firmware base-devel dosfstools
# Extendido
pacstrap /mnt base linux linux-firmware base-devel dosfstools nano grub efibootmgr os-prober ntfs-3g intel-ucode networkmanager zsh zsh-completion pacman-contrib

fstab y chroot

genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt
passwd

Localizacion y red

ln -sf /usr/share/zoneinfo/America/Buenos_Aires /etc/localtime
hwclock --systohc

nano /etc/locale.gen  # en_US.UTF-8 y es_AR.UTF-8
locale-gen 
nano /etc/locale.conf  # LANG=en_US.UTF-8

nano /etc/hostname
#myhostname
nano /etc/hosts
#127.0.0.1  localhost
#::1        localhost
#127.0.1.1  myhostname.localdomain  myhostname

systemctl enable NetworkManager.service

Bootloader

sudo pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=archGRUB
pacman -S os-prober ntfs-3g intel-ucode
grub-mkconfig -o /boot/grub/grub.cfg
cat /boot/grub/grub.cfg  | grep ucode
cat /boot/grub/grub.cfg  | less
mkinitcpio -P

Reiniciar

exit # salir del chroot, desmontar todo y reiniciar
umount -R /mnt
reboot

nmcli WiFi

systemctl enable NetworkManager.service
systemctl start NetworkManager.service

nmcli device wifi list
nmcli device wifi connect "EL SSID DE TU WIFI" password CONTRASEÑΑ hidden yes
nmcli device wifi list
ping google.com

Crear usuario

sudo pacman -S zsh
useradd -m -s /bin/zsh TU_USUARIO
passwd TU_USUARIO

EDITOR=nano visudo

Agregar TU_USUARIO ALL=(ALL) ALL y Defaults rootpw, y cambiar de usuario:

su TU_USUARIO

Opcionalmente se puede elegir los mirrors más rápidos, pero toma un tiempo:

Rank mirrorlist

sudo pacman -S pacman-contrib
cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bkp
rankmirrors -n 6 /etc/pacman.d/mirrorlist.bkp > /etc/pacman.d/mirrorlist
pacman -Syyu

Mirrorlist oficial: https://archlinux.org/mirrorlist/

Notas de mudanza o backup

Conservé mis particiones /home y /data tal cual.

También la partición /efi pero le instalé otro GRUB (ver archGRUB2 abajo) y generé el grub.cfg para el nuevo Arch.

Cuando todo salió bien, borré la vieja partición / (y la del pacman cache), y extendí la nueva partición root para que ocupe ese espacio.

Vino bien tener un Ubuntu liveUSB para algunas cosas.

System setup

Improvisé una versión mia de esta guía:

Desde el Arch viejo (Arch1) borré todas las particiones de Windows (finalmente) liberando 80 GB de espacio.

Con un pendrive armé un Ubutu 20.04 al inicio, en una partición chica y reemplazando al Windows, solo por si rompía todo accidentalmente.

Instalé arch-install-scripts.

Con KDE partition manager hice una particion de 80 GB para / y la monté en /mnt con el comando mount.

Después monté /efi en /mnt/efi:

  • sudo mkdir /mnt/efi
  • sudo mount /dev/nvme0n1p4 /mnt/efi

Luego corrí pacstrap:

sudo su
pacstrap /mnt base linux linux-firmware base-devel dosfstools sudo nano grub efibootmgr os-prober ntfs-3g intel-ucode intel-undervolt networkmanager bash-completion nmon nmap mlocate pacman-contrib xorg xf86-video-intel xorg-xinit plasma partitionmanager dolphin firefox openssh sshfs

Para el fstab nuevo, hice:

sudo su
genfstab -U /mnt >> /mnt/etc/fstab

Luego abrí /etc/fstab con nano, copié todo excepto lo del viejo root, y lo pegué al final de /mnt/etc/fstab.

Entré en el nuevo root con arch-chroot /mnt.

Luego:

systemctl enable NetworkManager.service
grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=archGRUB2
mkdir /data
grub-mkconfig -o /boot/grub/grub.cfg
mkinitcpio -P

Agregar mi usuario con useradd MIUSUARIO y ponerle contraseña con passwd.

Agregar el usuario a sudoers con visudo.

Reiniciar y seleccionar el nuevo GRUB para bootear con el bootmenu del BIOS.

System backup

Configuraciones importantes para

sudo cp /etc/pacman.d/mirrorlist* /mnt/etc/pacman.
sudo cp /etc/hostname /mnt/etc/
sudo cp /etc/hosts /mnt/etc/hosts
sudo cp /etc/ssh/sshd_config /mnt/etc/ssh/sshd_config
sudo cp /etc/NetworkManager/system-connections /mnt/etc/NetworkManager/system-connections
sudo cp /etc/intel-undervolt.conf /mnt/etc/intel-undervolt.conf
# /etc/ImageMagick-7/policy.xml
# /etc/modprobe.d/modprobe.conf
# /etc/pulse/daemon.conf
# /etc/pulse/default.pa
# /etc/nsswitch.conf

Post-install

Cosas para hacer post-instalación:

  • Nuevo usuario, agregar a sudoers.
  • Cambiar sudoers para que tome rootpw y no la del usuario nuevo.
  • Revisar la wiki de plasma para las fuentes, para compatibilidad con qt4 y gtk, y quitar los bordes feos.

Cosas para poder imprimir y escanear (sane iscan skanlite?)

CLI tools

sudo pacman -S nmon nmap mlocate lsusb

X11 o Wayland

Xorg/KDE: se puede instalar el "grupo" o mirarlo para elegir qué instalar del mismo

sudo pacman -S xorg xf86-video-intel plasma xorg-xinit

Para Wayland:

pacman -S xf86-video-intel xorg plasma plasma-wayland-session 
# Iniciar en Wayland
XDG_SESSION_TYPE=wayland dbus-run-session startplasma-wayland

Aplicaciones

Un browser:

sudo pacman -S firefox

Un emulador de terminal:

sudo pacman -S konsole

Del grupo kde-applications instalé algunos:

  sudo pacman -S ark dolphin dolphin-plugins ffmpegthumbs filelight gwenview kaccounts-integration kbackup kcalc kcharselect kcolorchooser kcron kdenlive kio-extras kolourpaint kompare konsole ksystemlog kwalletmanager okular print-manager signon-kwallet-extension spectacle yakuake kwallet kwallet-pam ksshaskpass networkmanager-openvpn

ark
dolphin
dolphin-plugins
ffmpegthumbs
filelight
gwenview
kaccounts-integration
kbackup
kcalc
kcharselect
kcolorchooser
kcron
kdenlive
kio-extras
kolourpaint
kompare
konsole
ksystemlog
kwalletmanager
kwallet kwallet-pam ksshaskpass
okular
print-manager
signon-kwallet-extension
spectacle
yakuake

Instalar programas favoritos:

sudo pacman -S  deluge python-cairo git partitionmanager telegram-desktop openssh sshfs mlocate firefox chromium minidlna kwalletmanager kwallet kwallet-pam ksshaskpass rsync kup syncthing gtk2 gtk3 flatpak sane skanlite hplip redshift qt5-graphicaleffects jre-openjdk-headless vlc imagemagick filezilla obs-studio

deluge python-cairo
git
partitionmanager
telegram-desktop
openssh sshfs
mlocate
firefox chromium
minidlna
bup rsync kup syncthing
gtk2 gtk3
flatpak  # Para spotify, por ejemplo.
sane skanlite hplip
redshift qt5-graphicaleffects
jre-openjdk-headless
vlc
imagemagick

Media:

sudo pacman -S inkscape gimp vlc kdenlive handbrake krita blender simplescreenrecorder audacity libreoffice-still imagemagick ardour ffmpeg minidlna breeze-gtk

Pulseaudio:

sudo pacman -S pulseaudio pulseaudio-alsa pulseaudio-bluetooth pavucontrol-qt

Otros: (varios repetidos)

base-devel bash-completion xorg xf86-video-intel mesa networkmanager plasma plasma-nm firefox chrome vlc bup rsync kup gparted sublime text y addons deluge inkscape gimp krita imagemagick shotwell pycharm-community-edition zotero python3 python-pandas python-pip python-regex python-virtualenv python2-lxml python2-numpy python2-virtualenv

Display manager y startx

Para inhabilitar el login grafico:

systemctl set-default multi-user.target

Para iniciar KDE:

Editar .xinitrc

exec startplasma-x11

Y ejecutar:

startx

AUR Yay!

Instalar YAY:

git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

Cosas copadas que están ahí:

yay -S printrun zotero gitkraken sublime-text-3 rstudio-desktop-bin

Oh-my-zsh:

yay -S oh-my-zsh-git
sh /usr/share/oh-my-zsh/tools/install.sh

Serial permissions

Slic3rPE, Pronterface y Arduino IDE requieren acceso a estas cosas.

https://manual.prusa3d.com/Guide/Upgrading+the+firmware+v1.4/66?lang=en

Para que Slic3er pueda actualizar el firmware de la Impresora Prusa MK3 hay que agregar mi usuario al grupo uucp:

sudo gpasswd -a TU_USUARIO uucp

Networking

Wifi suddenly stopped working

De repente, dejó de funcionar internet, sin errores ni otra pista.

Corriendo "systemctl status wpa_supplicant" y después "rfkill list", me encontré con que el wifi estaba bloqueado, a la "Soft blocked".

Resulta que en el archivo /var/lib/NetworkManager/NetworkManager.state de NetworkManager estaba configurado "WirelessEnabled=false". Yo ni siquiera estaba usando NM, estaba usando netctl, pero según esta respuesta igual puede tener efecto: https://askubuntu.com/a/1143301/655678

La solución fué modificarlo para que diga "WirelessEnabled=true". Quedó como se muestra a continuación:

[main]
NetworkingEnabled=true
WirelessEnabled=true
WWANEnabled=true

Wifi Hotspot

create_ap en Arch es muy fácil de usar. Permite estar conectado a otra red wifi como cliente, mientras tira wifi a otro dispositivo :) grosso.

Sysadmin stuff

Para que sudo pida la password de root y no la del usuario al ejecutar cosas con sudo: https://superuser.com/questions/161593/how-do-i-make-sudo-ask-for-the-root-password

systemd

Estoy usando esto para armar un python script como servicio: https://github.com/torfsen/python-systemd-tutorial

Una carpeta para poner los servicios/units es en .config/systemd/user/.

Comandos utiles:

nano .config/systemd/user/python_demo_service.service  # el servicio
systemctl --user daemon-reload  # para que systemd encuentre o actualice el archivo ".service" nuevo.
sudo loginctl enable-linger $USER  # para independizar los servicios del usuario de que se loguee o no.
journalctl --user-unit python_demo_service # una forma de ver los logs del servicio
grep 'Python Demo Service' /var/log/syslog # otra forma de ver los logs

Script: nano .config/systemd/user/python_demo_service.service

Lo de siempre, pero con --user en ese tutorial:

systemctl --user start python_demo_service
systemctl --user stop  python_demo_service
systemctl --user restart python_demo_service
systemctl --user status python_demo_service
systemctl --user enable python_demo_service
systemctl --user disable python_demo_service

Power management

Correr scripts antes/despues de ir a dormir: https://wiki.archlinux.org/index.php/Power_management#Hooks_in_/usr/lib/systemd/system-sleep

El sistema se puede suspender desde la CLI:

  sudo systemctl suspend

WiFi singal strength

wavemon

https://askubuntu.com/a/169189/655678

NetworkManager

restart:

sudo systemctl restart NetworkManager.service

Sirve para cuando no aparecen la lista de WiFis.

Usar dos redes WiFi simultáneamente

Script funcional completo:

sudo iw dev wlp1s0 interface add wlp1s1 type managed # usé este
sudo ip link set wlp1s0 down
sudo ip link set dev wlp1s0 address fa:ba:ba:ba:a2:0b
sudo ip link set wlp1s0 up
sudo ip link set wlp1s1 down
sudo ip link set dev wlp1s1 address fa:ca:ca:ca:a2:0b
sudo ip link set wlp1s1 up
nmcli connection up uuid "9803b644-74ab-4442-be21-69cca77954d9" --ask ifname "wlp1s1"  # Linksys17346

Añadir/borrar interfaz virtual:

  sudo iw dev wlp1s0 interface add wlp1s1 type station
  sudo iw dev wlp1s0 interface add wlp1s1 type managed # usé este
  sudo iw dev wlp1s1 del

Cambiar MAC con "ip" (si hace falta).

  sudo ip link set wlp1s0 down
  sudo ip link set dev wlp1s0 address fa:ba:ba:ba:a2:0b
  sudo ip link set wlp1s0 up

  sudo ip link set wlp1s1 down
  sudo ip link set dev wlp1s1 address fa:ca:ca:ca:a2:0b
  sudo ip link set wlp1s1 up

Cambiar MAC con "macchanger"

  sudo pacman -S macchanger
  sudo macchanger -r wlp1s1

Lista conexiones con "nmcli":

  nmcli connection show

Lista dispositivos:

  nmcli device

Lista de redes wifi disponibles

  nmcli device wifi list

Conctarse a una red:

Fibertel WiFi953 2.4GHz

  nmcli connection up uuid "3a01be1d-8ae0-4bb4-8210-4d1ddab15993" --ask ifname "wlp1s0"

Linksys17346

  nmcli connection up uuid "9803b644-74ab-4442-be21-69cca77954d9" --ask ifname "wlp1s1"

Nota: no toma el argumento iface "wlp1s1", dice que es invalido.

https://wiki.archlinux.org/index.php/NetworkManager#Additional_interfaces

El problema es que se no se llama así, el correcto es ifname.

OpenVPN

El comando push "route ..." puede usarse varias veces en server.conf para poder pasar varios rangos de IPs que no se puedan representar simplemente con un par IP/mask.

IPs CIDR y Subnets

Herramienta:

CPU

Información con lscpu

Governor

  sudo pacman -S cpupower
sudo cpupower frequency-set -g performance
cpupower frequency-info

Undervolt

As found at: https://wiki.archlinux.org/title/Undervolting_CPU

  sudo pacman -S intel-undervolt

Fui bajando los valores en /etc/intel-undervolt.conf de a 20 mV hasta llegar a esto:

undervolt 0 'CPU' -120
undervolt 1 'GPU' 0
undervolt 2 'CPU Cache' -120
undervolt 3 'System Agent' -120
undervolt 4 'Analog I/O' -120

Repetir lo siguiente hasta llegar a no menos de -150 mV (puede ser más o menos, varía entre compus).

  1. Configurar nuevos valores de voltaje.
sudo nano /etc/intel-undervolt.conf
sudo intel-undervolt read  # verificar valores actuales
  1. Aplicar cambios y poner a prueba el sistema con los nuevos valores.
## stress --cpu 4 &  # para ver el descenso de temperatura, empezar stress antes de aplicar cambios
sudo intel-undervolt apply  # aplicar valores nuevos
stress --cpu 4  # poner a prueba el sistema
sudo systemctl enable intel-undervolt.service # cargar los cambios al reiniciar

Está bueno ejecutar stress mientras se aplica el undervolt, para ver el efecto en la temperatura en vivo; esa supervisión se puede hacer con ksysguard system monitor de KDE.

  1. En teoría hay que repetir lo anterior hasta que el sistema crashee, pero me quedé contento con que el CPU quedara bajo 70°C a -120 mV.

Cosas que leí:

zram en Arch

Interesante para cuando me crashea la compu con esos scripts horribles de R.

https://wiki.archlinux.org/index.php/Improving_performance#Zram_or_zswap

https://wiki.archlinux.org/index.php/Swap#systemd-swap

Layouts, Xmodmap y XKB

Se movio a proyectos/linux/keyboard-layouts

Filesystem

Para migrar home a otra particion https://askubuntu.com/questions/205841/how-do-i-mount-a-folder-from-another-partition

Para linkear carpetas de una particion a otra # mount --bind /media/tc1/folder /home/dvad/home $ genfstab / # nano /etc/fstab https://askubuntu.com/questions/205841/how-do-i-mount-a-folder-from-another-partition

EFI

Acá hay un par de versos sobre en qué punto se puede montar la partición EFI https://wiki.archlinux.org/index.php/EFI_System_Partition#Mount_the_partition

Ordenar mi UEFI toda la posta:

Esquema:

  • EFI system partition: fat32 de 512MB.
  • Arch EFI partition: fat32 de 512MB, montada en /efi. Contiene: /efi/EFI/archGRUB/grubx64.efi

El bootloader de Arch se instaló en la partición EFI con:

  grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=archGRUB

La configuración de GRUB se instaló en /boot con:

  grub-mkconfig -o /boot/grub/grub.cfg

KDE

Para borrar meta-paquetes de KDE con juegos y eso, hice esto:

Printers

Las impresoras se pueden administrar a través de la web de CUPS. La gente usa eso general.

Con KDE se puede usar el menú de configuración en System Settings:

20230207-103712.png

Para configurar una impresora con KDE, tuve que instalar system-config-printer para evitar un error. Ver: https://bbs.archlinux.org/viewtopic.php?id=218143

Luego elegí configurarla por IP (ver foto). Había otras dos opciones para la misma impresora (que aparece varias veces en la lista).

20230207-103604.png

Automatic screen rotation

  yay -S iio-sensor-proxy-git kded-rotation-git

KDE global shortcuts config file

Setting a shortcut with Meta+Tab resulted in the Tab keypress being interpreted not as part of the shortcut definition, but as a normal "move to next menu item". This way i could not set a shortcut as a plain "Meta + Tab" to switch to another virtual desktop.

So mannually editing the configs file should work:

  nano .config/kglobalshortcutsrc

Find the lines starting with Switch One Desktop and edit them accodringly, for example:

  Switch One Desktop Down=none,Meta+Ctrl+Down,Switch One Desktop Down
  Switch One Desktop Up=none,Meta+Ctrl+Up,Switch One Desktop Up
  Switch One Desktop to the Left=Meta+Shift+Tab,Meta+Ctrl+Left,Switch One Desktop to the Left
  Switch One Desktop to the Right=Meta+Tab,Meta+Ctrl+Right,Switch One Desktop to the Right

Logitech MK470

Se movio a: proyectos/linux/keyboard-layouts

Stylus configuration

sudo pacman -S xf86-input-wacom kcm-wacomtablet

Lista de inputs:

xinput list
xsetwacom list devices

Para probar botones en xinput o xev:

xinput test 11 | grep -v motion  # para ver el stylus
xinput test 17 | grep -v motion  # para ver el eraser
xev -event button

xev devuelve, por defecto, un valor solamente para el segundo botón (desde la punta):

ButtonPress event, serial 40, synthetic NO, window 0x6400001,
root 0x1a0, subw 0x0, time 267011, (84,70), root:(1316,99),
state 0x0, button 2, same_screen YES

ButtonRelease event, serial 40, synthetic NO, window 0x6400001,
root 0x1a0, subw 0x0, time 267216, (88,72), root:(1320,101),
state 0x200, button 2, same_screen YES

xinput hace lo mismo, solo ve el botón de arriba (el más alejado de la punta del stylus).

Ni xev ni xinput detectan el botón de "eraser" como un input. Pero en Krita sucede que el "eraser" funciona: cuando se lo toca, cambia temporalmente a una herramienta que borra, mientras se lo mantenga apretado. Ni dea como funciona.

En Graphic Tablet settings de KDE se puede configurar la acción del "botón 2" que corresponde al botón más alejado. El botón 1 sería la punta del lápiz supongo 🤷 y la acción del eraser no se puede cambiar desde ahí.

Para listar las opciones de configuración del stylus/eraser con xinput:

xinput list-props 11
xinput list-props 17

Para cambiar el eraser a right click con xsetwacom:

xsetwacom get "Wacom HID 50FB Pen eraser" Button 1  # por defecto es button +1
xsetwacom set "Wacom HID 50FB Pen eraser" Button 1 3  # right mouse button
xsetwacom set "Wacom HID 50FB Pen eraser" Button 1 2  # middle mouse button

xsetwacom set no es muy persistente.

A ver con xinput:

 xinput --set-prop "Wacom HID 50FB Pen eraser" "button 1 action" --format=32 --type=int 1572874

Archivos de configuración

La wiki dice que edite 72-wacom-options.conf pero ese archivo no existe. Están:

/usr/share/X11/xorg.conf.d/40-libinput.conf
/usr/share/X11/xorg.conf.d/70-wacom.conf

Según esto, no importa, así que se puede crear /etc/X11/xorg.conf.d/72-wacom-options.conf

Section "InputClass"
    Identifier "local wacom tablet tweaks"

    # Product to configure – supply your own product identifier.
    MatchProduct "Wacom HID 50FB Pen eraser"

    # Driver to use for this device.
    # (Identical to the default, so not essential to mention.)
    Driver "wacom"

    # Configuration options: set button 1 (tip) to middle button
    Option "Button1" "2"
EndSection

O bien:

Section "InputClass"
        Identifier "WACOM OPTIONS pen"
        MatchDriver "wacom"
        MatchProduct "Pen"
        NoMatchProduct "eraser"
        NoMatchProduct "cursor"
EndSection

Section "InputClass"
        Identifier "WACOM OPTIONS pad"
        MatchDriver "wacom"
        MatchProduct "Pad"
EndSection

Section "InputClass"
        Identifier "WACOM OPTIONS eraser"
        MatchDriver "wacom"
        MatchProduct "eraser"
        Option "Button1" "2"
EndSection

Section "InputClass"
        Identifier "WACOM OPTIONS cursor"
        MatchDriver "wacom"
        MatchProduct "cursor"
EndSection

Botón bluetooth

El botón bluetooh funciona completamente por separado. Para probar si el botoncito bluetooth funciona:

sudo libinput debug-events

Al conectarlo por bluetooth dice:

-event21  DEVICE_ADDED     Lenovo Active Pen2 Keyboard       seat0 default group12 cap:k
-event21  DEVICE_REMOVED   Lenovo Active Pen2 Keyboard       seat0 default group12 cap:k

Mientras udevadm monitor muestra esto cuando toco el botón:

KERNEL[1716.637734] add      /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/bluetooth/hci0/hci0:7 (bluetooth)
UDEV  [1716.642903] add      /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/bluetooth/hci0/hci0:7 (bluetooth)
KERNEL[1717.899647] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/bluetooth/hci0/hci0:7 (bluetooth)
UDEV  [1717.902551] remove   /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4:1.0/bluetooth/hci0/hci0:7 (bluetooth)

Parece que el botón bluetooth no anda:

Y xinput test-xi2 no reacciona.

Lenovo Active Pen settings

xsetwacom set "Wacom HID 50FB Pen eraser" Button 1 2  # middle mouse button

20200505-124921.png

Wacom Tablet - map to one display only

Find the tablet name and display name:

20200817-143441.png

xsetwacom --list
# Wacom HID 50FB Pen stylus               id: 10  type: STYLUS    
# Wacom HID 50FB Finger touch             id: 11  type: TOUCH     
# Wacom HID 50FB Pen eraser               id: 18  type: ERASER    
# Wacom Intuos S 2 Pad pad                id: 20  type: PAD       
# Wacom Intuos S 2 Pen stylus             id: 21  type: STYLUS    

Map the tablet to display DP1:

xsetwacom -v set "Wacom Intuos S 2 Pen stylus" MapToOutput DP1

Done!

Read: https://askubuntu.com/questions/852699/map-wacom-intuos-to-one-monitor

Touchpad

Arch configurar touchpad o=con libinput para que reconozca los "taps" https://wiki.archlinux.org/index.php/Libinput#Via_Xorg_configuration_file

Agregar a la sección de touchpad en /usr/share/X11/xorg.conf.d/40-libinput.conf la opción:

   Option "Tapping" "on"

Y reiniciar X

Bluetooth

Ver: https://wiki.archlinux.org/title/Bluetooth

  sudo pacman -S bluez bluez-utils pulseaudio-bluetooth [bluez-hid2hci]
  sudo subl /etc/pulse/system.pa

Agregar:

  ### Load bluetooth modules
  load-module module-bluetooth-policy
  load-module module-bluetooth-discover

Laptop as Bluetooth Speaker

Ver: https://unix.stackexchange.com/questions/205378/use-desktop-as-bluetooth-headset

sudo pacman -S bluez bluez-utils pulseaudio-bluetooth
sudo usermod -a -G pulseaudio $USER
sudo systemctl restart bluetooth

Despues de aparear bien, deberia andar de una!

Notas:

Screencast

Con simple screen recorder, hay que apagar "vsync" en compositor settings para que no haya cosas raras en el video.

Me pasaba que al grabar aparecian y desaparecian muy rapidamente pedazos de otras ventanas o del fondo de pantalla.

Historia de carga de la batería

Ver: https://askubuntu.com/a/47346/655678

Proxy config

El archivo es ~/.config/kioslaverc y contiene:

AutoResume=true
ProxyUrlDisplayFlags=7

[Proxy Settings]
NoProxyFor=web.whatsapp.com,192.168.0.1/16,192.168.10.155,192.168.11.171,157.92.39.145,192.168.12.185,192.168.11.237
Proxy Config Script=
ProxyType=0
ReversedException=false
ftpProxy=ftp://proxy.fcen.uba.ar:8080
httpProxy=http://proxy.fcen.uba.ar:8080
httpsProxy=http://proxy.fcen.uba.ar:8080
socksProxy=

Está así aunque en los settings esté deshabilitado el proxy (i.e. No Proxy).

Automatizar cambios

Setup a crontab as regular user, using crontab -e:

*/1 * * * * ~/Software/Scripts/change_proxy.sh

Crear un script en ~/Software/Scripts/change_proxy.sh que contenga lo siguiente:

#!/bin/bash

# set crontab
# */1 * * * * ~/Software/Scripts/change_proxy.sh

LOGFILE="${HOME}/.config/wpa_cli_status.log"
UUID=`nmcli --fields UUID,DEVICE connection show --active | grep wlp1s0 | cut -d \  -f 1`
DATE=`date`


if [ "$UUID" = '' ]
then
    echo "${DATE} No active WiFi network, leaving unchanged." > "$LOGFILE"
else
    UUID=`cat /home/nicomic/.config/wpa_cli_status.txt | grep uuid | cut -d \= -f 2`
    if [ $UUID = "50afbed1-b648-5948-8d74-492f54975c45" ]
    then
        echo "${DATE} We are connected to IFIBYNE's WiFi, enabling proxy." > "$LOGFILE"
        kwriteconfig5 --file kioslaverc --group 'Proxy Settings' --key ProxyType "1"
    else
        echo "${DATE} We are elsewhere, disabling proxy." > "$LOGFILE"
        kwriteconfig5 --file kioslaverc --group 'Proxy Settings' --key ProxyType "0"
    fi
fi

Usando las notificaciones de KDE5:

#!/bin/bash

# set crontab
# */1 * * * * ~/Software/Scripts/change_proxy.sh

LOGFILE="${HOME}/.config/wpa_cli_status.log"
UUID=`nmcli --fields UUID,DEVICE connection show --active | grep wlp1s0 | cut -d \  -f 1`
DATE=`date`


if [ "$UUID" = '' ]
then
        MESSAGE="${DATE} No active WiFi network, leaving unchanged."
else
        # old stuff UUID=`cat /home/nicomic/.config/wpa_cli_status.txt | grep uuid | cut -d \= -f 2`
        if [ $UUID = "50afbed1-b648-5948-8d74-492f54975c45" ] || [ $UUID = "9f981375-88b1-4e30-8403-55e01612137b" ]
        then
                MESSAGE="${DATE} We are connected to IFIBYNE's WiFi, enabling proxy."
                kwriteconfig5 --file kioslaverc --group 'Proxy Settings' --key ProxyType "1"
        else
                MESSAGE="${DATE} We are elsewhere, disabling proxy."
                kwriteconfig5 --file kioslaverc --group 'Proxy Settings' --key ProxyType "0"
        fi
fi

echo "${MESSAGE}" > "$LOGFILE"
notify-send "${MESSAGE}" -a "IFIBYNE proxy script" -i /usr/share/icons/breeze-dark/status/64/dialog-information.svg

La magia está en kwriteconfig5 y en el 1 al final.

  • 1 significa use manually specified configuration que reside en ~/.config/kioslaverc
  • 0 significa deshabilitar el proxy.

Fuentes:

Video

Chromecast 2015 - Cast offline video

Webcam virtual

sudo pacman -S v4l2loopback-dkms v4l-utils linux-headers
sudo modprobe v4l2loopback
ls -al /dev | grep -i video
ffmpeg -f x11grab -r 15 -s 1280x720 -i :0.0+0,0 -vcodec rawvideo -pix_fmt yuv420p -threads 0 -vf "hflip" -f v4l2 /dev/video2

Con OBS

ls -al /dev | grep -i video

Compilar OBS con un patch... ver: https://blog.jbrains.ca/permalink/using-obs-studio-as-a-virtual-cam-on-linux

Canon EOS 200D y gphoto

En KDE funciona joya.

Tuve que instalar libgphoto2 y gphoto2 para poder bajar fotos.

Con kamera se puede integrar la cámara a KDE (aunque no sé qué hace eso exactamente).

Con entangle se puede sacar fotos con live preview! En la GUI hay atajos para cambiar el foco. La tecla a se usa para accionar el autofoco, pero en mi caso eso hace que todo deje de funcionar.

Leer:

Cannon EOS 200D como webcam

Se puede!

Primero hay que instalar las cosas del loopback, ver comandos más arriba (en la parte de "webcam virtual").

Después correr:

  gphoto2 --stdout --capture-movie | gst-launch-1.0 fdsrc ! decodebin name=dec ! queue ! videoconvert ! v4l2sink device=/dev/video2

Y en OBS se puede ver el resultado:

20210213-133834.png

Los settings de gphoto tienen que configurarse de antemano para tener una buena imagen, no pude cambiarlos on-the-fly.

Por ejemplo:

  gphoto2 --set-config iso=0
  gphoto2 --set-config shutterspeed=34
En modo video hay control manual

Poniendo la perilla en modo video, y corriendo el mismo comando (lo copio a continuacion) se puede cambiar los settings desde la cámara: autofoco, región de foco, iso, shutterspeed, etc.

  gphoto2 --stdout --capture-movie | gst-launch-1.0 fdsrc ! decodebin name=dec ! queue ! videoconvert ! v4l2sink device=/dev/video2

Viene bien porque no lo estaba logrando controlar en el modo "cámara" normal.

Leer

Audio

Pulseaudio

No se reproduce el audio/video

En 2022 se estuvo reemplazando pulseaudio por pipewire, y paquetes como kwin requirieron wireplumber (que interfiere con pulseaudio). Sin embargo pacman no reemplazó pulseaudio por otra cosa, y empezaron los problemas: no se reproducen cosas con audio, no podía cambiar de device, y cosas así.

La solución fue instalar pipewire-pulse, reemplazando a pulseaudio.

Me ayudó mientras tanto:

  systemctl status --user pulseaudio

Chequear si dice algo raro, y correr:

  systemctl restart --user pulseaudio

Monitorear inputs

pactl load-module module-loopback
pactl unload-module module-loopback

Refs:

Deshabilitar Automatic Gain Control (AGC)

Para las videollamadas por meet, esto es lo que jodía mi micrófono.

Pasar música en una videollamada

Ver: https://askubuntu.com/a/258369/655678

pactl load-module module-null-sink sink_name=Virtual1
pactl load-module module-null-sink sink_name=Virtual2
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual1
pactl load-module module-loopback sink=Virtual2

Mono audio output

Ver: https://askubuntu.com/questions/17791/can-i-downmix-stereo-audio-to-mono

$ pacmd list-sinks | grep name:
        name: <alsa_output.usb-Focusrite_Scarlett_Solo_USB-00.analog-stereo>
        name: <alsa_output.pci-0000_00_1f.3.analog-stereo>
$ pacmd load-module module-remap-sink sink_name=mono master=alsa_output.usb-Focusrite_Scarlett_Solo_USB-00.analog-stereo channels=2 channel_map=mono,mono

Y aparece un nuevo device en pulseaudio:

20220512-081724.png

Audio de una ventana en OBS

https://obsproject.com/forum/threads/capture-single-pulseaudio-stream.35170/

pactl load-module module-null-sink sink_name="webstream_sink" sink_properties=device.description="web_stream"
pactl list short sinks
pactl load-module module-loopback source=webstream_sink.monitor sink=alsa_output.pci-0000_00_1f.3.analog-stereo rate=44100

Y en OBS:

20210323-103601.png

JACK

Instalar y configurar

Hay dos "versiones" de jack para instalar:

  • jack
  • jack2

Instalar Jack, Cadence, Ardour, etc.

# 2019
sudo pacman -S jack2 alsa-utils pulseaudio-jack cadence pavucontrol cpupower patchage alsa-plugins ardour

# 2020
sudo pacman -S jack2 python-dbus cadence pulseaudio-jack gst-plugins-good alsa-plugins pavucontrol cpupower

Para que funcione bien con pulseaudio:

The ALSA audio bridge should be set to ALSA -> PulseAudio -> JACK, and the PulseAudio bridge should be enabled.

Make sure in pavucontrol that all output devices besides Jack sink are muted, and all input devices besides Jack input are muted.

Start JACK using the Force Restart button, and if it starts successfully PulseAudio programs should begin outputting to JACK.

Para que funciones bien con ALSA:

To allow Alsa programs to play while jack is running you must install the jack plugin for alsa with alsa-plugins.

Para que funcione bien con GStreamer:

GStreamer requires the gst-plugins-good package to work with JACK

Jack GUI

https://wiki.archlinux.org/index.php/JACK_Audio_Connection_Kit#A_GUI-based_example_setup

sudo pacman -S jack2 python-dbus
sudo pacman -S cadence

También está qjackctl pero no es recomendado por el tutorial de PulseAudio through Jack.

Guitarix

Metal!

https://sourceforge.net/p/guitarix/wiki/How_to_get_a_tone_that_rocks/

Scarlett Solo

Audio en Arch, configurando Scarlett Solo https://superuser.com/questions/626606/how-to-make-alsa-pick-a-preferred-sound-device-automatically

Muy piola reumen de paquetes para musica en linux https://wiki.archlinux.org/index.php/Professional_audio#Getting_Started

Temas de XRUNs https://askubuntu.com/questions/539406/how-to-avoid-xrun-callback-skips https://community.ardour.org/node/10663

Dejó de andar, y tuve que aplicar el fix por el tema del GDM. sudo mkdir -p ~gdm/.config/systemd/user sudo ln -s /dev/null ~gdm/.config/systemd/user/pulseaudio.socket

Monitorear el input de scarlett solo con pulseaudio https://askubuntu.com/questions/355082/pulseaudio-loopback-unload-audio-output-devices el único tema es que tiene alta latencia!

Instalar el kernel realtime linux-rt del AUR https://wiki.archlinux.org/index.php/Professional_audio#Realtime_Kernel https://wiki.archlinux.org/index.php/Realtime_kernel#Installation https://bbs.archlinux.org/viewtopic.php?id=191954 http://allanmcrae.com/2015/01/two-pgp-keyrings-for-package-management-in-arch-linux/

Parece que faltaba instalar "patch" https://bbs.archlinux.org/viewtopic.php?id=46248

Cambiar la prioridad (niceness) de un proceso existente con "renice" donde -20 es el máximo, 0 es el default y 19 el mínimo (en prioridad) https://www.nixtutor.com/linux/changing-priority-on-linux-processes/

Realtime Kernel

Yaourt hizo timeout esperando la contraseña después de compilar y hay que empezar de nuevo (qué estupidez) Mejor lo hago a mano y listo: https://wiki.linuxfoundation.org/realtime/start https://stackoverflow.com/questions/28136815/linux-kernel-how-to-obtain-a-particular-version-right-upto-sublevel https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?h=linux-4.13.y&id=b762de8221691f3fabb3ea583ac777c0baea3641

Para compilar un kernel se puede usar varios cores con la opcion -j de make https://stackoverflow.com/questions/2499070/gnu-make-should-the-number-of-jobs-equal-the-number-of-cpu-cores-in-a-system https://wiki.archlinux.org/index.php/makepkg#Parallel_compilation

Hice git clone de acá https://aur.archlinux.org/packages/linux-rt/

Y las intrucciones de acá https://wiki.archlinux.org/index.php/Kernels/Arch_Build_System

Al principio estaba usando bastante CPU, pero después bajó a ~13% total (igual que cuando lo arranqué por yaourt) ¿no le dio bola a la opción -j4? ¿-j8 hubiera sido mejor?

Éxito! despues de editar la grub tengo casi nada de xruns.

Buscando "tolerable xruns" encontré un blog gracioso y útil que pone a punto su setup: "Enter: THE SCIENTIFIC METHOD" http://mountainbikesandtrombones.blogspot.com.ar/2012/03/problems-with-xrun.html https://wiki.archlinux.org/index.php/CPU_frequency_scaling#cpupower https://bbs.archlinux.org/viewtopic.php?id=201100 https://bbs.archlinux.org/viewtopic.php?id=159482

Instalé cpupower le di systemctl enable ... y las frecuencias pasaron de 800mhz a 3.47ghz :) Tengo dos governors: powersave y performance, tendré que cambiarlos manualmente o hacer un script:

sudo cpupower frequency-set -g performance
cpupower frequency-info

A fin de cuentas, sigo teniendo algunos xrun, pero también graba de corrido sin uno solo.

Bluetooth

Temas del Bluetooth https://wiki.archlinux.org/index.php/bluetooth#Configuration_with_a_graphical_front-end https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_not_working_with_PulseAudio https://antergos.com/wiki/hardware/bluetooth/get-bluetooth-headphone-auto-connected-with-a2dp/

Para que funcionara el bluetooth: Ma faltaba instalar pulseaudio-bluetooth https://bbs.archlinux.org/viewtopic.php?id=222083 Y tuve que conectarme por bluetoothctl https://wiki.archlinux.org/index.php/Bluetooth_headset#A2DP_sink_profile_is_unavailable

Canon ESO 200D (Rebel SL2)

Instalé todo: sudo pacman -S libgphoto2 gphoto2 kamera digikam

Y finalmente al conectar la cámara pude bajar las fotos clickeando en la notificacion de KDE que decía "bajar fotos con digikam".

20220314-094750.png

Antes configuré la Canon en los settings de KDE. No sé si eso influyó.

Nunca la pude "montar" o abrir en Dolphin.

Bajar fotos con cable USB:

Java

Cambiar la versión de java que se usa por defecto:

archlinux-java status
sudo archlinux-java set java-8-openjdk/jre
sudo archlinux-java set java-11-openjdk

Ver: https://wiki.archlinux.org/index.php/Java

R y RStudio

Algunos paquetes requieren instalar cosas desde pacman:

sudo pacman -S imagemagick gsfonts  # para magick, https://github.com/rstudio/r-system-requirements/pull/82
sudo pacman -S gcc-fortran tk libgit2

Si no están instalados ya, posiblemente sean importantes:

sudo pacman -S git base-devel openssh

Para V8, que solo está en el AUR, se puede hacer esto: https://stackoverflow.com/a/63203853/11524079

# For Linux: download libv8 during installation
Sys.setenv(DOWNLOAD_STATIC_LIBV8=1)
install.packages("V8")