Arch Linux ARM Distribution: Customization

Arch Linux ARM Distribution: Customization
Jérémie Kassianoff
November 10, 2013
6 min read

Get a simple interface on Raspberry Pi. Discover lightweight, simple tools. Add some color to your favorite raspberry.

Real-world use case

You want a lightweight, custom-tailored interface on your Raspberry Pi: here's how to customize Arch Linux ARM.

This article aims to be simple and quick, it won't go into detail.
We'll try to get a fairly smooth interface for our Raspberry Pi.
To do this, we'll use the following packages:

– Slim is a connection manager.
– OpenBox is a window manager.
Nitrogen lets you manage wallpapers.
Screenfetch displays information in the terminal.
– Tint2 adds a taskbar (optional).
– pcmanfm is a lightweight file manager, which can also manage your desktop.
lxeappearance lets you manage the system's themes, icons, and fonts.
midori is a minimalist web browser.

Installing the prerequisites:

Before diving into configuring these programs, we need to install them:

bash
pacman -S slim openbox obconf obmenu nitrogen screenfetch tint2 pcmanfm lxeappearance midori

The "xinitrc" file needs to be configured for slim:

bash
nano /home/jeremie/.xinitrc

Add this to automatically start "openbox":

bash
exec openbox-session

Create an "openbox" folder:

bash
mkdir -p ~/.config/openbox

Copy the "openbox" configuration files:

