Category: Software

Running Fedora Asahi Linux on an M1 MacBook Pro 16

In August 2024, my Asus Strix G15 laptop conked out after almost three years of heavy usage. I have an extended warranty, so I called Asus, and they said they’d send a technician to diagnose and fix the laptop. I knew this would take at least three to four weeks, so I brushed off the dust from the office M1 MacBook Pro and started using it.

Having used i3 on Linux for the last 7 years, I found the MacOSX user interface difficult to navigate. I longed for the customization and predictability that i3 offered. I had heard of the Asahi Linux project and was eager to try it, and this was a good opportunity to do so.

Initial setup

Ensure that you are familiar with the device support matrix. Everything I needed for my daily work was supported. While I would have liked Thunderbolt and Touch ID support, it’s not a deal breaker. I also recommend going through the FAQ.

The initial setup is straightforward. As mentioned on the Asahi Linux website, open a terminal on MacOSX and run the script: curl https://alx.sh | sh

Afterwards, be sure to follow the instructions carefully. Pay close attention to the instructions at the end of the installation, or you could end up in a boot loop like I did.

The experience

Honestly, the experience is quite good. Asahi Linux is based on Fedora and runs KDE Plasma 6. I found it to be stable, smooth and configurable. The speaker, Wi-Fi, Bluetooth, display brightness, camera, mic and the external display via HDMI all worked as expected.

Installed applications

As a web developer, I was able to get everything that I needed up and running.

  • PHPStorm – My IDE of choice. JetBrains provides a build for Linux ARM64.
  • Joplin – For long-term notes & documentation, supports syncing across devices. Installed via Flatpak.
  • Anytype – Daily notes and task tracking. It does not have a Linux ARM64 build, but I was able to create a build easily. See this GitHub thread for more details.
  • Flameshot – To take screenshots and annotate them. Installed via the package manager.
  • Yakuake – Drop-down, quick access terminal. Installed via the package manager.
  • Ferdium – Allows access to Telegram, Whatsapp and other services via a single app. Installed via Flatpak.
  • QEMU, KVM, libvirt – To set up a development environment while keeping the host machine clean. I followed the guide here to set up the virtual machine and this guide to set up folder sharing with the host OS via virtio-fs.
    • XDebug with PHPStorm also works with the above setup. If you are having issues use XDebug log and use telnet to check the connection to the host machine. Some useful debugging notes can be found on this StackOverflow thread.
  • Nextcloud desktop – To sync files between devices and for long-term storage. Installed via the package manager.
  • KeepassXC – Password manager, synced via Nextcloud. Installed via the package manager.
  • Dbeaver CE – Database management tool. Installed via Flatpak.
  • Meld – Visual diff and merge tool. Installed via Flatpak.
  • Chromium – Web browser – For web development and debugging. Installed via the Discover app.
  • Firefox – Web browser – For personal use. Installed via the Discover app.
  • htop – Interactive process manager. Installed via the package manager.
  • ncdu – Disk utility. Installed via the package manager.
  • VSCodium – Coding with some less-used programming languages like Rust, Vue.js etc. Installed via the Discover app.
  • VLC – For media playing needs. Installed via the Discover app.
  • GIMP – For image editing. Pre-installed with the distribution.
  • VPN – I use a VPN service occasionally that supports WireGuard. I was able to add a WireGuard VPN connection by importing the configuration file to the network manager that comes with KDE. Quite simple.

Getting Netflix / Spotify to work

This is a well-known issue due to Widevine DRM not being installed by default. A script is provided to install it in the Asahi Linux GitHub repositories. Run widevine-installer on the command line to start the setup.

This blog has more details on this topic. See the “Netflix specific annoyances” section to set the proper user agent for your browser when accessing Netflix.

What could be better?

Per device workspace

I use dual monitors. I had i3 tiling window manager installed on my Asus Laptop. This makes managing windows across workspaces and desktops quite easy. For example, I can have my IDE open on a specific specific workspace, which is then pinned to a specific display. So whenever I want to access my IDE, I know where it is, and I can use the workspace shortcut to shift focus.

Although workspaces/virtual desktops are supported by KDE Plasma, they span across displays. You cannot have display specific workspace. This is obviously more of a KDE Plasma issue rather than an Asahi Linux issue, but it’s worth mentioning.

Live streaming Formula 1 (F1TV)

I tend to watch Formula 1 races from time to time, and I’ve not had any luck getting the F1 stream to work on Asahi Linux. I get the following error message even with Widevine installed. This should be fixable, but I need to spend more time debugging this.

Replaying non-live content on F1TV works fine.

Setting up MediaWiki via mwcli, docker

I use mwcli to set up a MediaWiki wiki family in order to work on the ContentTranslation tool and I’ve been facing some issues getting it to work. I believe it’s because of the arm64 architecture. Again another item needs some more debugging.

