Skip to main content
  1. Notes/

Archlinux

·

Arch Linux

Systemd Unit files #

A nice and informative article about unit files.

https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

Unlock locked user accounts #

If your user account is locked, wait 15 minutes (usually) and you can try again.

If you need to unlock your account immediately: run this command (if you have another user that can login on the box):

$ sudo faillock --user dominic --reset

Calling faillock without arguments show an overview.

Predictable network interfaces #

Get back the “old” interface names like eth0 or wlan0 with systemd.link(5) .

Ethernet #

This makes my ethernet interface be called eth0 again.

Create /usr/lib/systemd/network/80-ether.link with this content:

[Match]
Type=ether

[Link]
NamePolicy=keep kernel

Reboot.

Wireless #

This makes my wireless interface be called wlan0 again.

Create /usr/lib/systemd/network/80-wlan.link with this content:

[Match]
Type=wlan

[Link]
NamePolicy=keep kernel

Reboot.

Setup WiFi networks #

Using iwctl #

$ iwctl device list
$ iwctl station wlan0 scan
$ iwctl station wlan0 get-networks
$ iwctl station wlan0 connect {ssid}

Using nmcli (NetworkManager) #

$ nmcli device wifi list
$ nmcli device wifi rescan
$ nmcli device wifi connect {ssid} --ask
$ nmcli device wifi show-password

Last command shows the connected SSID and a QR-code within the terminal.

Using NetworkManager #

We create some files in /etc/NetworkManager/conf.d:

Using iwd as the WiFi backend #

wifi_backend.conf:

[device]
wifi.backend=iwd

Using dhcpcd as DHCP client #

dhcp-client.conf:

[main]
dhcp=dhcpcd

Using systemd-networkd #

# wpa_passphrase MyNetwork SuperSecretPassphrase > /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
# systemctl enable wpa_supplicant@wlan0

Create /etc/systemd/network/00-wireless-dhcp.network and fill it with:

[Match]
Name=wlan0

[Network]
DHCP=yes

Enable systemd-networkd:

# systemctl enable systemd-networkd.service

Reboot.

Using the CPU with hashcat #

$ hashcat -I
hashcat (v6.2.6) starting in backend information mode

OpenCL Info:
============

OpenCL Platform ID #1
  Vendor..: Intel(R) Corporation
  Name....: Intel(R) OpenCL Graphics
  Version.: OpenCL 3.0

  Backend Device ID #1
    Type...........: GPU
    Vendor.ID......: 8
    Vendor.........: Intel(R) Corporation
    Name...........: Intel(R) UHD Graphics 620
    Version........: OpenCL 3.0 NEO
    Processor(s)...: 24
    Clock..........: 1150
    Memory.Total...: 14368 MB (limited to 2047 MB allocatable in one block)
    Memory.Free....: 7136 MB
    Local.Memory...: 64 KB
    OpenCL.Version.: OpenCL C 1.2
    Driver.Version.: 24.31.30508

This is what I’ve seen on hashcat -I for a long time now but I never dig myself into this “problem” – but today I tried to find the reason why there is no CPU listed on my Carbon X1 Gen7 laptop.

After a few minutes doing some trial & error I finally got the CPU listed after installing pocl.

$ paru -S pocl

Or, on my gaming laptop running a cheap clone of Ubuntu:

$ sudo apt install pocl-opencl-icd

Now my hashcat -I looks like this:

$ hashcat -I                                                                                                                                        took 6s
hashcat (v6.2.6) starting in backend information mode

OpenCL Info:
============

OpenCL Platform ID #1
  Vendor..: Intel(R) Corporation
  Name....: Intel(R) OpenCL Graphics
  Version.: OpenCL 3.0

  Backend Device ID #1
    Type...........: GPU
    Vendor.ID......: 8
    Vendor.........: Intel(R) Corporation
    Name...........: Intel(R) UHD Graphics 620
    Version........: OpenCL 3.0 NEO
    Processor(s)...: 24
    Clock..........: 1150
    Memory.Total...: 14368 MB (limited to 2047 MB allocatable in one block)
    Memory.Free....: 7136 MB
    Local.Memory...: 64 KB
    OpenCL.Version.: OpenCL C 1.2
    Driver.Version.: 24.31.30508