bash
cp -R /etc/xdg/openbox/* ~/.config/openbox

Launch "openbox" for the first time:

bash
exec openbox-session

On the first launch, a blank screen appeared, you can do the following:

  • Right-clicking the desktop brings up the OpenBox menu.
  • Clicking the middle button will list all open applications.
  • The mouse wheel lets you show active windows and switch from one desktop to another.
  • Windows shortcuts work, e.g.: "Alt + tab" or "Alt + F4".

Configuring OpenBox

Launching the "openbox" configuration:

bash
obconf

The screenshot below should appear:
Select your themes, the number of desktops to use, adjust your usage preferences, etc.

Launch "obmenu" in the terminal to modify your entries in the "openbox" menu:

bash
obmenu

You can also edit the "menu.xml" file directly by hand:

bash
nano /home/jeremie/.config/openbox/menu.xml

More information: http://doc.ubuntu-fr.org/openbox

Adding wallpapers to Nitrogen

Nitrogen lets you choose a wallpaper by specifying the folder path like this:

bash
nitrogen ~/openbox/wallpapers/ &

The taskbar with tint2 (optional)

OpenBox offers a so-called floating bar with a middle-click.
For those who want it, you can use a fixed taskbar with "tint2".

To launch the "tint2" process in the background:

bash
tint2 &

This command loads "tint2" with the base configuration file.

Launching "tint2" in the background with a configuration file:

bash
tint2 -c ~/openbox/config/tint2rc &

This command loads "tint2" with a configuration file of your choice.

Here's a configuration file for "tint2":

bash
#---------------------------------------------
# TINT2 CONFIG FILE
#---------------------------------------------

#---------------------------------------------
# BACKGROUND AND BORDER
#---------------------------------------------
rounded = 0
border_width = 0
background_color = #000000 100
border_color = #414140 100

rounded = 0
border_width = 0
background_color = #1F262E 100
border_color = #232426 100

rounded = 0
border_width = 0
background_color = #000000 100
border_color = #232426 100

#---------------------------------------------
# PANEL
#---------------------------------------------
panel_monitor = all
panel_position = bottom center
panel_size = 100% 26
panel_margin = 0 6
panel_padding = 2 0
panel_items = TSC
font_shadow = 0
panel_background_id = 1
wm_menu = 1

#---------------------------------------------
# TASKBAR
#---------------------------------------------
taskbar_mode = single_monitor
#taskbar_mode = multi_desktop
#taskbar_mode = all
taskbar_padding = 0 0 0
taskbar_background_id = 0

#---------------------------------------------
# TASKS
#---------------------------------------------
task_icon = 1
task_text = 1
task_width = 200
task_centered = 0
task_padding = 10 5
task_font = Droid Sans bold 9
task_font_color = #ffffff 70
task_active_font_color = #ffffff 100
task_background_id = 3
task_active_background_id = 2

#---------------------------------------------
# LAUNCHER
#---------------------------------------------
launcher_padding = 0 0 3
launcher_background_id = 1
launcher_icon_size = 24
# Specify icon theme names with launcher_icon_theme. 
# if you have an XSETTINGS manager running (like xfsettingsd), tint2 will follow your current theme.
launcher_icon_theme = AwOkaenza II
# Each launcher_item_app must be a full path to a .desktop file
launcher_item_app = /home/moon/.dock/nautilus.desktop
launcher_item_app = /home/moon/.dock/nautilus-musique.desktop
launcher_item_app = /home/moon/.dock/firefox.desktop
launcher_item_app = /home/moon/.dock/pidgin.desktop
launcher_item_app = /home/moon/.dock/gmusicbrowser.desktop

#---------------------------------------------
# SYSTRAYBAR
#---------------------------------------------
systray_padding = 2 4 5
systray_background_id = 1

#---------------------------------------------
# CLOCK   
#---------------------------------------------
time1_format = %d.%m.%y // %H:%M
time1_font = DroidSans Bold 9
clock_font_color = #ffffff 70
clock_padding = 6 4
clock_background_id = 1
clock_lclick_command = orage
#clock_rclick_command = 

#---------------------------------------------
# BATTERY
#---------------------------------------------
#battery = 0
#battery_low_status = 7
#battery_low_cmd = notify-send "battery low"
#bat1_font = sans 8
#bat2_font = sans 6
#battery_font_color = #ffffff 76
#battery_padding = 1 0
#battery_background_id = 0

#---------------------------------------------
# MOUSE
#---------------------------------------------
mouse_middle = close
mouse_right = none
mouse_scroll_up = toggle
mouse_scroll_down = iconify

There are tons of configuration files on the internet.
I recommend you create your own configuration file, it's much more fun!

Info in the terminal with Screenfetch

Screenfetch shows information in the terminal, to add it:

bash
nano /home/jeremie/.bashrc

Add the line at the end of the file:

bash
screenfetch

Restart your terminal and enjoy the change!

The pcmanfm window manager

Pcmanfm is very lightweight, it's well suited to the Raspberry Pi, and it can also manage your desktop!
For Pcmanfm to manage your desktop, you need to run the following command:

bash
pcmanfm --desktop &

To make it nicer, download an icon pack:

bash
pacman -S faenza-icon-theme

Managing your graphical interface with Lxappearance

Lxappearance lets you manage icons, the mouse cursor, and much more:
Launch Lxappearance with xterm:

bash
lxappearance

By default the icon pack is fairly simple. Add the "Faenza" icons of your choice:

Launch your entire configuration at startup

To launch applications at startup, you need to add to the end of the "autostart.sh" file:

bash
nano ~/.config/openbox/autostart.sh
bash
# Restore the last wallpaper
nitrogen --restore &

# Start the Tint taskbar
sleep 2 && tint2 -c ~/openbox/tint2rc &

Don't forget to make your script executable:

bash
chmod +x ~/.config/openbox/autostart.sh

The script should be adapted based on your preferences, your configuration, and your skill level.
In the end, it's difficult to have a smooth interface on our raspberry, nothing beats the terminal!

Conclusion

This customization of Arch Linux ARM on the Raspberry Pi sets up a lightweight graphical environment with Slim, OpenBox, Nitrogen for wallpapers, Tint2 for the taskbar, and pcmanfm/Lxappearance for managing the desktop and themes. The goal was to achieve a simple, smooth interface despite the raspberry's limited resources, while keeping control over every component. In the end, the terminal remains the most efficient tool on this kind of hardware.