$ mw docker mediawiki create
[+] Running 6/6
✔ Container mwcli-mwdd-default-mediawiki-web-1                                                                                                                 Started                                        1.3s  
✔ Container mwcli-mwdd-default-nginx-proxy-1                                                                                                                   Started                                        1.2s  
✔ Container mwcli-mwdd-default-mediawiki-1                                                                                                                     Started                                        1.0s  
! mediawiki-web The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested                                                0.0s  
! mediawiki The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested                                                    0.0s  
✔ Container mwcli-mwdd-default-dps-1

Battery life

During active development with virtual machines running, a few calls, and an external keyboard and mouse attached, my laptop running Asahi Linux lasts about 5 hours before the battery drops to 10%. Under the same usage, macOS lasts a little more than 6.5 hours. Asahi Linux reports my battery health at 94%.

For comparison, my Asus laptop lasts under 3 hours under similar conditions.

Next steps

After I fix some of the issues mentioned above, I’d like to run a tiling window manager on the MacBook M1 Pro. i3 only supports the X Window manager whereas Asahi Linux comes with Wayland so it would not be possible to use that. Sway is a drop-in replacement for i3 built to run on Wayland that I should be able to use.

My existing i3 configuration should work as is, but it is something that I need to try out. With KDE, I appreciated the fact that a lot of things like sleep, suspend, power modes, WiFi, Bluetooth, dark mode, notifications etc just worked out of the box. When setting up Debian on my Asus laptop from scratch, I had to configure everything myself, but it still felt less cohesive.

Asus replaced my laptop’s motherboard under warranty, and since mid-September 2024, I’ve gone back to running Debian Testing with i3 and KDE Plasma 5. This setup is nicer and I’m happier with it compared to my previous setup. I want the same setup on the M1 Pro with KDE Plasma 6.

Despite some minor issues, I found Asahi Linux fully usable as a daily driver. The M1 MacBook has great hardware, and it’s exciting to see it running Linux — and running it well. It’s a testament to the effort put in by the Asahi Linux team.

Must use WordPress plugins for a technical blog

When I took a Droplet from Digital Ocean to host my server, I decided to give Ghost a shot. Using Ghost was a unique experience. It was minimalist and the editing experience was great. Unfortunately a lot of things like analytics, image compression, comments, advanced SEO, and code syntax highlighting were absent or took time to setup. The core team implement things fast and have a very aggressive release cycle, but theme developers are not able to keep pace with the changes and new features available. In addition, the default theme that comes with Ghost is not very apt for a technical blog.

I have hence decided to shift back to WordPress in order to utilize the large number of plugins and themes. This blog contains a list of plugins that I have installed and consider as must use WordPress plugins for a technical blog.

Continue reading

Setting up a blog using Ghost on Debian

My web hosting’s annual payment date was drawing close, and instead of renewing it, I decided I’d rent a server on Digital Ocean for 10$ a month. It turns out to be a lot more expensive but gives me the option to use the server for something other than just blogging and running PHP application.

After shifting to this new server, the first thing to do was to migrate my blog here. WordPress is an amazing platform, but over the years it has evolved to something a lot more than just a blogging tool. Besides the new kid on the block – Ghost, was creating a lot of buzz for its simplicity. I wanted to give it a try.

I setup my Digital Ocean server with Debian (Jessie 8.2). Node.js is required to run Ghost. Since I wanted to use this server for multiple applications, I decided I’d put nginx as a front facing proxy/compression server.

This blog item is a guide for setting up Ghost on a server running Debian. Let’s start,

Continue reading

My tools on Linux

Update 2016-01-16

Development of Crunchbang has now stopped. There are a few community spin-offs available, Bunsen Labs and Crunchbang++. I’m now using a netinst version of Debian at home with the i3 window manager, and Bunsen Labs on my office laptop. Both are working well. I’m still using the same set of software for my work, in addition to a few more, so this post is still valid.


I’ve been using Linux at home and work for over 5 months now. I’m using a Debian based distribution called Crunchbang. Over these past few months I’ve developed/programmed using multiple technologies and have gathered a collection of tools, that I use on a daily basis.

NameTypeLink
Eclipse with NodeEclipse – Check UpdateIDE for Node.jsLink
NetbeansIDE for PHPLink
DbeaverGUI client for Cassandra and othersLink
MySQL WorkbenchMySQL/MariaDB GUI clientLink
DiaFlowchart and DiagramsLink
SoapUITesting – API and Web ServicesLink
TildaDrop down terminalLink
MeldMergetoolLink
RemminaGTK RDP ClientLink
TomboyNote Taking AppLink
GMTPMTP ClientLink
GIMPImage manipulationLink
Continue reading

Setting up my fresh Crunchbang installation

Update 2016-01-16

Development of Crunchbang has now stopped. There are a few community spin-offs available, Bunsen Labs and Crunchbang++. Although most of what’s been written here should be applicable to these distributions, it hasn’t been tested. I’m now using a netinst version of Debian at home with the i3 window manager, and Bunsen Labs on my office laptop. Both are working well.


For the past year and a half, I’ve been working primarily on Microsoft’s stack – C#.NET, ASP.NET Web Forms, HTML, CSS, JavaScript (jQuery primarily). My company recently started taking up projects on open source software such as PHP, WordPress and Android. This gave me an opportunity to shift to Linux again. I’ve always been fond of Linux. The ability to customize and fine tune your system to just the way you like it gives me a sense of freedom and power.