OpenCL Platform ID #2
  Vendor..: The pocl project
  Name....: Portable Computing Language
  Version.: OpenCL 3.0 PoCL 6.0  Linux, Release, RELOC, LLVM 18.1.8, SLEEF, DISTRO, POCL_DEBUG

  Backend Device ID #2
    Type...........: CPU
    Vendor.ID......: 128
    Vendor.........: GenuineIntel
    Name...........: cpu-haswell-Intel(R) Core(TM) i7-8665U CPU @ 1.90GHz
    Version........: OpenCL 3.0 PoCL HSTR: cpu-x86_64-pc-linux-gnu-haswell
    Processor(s)...: 8
    Clock..........: 4800
    Memory.Total...: 13716 MB (limited to 2048 MB allocatable in one block)
    Memory.Free....: 6826 MB
    Local.Memory...: 256 KB
    OpenCL.Version.: OpenCL C 1.2 PoCL
    Driver.Version.: 6.0

Paru / Pacman #

Remove orphans #

# pacman -Qdtq | sudo pacman -Rns -

If there is a package listed that you do not want to remove, it can be excluded from the list of orphans by marking it as explicitly installed:

# pacman -D --asexplicit <package>

Found somewhere else #

I found the following snippets on andreas-mausch.de and I had to copy them to my notes archive here…

Install #

Edit PKGBUILD and skip checksum check #
$ paru -S gnucash-xbt --fm helix --mflags "--skipchecksums"
uninstall (-n: no backup files; -s: remove dependencies) #
$ paru -Rns <package>

Mirrors #

select fastest #
$ sudo pacman-mirrors --fasttrack
select by country #
$ sudo pacman-mirrors --country Germany,France,Austria

Search repo #

package details #
$ paru -Si <package>
list files #
$ paru -Fl <package>
find package for file #
$ pkgfile <filename>
search command #
$ paru -F glxinfo

Installed packages #

search package #
$ paru -Qs <package>
package details #
$ paru -Qii <package>
list files #
$ paru -Ql <package>
Show package for file or binary #
$ pacman -Qo helix
orphans #
$ paru -Qdt
foreign packages (usually aur) #
$ pacman -Qm
manually installed #
$ pacman -Qet

-Q, --query: Query the package databasey
-e, --explicit: Restrict or filter output to explicitly installed packages
-t: not a dependency (i.e., top-level packages)

manually installed (aur and non-aur) #

https://www.reddit.com/r/ManjaroLinux/comments/fzog8g/get_a_list_of_packages_you_installed_yourself/

$ pacman -Qqe | grep -v "$(awk '{print $1}' /desktopfs-pkgs.txt)"

-Q, --query: Query the package databasey
-q, --quiet
-e, --explicit: Restrict or filter output to explicitly installed packages

Clean-up #

clear cache #
$ paru -Sc

Official repo vs. AUR #

repo #
$ paru -[...] --repo
aur #
$ paru -[...] --aur

Blocking IPs from a list with ipset #

Using ipset should increase performance on the box, also using the raw table should not create useless states as for what I understand from the source article on serverfault.com.

$ sudo ipset -N badips iphash
$ while read ip; do sudo ipset -A badips "$ip"; done < blocked.txt
$ sudo iptables -t raw -I PREROUTING -m set --match-set badips src,dst -j DROP
$ sudo iptables-save -f /etc/iptables/iptables.rules

Enable iptables in case it is not running yet.

$ sudo systemctl enable --now iptables.service

Also make the ipset configuration persistent:

$ sudo ipset save -file /etc/ipset.conf
$ sudo systemctl enable ipset.service

Reboot to test its persistency.

Do not manage one specific USB dongle #

99-unmanaged-devices.conf:

[keyfile]
unmanaged-devices=mac:xx:xx:xx:xx:xx:xx

Prefer local DNS instead of systemd-resolved defaults #

https://unix.stackexchange.com/a/442599

CPU frequency scaling #

https://wiki.archlinux.org/title/CPU_frequency_scaling

