Raspberry Pi 4 bluetooth madness, part 2

Well, that obsoleted quickly!

I mean the alarm-bluetooth-raspberrypi package. There’s finally a more or less native support for bluetooth in Arch ARM kernel and libraries, so there’s no need for external packages or weird configurations any more. Here’s how to take it in use:

  1. Remove alarm-bluetooth-raspberrypi and/or pi-bluetooth packages.
  2. Remove the line dtoverlay=bcmbt (if present) from /boot/config.txt and add the following line to the same file.

    dtparam=krnbt=on
  3. Make sure that enable_uart=0 is also in /boot/config.txt.
  4. In /boot/cmdline.txt, remove all references to ttyAMA0.
  5. Replace bluez-utils-compat package with standard bluez-utils, unless you really need the old utilities. The system does not need them anymore to work.
  6. Reboot.
  7. Enjoy the working bluetooth!
Posted in Linux | Tagged , , , , | Leave a comment

Raspberry Pi 4 bluetooth madness

There seems to be a lot of problems in getting a working bluetooth system on Raspberry Pi’s with Arch Linux, and the solutions are as numerous as the problems.

When I originally installed Arch on my RPi4, I was able to make bluetooth working by some little tweaks to pi-bluetooth AUR package – or, at least bluetooth keyboard and mouse worked. I didn’t have any bluetooth-enabled audio devices, so I couldn’t test those. That situation continued as such for some half an year until a recent big update including a 5.*.* series kernel. After a reboot, no bluetooth… and kernel and other messages saying they don’t recognize any bluetooth adapters. I still don’t know which update actually broke bluetooth then, I tried downgrading some relevant packages, with no effect.

I found a working solution via a discussion in pi-bluetooth AUR pages. Instead of pi-bluetooth, which seems to be outdated, I chose to use alarm-bluetooth-raspberrypi. Let’s start the installation process (use sudo or su where applicable):

  1. #Next step should remove bluez-utils* too, you don't really need it anymore.
  2. pacman -Rs pi-bluetooth
  3. git clone https://github.com/RoEdAl/alarm-bluetooth-raspberrypi.git
  4. cd alarm-bluetooth-raspberrypi
  5. #If you are using RPi4, you need to change "depends=*linux-raspberrypi*"
  6. #to "linux-raspberrypi4" in PKGBUILD. Otherwise, skip next step.
  7. nano PKGBUILD
  8. makepkg -sc
  9. pacman -U bluetooth-raspberrypi-6-2-any.pkg.tar.xz

Then, edit /boot/config.txt and add a line

dtoverlay=bcmbt

and reboot. That’s it!

It is also advisable to install and configure rpi-eeprom (AUR) to ensure that your EEPROM firmware is up-to-date.

– –

UPDATE June 8th, 2020: I ended up modifying and cleaning up the original PKGBUILD to make an AUR version of alarm-bluetooth-raspberrypi. See next post.

Posted in Linux | Tagged , , , , | Comments Off on Raspberry Pi 4 bluetooth madness

Useful snippets #3: dual wallpapers on Awesome window manager

The main configuration file of Awesome wm is ~/.config/awesome/rc.lua. The default function in rc.lua on multihead systems is to install the same, maximized, theme.lua-defined wallpaper to all screens. That is all well, if a) you really want the same wallpaper on all screens, and b) if all of your screens are of the same aspect ratio. But if, for example, your main screen is 16:9 and secondary 4:3, or, like in my case, the secondary screen is in portrait mode, the default function creates a mess.

I didn’t find any example code anywhere, so I had to figure it out for myself. This is the lua code I ended up with:

  1. local function set_d_wallpaper()
  2.     themes_path = gears.filesystem.get_configuration_dir() .. "themes/dualhead/"
  3.     d_wallpaper = themes_path .. "right.jpg"
  4.     gears.wallpaper.maximized(d_wallpaper, 1, true)
  5.     d_wallpaper = themes_path .. "left.jpg"
  6.     gears.wallpaper.maximized(d_wallpaper, 2, true)
  7. end

Insert it after the original set_wallpaper(s)-function in rc.lua. After that, edit the two calls to set_wallpaper() below it to use set_d_wallpaper() instead. In my case, the secondary screen is to the left of the main screen, so adjust the above code accordingly to suit your layout.

Posted in Linux | Tagged , , , | Comments Off on Useful snippets #3: dual wallpapers on Awesome window manager

Useful snippets #2: rc.local support on systemd

Systemd-using Linuxes like Arch Linux does not generally support the old SysV init functions like rc.local. The support is easy to add, though.