Last Friday, I installed Crunchbang. It is a Linux distribution derived from Debian. The purpose of this post is to outline the various steps I followed to get Crunchbang ready for use. I can then refer to this post whenever I’m setting up my system again, or helping someone else set up theirs.

Hardware Configuration

I’ll start of with my computer specifications first. This might help people with similar hardware configuration to find a solution to their problems.

NameConfiguration
ProcessorIntel i5-4570 CPU @ 3.20GHz
MotherboardGigabyte H87M-D3H
RAM6.00 GB RAM
Video CardMSI HD 7850 Hawk
Monitor(s)Philips 190VW (1440 X 900) Dell S2240L (1920 x 1080)

System Update

Once Crunchbang is installed and you boot up for the first time a handy script starts up that allows you to update your system and installed software. This script can be invoked later on as well by running cb-welcome command on the terminal.

Installing LAMP and Java

Follow the script and install Java and the LAMP stack. It is also possible to install – Git, SVN and drivers for printer.

Installing AMD Proprietary Driver

After the script has finished, it’s time to install the graphics driver.

I followed the manual method outlined in this post on the Crunchbang forums. I tried using smxi to do it for me, but I think it was having trouble disabling the default Radeon drivers. Follow the exact steps, and reboot whenever advised.

Setup dual monitors in AMD CCC

Okay, so driver installation is over. It’s time to set up dual monitors. By default, after you’ve installed Crunchbang on a system that has dual monitors and an AMD graphics card, the monitors will duplicate each other. Once you’ve installed the driver you can change that setting. Fire up the AMD Catalyst Control Center by running amdcccle command on the terminal.

Change the mode to extend the display to two monitors rather than duplicate the display –

Multiple Monitors in AMD CCC

Placing monitors in the correct order (left or right of each other) is as simple as dragging them into place. You can also change the resolution from this screen.

Another problem that people with DELL S2240L and AMD cards will have that the display on the monitor won’t re-size to fit the entire screen. The fix for that is available through CCC –

Dell S2240L Overscan Correction

Note that the CCC makes changes to the xorg.conf file in /etc/X11. If you don’t want to make these changes everytime you reinstall Crunchbang, just backup that file.

Installing Logitech Wireless Driver

I have a wireless Logitech keyboard. With the new motherboard the keyboard is not auto detected by Crunchbang. Installing the driver found here and then restarting resolves the issue.

Boot Error : platform-microcode : intel-ucode … (not found?)

If you are running new Intel hardware, the following error –

platform microcode: firmware: agent aborted loading intel-ucode/06-1a-05 (not found?)

seems to pop up during boot. It’s basically harmless, but can be fixed by installing intel-microcode using APT.

Un-install Software

gFTP
Transmission
Gnumeric
VLC Media Player
Abiword

Install Software

Following is a list of software I install after installing #!

Deluge

Torrent client

sudo apt-get install deluge

Clementine

Music player

sudo apt-get install clementine

Dropbox

Use existing #! script, under the Openbox menu, Networking tab.

MPlayer

Video player

sudo apt-get install mplayer

Then change add the following to the ~/.mplayer/config

#Volume softvol=1 softvol-max=400

This raises the max volume to 400%.

Artha

Dictionary

sudo apt-get install artha

Google Chrome

Use existing #! script, under the Openbox menu, Networking tab.

Flux

Monitor screen color manager

I know the above line, doesn’t make it sound very exciting, but you really should give flux a go.

  • Grab the binary from here. That’s the xflux daemon (command line, but for X-Windows).
  • Add the following line to Openbox autostart file to start xflux daemon on system startup.
# l – latitude, g - longitude
xflux -l 17.4 -g 78.5

Netbeans

Development IDE for PHP

Grab the installer from here

Code::Blocks

C / C++ Editor

Grab the .deb from here

OpenOffice

Grab the .deb installation files from here
Run the following commands one after the other –

sudo dpkg -i *.deb 
cd desktop-integration 
sudo dpkg -i *.deb``

Customize Startup and Openbox Menu

autostart.sh determines the applications to be run at start-up and menu.xml defines the layout of the Openbox menu.

Here is my current autostart.sh file and here is my menu.xml.

Customize Conky and Tint2

Conky is basically a system monitor software for the X Window System. It can be extend via plugins and can be customized to show things such as weather.

Tint2 is a task-bar designed to be simple and lightweight. Here’s my tint2 config file.

My Conky configuration can be found here. The result –

Conky Screenshot

That’s it. That’s all I do once Crunchbang has been installed. It took me about four hours hours, but with this post as a reference, next time I should be able to reduce that time to about an hour.

Crunchbang is wonderful distribution that is minimalist, fast, stable and extremely customizable. It runs very well on old and new hardware. They have a helpful and friendly community. So, if you are looking for a new Linux distribution to try out, do give Crunchbang a test drive.

  1. List of software that can be installed using APT on !#.