YubiKeys #

https://wiki.archlinux.org/title/YubiKey

LunarVim custom key mappings #

I know, this is an Arch Linux post but hey, I don’t care.

https://github.com/LunarVim/LunarVim/issues/2602

Mounting nfs shares with systemd #

https://wiki.archlinux.org/title/NFS#Mount_using_/etc/fstab_with_systemd

Arch Linux ARM installation on a Raspberry Pi 2 #

The wiki page is for Raspberry Pi 4.

https://archlinuxarm.org/platforms/armv8/broadcom/raspberry-pi-4

Create a 32-bit Wine prefix #

I create my wine prefixes usually like this:

$ export WINEPREFIX=/home/dominic/.wine-winlink
$ export WINEARCH=win32
$ wine wineboot

Installing multiple ruby versions #

I came to the point to test an older website from me and it was made with Jekyll which I had to install quickly. Problems occured with OpenSSL and I finally managed to install ruby version 2.7.1 and 3.0.0 in my home directory.

$ rvm pkg install openssl
$ rvm install "ruby-3.0.0" --with-openssl-dir=$HOME/.rvm/usr
$ rvm install "ruby-2.7.1" --with-openssl-dir=$HOME/.rvm/usr

Later in the desired directory, I re-installed the gems because with ruby 2.7.1 I got another “Directory not found” error.

I had to do this because I used ruby 2.7.1 on one website.

$ bundle install --force

Bigger font for systemd-boot #

Edit /boot/loader/loader.conf:

console-mode 0

Possible settings are:

ValueDescription
0Standard UEFI 80x25 mode
180x50 mode, not supported by all devices
2the first non-standard mode provided by the device firmware, if any
autoPick a suitable mode automatically using heuristics
maxPick the highest-numbered available mode
keepKeep the mode selected by firmware (the default)

More details can be found in loader.conf(5) .

Manual sections #

SectionDescription
1Section 1 of the manual describes user commands and tools, for example, file manipulation tools, shells, compilers, web browsers, file and image viewers and editors, and so on
2Section 2 of the manual describes the Linux system calls. A system call is an entry point into the Linux kernel. Usually, system calls are not invoked directly: instead, most system calls have corresponding C library wrapper functions which perform the steps required (e.g., trapping to kernel mode) in order to invoke the system call. Thus, making a system call looks the same as invoking a normal library function.
3Section 3 of the manual describes all library functions excluding the library functions (system call wrappers) described in Section 2, which implement system calls.
4Section 4 of the manual describes special files (devices).
5Section 5 of the manual describes various file formats, as well as the corresponding C structures, if any.
6Section 6 of the manual describes the games and funny little programs available on the system.
7Section 7 of the manual provides overviews on various topics, and describes conventions and protocols, character set standards, the standard filesystem layout, and miscellaneous other things.
Dominic Reich
Author
Dominic Reich
40, male, he/him, construction worker since 2016, electrician before, likes tech stuff and nature. Amateur radio operator since 2019. Uses this website as a digital notebook.

Related Posts

  • Winlink on Android with WoAD // 2025, January 19
    Since I moved from iOS to Android I had to look for another App to test a small Winlink setup. The thumbnail was created with Google AI (Imagen 3).
  • Install LibreTranslate on a VM // 2024, December 7
    Summarized how I finally got LibreTranslate installed on my Archlinux based local mastodon test-instance. I am not affiliated with LibreTranslate – this post reflects my own use case. The thumbnail is a trademark of LibreTranslate.
  • A slim D-STAR gateway on a Raspberry Pi 2 // 2024, February 3
    I wrote down the installation of a forked DStarGateway with a slim dashboard based on Javascript on a Raspberry Pi 2 – using Archlinux.
  • Install WaveLogGate on Arch Linux // 2024, August 18
    There is an app for Linux, Windows and MacOS to connect your wavelog instance to your local computer.
  • Upgrade my weatherstation to WeeWX 5 // 2024, June 30
    Another big move for the weatherstation. The station also moved off the Raspberry Pi 4 and I’m using the SQLite database again (instead of a local or remote MySQL server). The new environment is a virtual machine running on my homeserver.