Edit /usr/lib/systemd/system/rc-local.service:

  1. [Unit]
  2. Description=/etc/rc.local compatibility
  3.  
  4. [Service]
  5. Type=oneshot
  6. ExecStart=/etc/rc.local
  7. RemainAfterExit=yes
  8.  
  9. [Install]
  10. WantedBy=multi-user.target

Enable it:

systemctl enable rc-local.service

– –

Original source: Raymii

Posted in Linux | Tagged , | Comments Off on Useful snippets #2: rc.local support on systemd

Installing Arch Linux on Raspberry Pi with WiFi-only networking

I made this post primarily for my own reference by combining several tutorials in the net and my own observations into one comprehensive tutorial, but I hope this can be for the benefit of other Arch Linux ARM users, too. Of course this tutorial applies as such only on Raspberry Pi models with WiFi: RPi Zero W, RPi 3A+, RPi 4B and so on.

All these instructions must be run as root from a Linux computer with a SD card reader, Windows is useless here. Replace sdX in the following instructions with the device name for the SD card as it appears on your computer.

  1. Start fdisk to partition the SD card:

    1. fdisk /dev/sdX
  2. At the fdisk prompt, delete old partitions and create a new one:
    1. Type o. This will clear out any partitions on the drive.
    2. Type p to list partitions. There should be no partitions left.
    3. Type n, then p for primary, 1 for the first partition on the drive, press ENTER to accept the default first sector, then type +100M for the last sector.
    4. Type t, then c to set the first partition to type W95 FAT32 (LBA).
    5. Type n, then p for primary, 2 for the second partition on the drive, and then press ENTER twice to accept the default first and last sector.
    6. Write the partition table and exit by typing w.
  3. Create and mount the FAT filesystem:

    1. mkfs.vfat /dev/sdX1
    2. mkdir boot
    3. mount /dev/sdX1 boot
  4. Create and mount the ext4 filesystem:

    1. mkfs.ext4 /dev/sdX2
    2. mkdir root
    3. mount /dev/sdX2 root
  5. The root filesystem versions for different Raspberry Pi models are:
    • ArchLinuxARM-rpi-latest.tar.gz for Zero and old RPis
    • ArchLinuxARM-rpi-2-latest.tar.gz for RPi2s
    • ArchLinuxARM-rpi-3-latest.tar.gz for RPi3s
    • ArchLinuxARM-rpi-4-latest.tar.gz for RPi4s

    Download and extract the correct root filesystem:

    1. wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-latest.tar.gz
    2. bsdtar -xpf ArchLinuxARM-rpi-latest.tar.gz -C root
    3. sync
  6. Move boot files to the first partition:

    1. mv root/boot/* boot
  7. Configure the system for WiFi networking by first editing root/etc/systemd/network/wlan0.network:

    1. [Match]
    2. Name=wlan0
    3.  
    4. [Network]
    5. DHCP=yes
  8. Then, replace SSID and PASS with the relevant ones for your WiFi network in the following wpa_supplicant configuration steps:

    1. wpa_passphrase "SSID" "PASS" > root/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
    2. ln -s /usr/lib/systemd/system/wpa_supplicant@.service root/etc/systemd/system/multi-user.target.wants/wpa_supplicant@wlan0.service
  9. Unmount the two partitions:

    1. umount boot root
  10. Remove the SD card, insert it into the Raspberry Pi, and apply 5V power.
  11. SSH to the IP address given to the board by your router.
    • Login as the default user alarm with the password alarm.
    • Then su to root. The default root password is root.
  12. Initialize the pacman keyring and populate the Arch Linux ARM package signing keys:

    1. pacman-key --init
    2. pacman-key --populate archlinuxarm
  13. The default name resolution does not work with WiFi, so to have a working DNS you need to type in the following (Replace the nameserver IP address with one of your preference, if needed):

    1. systemctl stop systemd-resolved
    2. systemctl disable systemd-resolved
    3. rm /etc/resolv.conf
    4. echo "nameserver 1.1.1.1" > /etc/resolv.conf
  14. And finally, update the system:

    1. pacman -Syu
  15. If you install later networkmanager or equivalent, remember to undo step 8 before starting it for the first time to prevent networking issues:

    1. systemctl stop wpa_supplicant@wlan0.service
    2. systemctl disable wpa_supplicant@wlan0.service
    3. rm /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
  16. Last, if you are using a RPi 4B, remember to update its firmware at the earliest possible opportunity to prevent issues with other hardware, please see here.

Now you can continue with normal Arch Linux installation guide!

– –

Original sources: Arch Linux ARM / Ladvien

Posted in Linux | Tagged , , , | Comments Off on Installing Arch Linux on Raspberry Pi with WiFi-only networking