A week without a Mac

Got my new workstation last week. Ultimately I decided to opt for a Dell notebook system with Linux pre-installed. So that left me only one single option: the XPS 13 Developer Edition, aka Sputnik 3. After having worked with it for a week I can only say I’m very, very happy with it. Unboxing it was a joy in itself, unwrapping the amazingly sleek machine and booting it for the first time. The XPS 13 comes with Ubuntu 12.04 LTS pre-installed which is just fine for me, especially given the fact that everything seems to work flawlessly so far. I haven’t rebooted it for days for example, suspending it works brilliantly and when I open the lid the device wakes up instantly, even after having it closed for days. And even though it has an i7 CPU it can run for hours on a full battery. The touch screen is a nice bonus but I haven’t really made use of it yet, it could be quite cool for live perfomances though. I’ve tested the touch screen with seq24 and it’s quite awesome to be able to trigger sequences by pressing the sequences on your screen.

Dell XPS 13 Developer Edition

I did try a fresh install but it would take me a bit too much time to get everything working properly so in the end I opted for sticking with the default install and install the Lubuntu desktop on top of it. And the default install doesn’t get in the way so I’m all set. I’m now looking for a nice keyboard and mouse to pair with the notebook, I’d greatly appreciate any suggestions. I had already ordered a Logitech K290 but I’m sending it back because it has the function keys swapped with the media keys and I just can’t work with that. Switching tty’s with Fn+Ctrl+F[:digit:] is just impossible to do with that keyboard. I could’ve tried swapping the keys but I’ve already filled in the RMA form and repacked the keyboard so it’s going back.

Next up is configuring it for making music. I’m thinking about purchasing a new USB audio interface, preferably USB2.0, that matches well with this machine. Suggestions are very welcome. I’ve looked at the Focusrite Scarlett 2i4 but a recent thread on LAU raised some doubts. We’ll see, it’s something for later, for now I’m extremely happy with my new work horse.

A week without a Mac

New notebook: BTO P•BOOK 17CL45-GT650 i7 QUAD

Yay, got a new notebook, a BTO P•BOOK 17CL45-GT650 i7 QUAD! I visited BTO last Tuesday and placed an order for a custom built notebook and it arrived yesterday. It’s quite a monster if you ask me:

  • Intel Core i7-3630QM Quad Core Processor (6MB Cache, 2.3 GHz, Turbo Mode 3.3GHz)
  • 16GB RAM
  • 120GN SSD
  • 1TB HDD
  • Nvidia GT650M

One of the reasons I chose BTO besides the fact that they offer custom built notebooks is that they also offer the choice to have your custom built notebook come without an OS. Unfortunately it came without a license, in other words, when I first started the notebook it booted into a Windows 7 installation procedure. No biggie, created a bootable USB stick with the Ubuntu 12.04 mini ISO and wiped all partitions. 20 minutes later I could boot into a fresh Lubuntu installation. And you know what? All the essential stuff worked out of the box! So far the following things just work:

  • Network, both WiFi and wired
  • Sound
  • Webcam
  • Fn buttons
  • Display
  • Suspend to RAM

The only real challenge is probably getting the Nvidia Optimus configuration to work but I already found some very specific documentation. Yes, the BTO is actually a Clevo W170ER housing with custom hardware.

text-align: center;

BTO P•BOOK 17CL45-GT650 i7 QUAD/Clevo W170ER

Other than that the BTO was a breeze to set up and it happily runs Lubuntu 12.04. Booting into a complete desktop takes less than 15 seconds at the moment. Next up is configuring it properly for real-time, low-latency audio. If I want to get the most out of it I’ll probably have to start looking for a decent USB2.0 audio interface. The BTO has no FireWire or PCI Express ports. A sign of the times, guess FireWire is basically dead technology.

New notebook: BTO P•BOOK 17CL45-GT650 i7 QUAD

Nieuwe tutorials

Heb twee nieuwe tutorials gemaakt mbt. het opzetten van een server waarmee je kan (video)bellen met SIP clients en WebRTC clients zoals Google Chrome.

Installing webrtc2sip on Ubuntu 12.04
Asterisk and sipml5 interoperability

En ja, ze zijn in het Engels vanwege wat verzoeken vanuit de Doubango community. Bovendien gebeurt er in Nederland nog bar weinig op het gebied van WebRTC.

Nieuwe tutorials

Sun Type7 toetsenbord speciale toetsen

Het Sun Type7 toetsenbord dat ik gebruik op mijn werk heeft aan de linkerkant een aantal speciale toetsen. Deze hebben allemaal een keysym alleen doen ze nagenoeg niets. Heb ze nu met Openbox allemaal een functie gegeven.

    <keybind key="Help">
      <action name="Execute">
        <command>xdotool key F1</command>
    <keybind key="Cancel">
      <action name="Execute">
    <keybind key="Redo">
      <action name="Execute">
        <command>xdotool key ctrl+y</command>
    <keybind key="SunProps">
      <action name="Execute">
        <command>xdotool key Menu</command>
    <keybind key="Undo">
      <action name="Execute">
        <command>xdotool key ctrl+z</command>
    <keybind key="SunFront">
      <action name="Execute">
        <command>xdotool keydown alt key Tab</command>
    <keybind key="XF86Copy">
      <action name="Execute">
        <command>xdotool key ctrl+c</command>
    <keybind key="SunOpen">
      <action name="Execute">
        <command>xdotool key ctrl+o</command>
    <keybind key="XF86Paste">
      <action name="Execute">
        <command>xdotool key ctrl+v</command>
    <keybind key="Find">
      <action name="Execute">
        <command>xdotool key ctrl+f</command>
    <keybind key="XF86Cut">
      <action name="Execute">
        <command>xdotool key ctrl+x</command>

Heb voor het sturen van de keystrokes xdotool gebruikt. Een sudo apt-get install xdotool volstaat om dat te installeren. De output van de speciale Sun toetsen heb ik achterhaald met xev wat als het goed is standaard al geïnstalleerd is. Bovenstaande code kun je gebruiken in het configuratiebestand van Openbox, in mijn geval is dat ~/.config/openbox/lubuntu-rc.xml. Daarna openbox --reconfigure draaien om de boel opnieuw in te laden.

Sun toets Functie
Help Help functie van applicatie (F1)
Stop Applicatie killen (xkill)
Again Opnieuw uitvoeren (Control+y)
Props Context menu (Menu)
Undo Ongedaan maken (Control+z)
Front Applicatielijst (Alt+Tab)
Copy Kopiëren (Control+c)
Open Openen bestand (Control+o)
Paste Plakken (Control+v)
Find Zoeken (Control+f)
Cut Knippen (Control+x)
Sun Type7 toetsenbord speciale toetsen

XFCE Power Manager

Lijkt een futiliteit maar kan toch frustrerend zijn: een niet werkend toetsje op je toetsenbord. Ik wilde per sé de Sleep toets op mijn Sun Type7 toetsenbord aan de praat krijgen, op de een of andere manier werkte die niet. Ben er uiteindelijk achter gekomen dat het aan het pakket xfce4-power-manager lag. Die ving kennelijk de keysym van de Sleep toets af (XF86PowerOff) om er vervolgens niets mee te doen. Na dit pakket gedeïnstalleerd te hebben en openbox --reconfigure te hebben gedraaid werkte de Sleep toets weer naar behoren.

Edit: ga nog wel uitzoeken waarom xfce4-power-manager het niet doet, als xfce4-power-manager namelijk wel draait en ik stel als actie Shutdown in als de Power knop wordt ingedrukt dan sluit het systeem af als ik de Sleep toets indruk. Stel ik als actie Ask in dan gebeurt er niks terwijl dan het Lubuntu uitlogscherm zou moeten verschijnen.

Edit 2: Bijbehorende bugreport gevonden:
Staat ook een link in naar een workaround:

Het script op die pagina is wel erg uitgebreid, bij mij volstaat het volgende:

xfce4-power-manager -q
openbox --reconfigure

Dit bestandje heb ik fix-power-button genoemd en start ik op via $HOME/.config/lxsession/Lubuntu/autostart

XFCE Power Manager

Openbox en Java

Als ik application title matching wilde doen met Openbox dan wilde bijna geen enkele Java applicatie meer opstarten. Bleek om deze bug te gaan.

$ apt-get source openbox
$ wget
-O application-title-matching.patch
$ patch -d openbox-3.5.0 -p1 < application-title-matching.patch
$ cd openbox-3.5.0
$ dpkg-source --commit
$ dch -i # Optioneel
$ debuild -S
$ cd ..
$ pbuilder-dist precise build openbox_3.5.0-2ubuntu3~precise0.dsc
$ dpkg -i ~/pbuilder/precise_result/openbox_3.5.0-2ubuntu3~precise0_amd64.deb

Nu kan ik Thunderbird, Firefox en mijn terminals weer plaatsen waar ik wil terwijl mijn Java applicaties (zoals de OpenDJ Control Panel applicatie) ook weer gewoon opstarten.

Openbox en Java

YubiKey en toetsenbordindeling

Zodra je een YubiKey in een USB port steekt gaat je systeem alle aanwezige toetsenborden opnieuw initialiseren. Op zich geen probleem ware het niet dat ik op het werk een Sun Type 7 toetsenbord gebruik met een afwijkende indeling. Deze stel ik in bij het inloggen omdat Ubuntu dit toetsenbord niet correct detecteert, Ubuntu ziet het als een gewoon toetsenbord (pc105). En als ik dit soort dingen als gewone user in kan stellen dan doe ik dat. Als ik nu dus echter m’n YubiKey wil gebuiken dan worden alle toetsenbordinstellingen gereset en krijgt mijn Sun toetsenbord weer de standaard indeling toegewezen.

In dit geval ontkom je er dus niet aan om voor het hele systeem de toetsenbordindeling in te stellen. Dit doe je onder Ubuntu in het bestand /etc/default/keyboard. Bij mij staat er nu het volgende in:


Voor de werking van de YubiKey maakt dit niet uit. Uiteraard kun je ook moeilijk gaan doen met udev of bestandjes aanmaken in /etc/X11/xorg.conf.d/ maar het aanpassen van /etc/default/keyboard (of sudo dpkg-reconfigure keyboard-configuration draaien, komt op hetzelfde neer) is toch wel het snelst en het makkelijkst.

YubiKey en toetsenbordindeling

Ik wilde een BTO (en misschien nog steeds wel)

Wil graag een nieuwe notebook en mijn oog was gevallen op een BTO. Dat is best een duur apparaat dus wilde weten of Ubuntu 12.04 er op draait en wat voor FireWire controller er in zit.

Kreeg al vrij snel een mailtje terug. Ze hebben bij BTO géén ervaring met Linux en ze wisten me ook niet te vertellen wat voor controller er precies in zit. Ja, een Via, maar wat voor Via dan? Probleem met Via is dat bijv. een VT6315 wel goed werkt voor audio en een VT6306 een stuk minder of in sommige gevallen zelfs helemaal niet.

Misschien kom ik uiteindelijk wel op een BTO uit maar vooralsnog ga ik verder zoeken naar een andere goeie kandidaat.

Ik wilde een BTO (en misschien nog steeds wel)

Nieuwe FFADO versie op komst

Er zit een nieuwe FFADO release aan te komen, FFADO 2.1.0.

De laatste puntjes worden op de i gezet en hopelijk wordt de nieuwe versie begin volgende week gereleased. Naast dat er een sloot aan nieuwe devices ondersteund worden in deze versie zijn er ook een hoop bugs gefixed en is er de nodige aandacht besteed aan ffado-mixer om deze goed werkende te krijgen met bijvoorbeeld de nieuwere Focusrites (de PRO 14, 24 en 40).

Voor mij persoonlijk verandert er niet veel, mijn Focusrite Saffire PRO 40 werkt feilloos onder Ubuntu 12.04. Maar in de toekomst zou ik wel graag een RME Fireface 400 aan willen schaffen en die wordt ondersteund met de aankomende FFADO release. Een bandmaat heeft een tijdlang twee Focusrite Saffire Pro 10’s gehad en deze recentelijk omgeruild met een RME Fireface 800 en volgens hem zijn de A/D D/A convertors gewoon stukken beter dan die van Focusrite.

Nieuwe FFADO versie op komst

YubiKeys, SSH, PAM en LDAP

Hoe tweeweg authenticatie op te zetten voor SSH logins met behulp van YubiKeys, PAM en LDAP (via SSL) op een Ubuntu 12.04 installatie.

Benodigde pakketjes

sudo apt-get install ldap-auth-client libpam-yubico

Conflicterende pakketjes

Mocht het pakketje nscd geïnstalleerd zijn, deïnstalleer deze. Dit pakket verhindert een goede werking van de YubiKey-LDAP authenticatiemethode.


Tijdens het installeren van het pakketje ldap-auth-client wordt er een aantal gegevens gevraagd. Doorloop de set-up als volgt:

  • LDAP server Uniform Resource Identifier: ldaps://fqdn.van.ldap.server:poortnummer
  • Distinguished name of the search base: dc=voorbeeld,dc=com
  • LDAP version to use: 3
  • Make local root Database admin: No
  • Does the LDAP database require login? No


Dit bestand regelt de verbinding met je LDAP server. De setup van ldap-auth-client heeft de boel nu ingesteld maar eigenlijk heb je deze hele setup niet nodig want met een /etc/ldap.conf met de volgende drie regels ben je er ook:

base dc=voorbeeld,dc=com
uri ldaps://fqdn.ban.ldap.server:poortnummer
tls_cacertfile /etc/ssl/certs/cacert.org.pem

Je kunt dus een deel van wat de setup heeft aangemaakt laten staan, de rest kun je uithekken. Zoals je ziet heb ik voor de SSL kant van het verhaal voor CAcert.org gekozen als CA. Je moet dan ook expliciet verwijzen naar de root certificaten van CAcert.org anders kan er niet gebind worden met de LDAP server. De LDAP server, in mijn geval een OpenDJ directory server, maakt dus gebruik van door CAcert.org getekende certifcaten.


Dit bestand regelt op welke manier en in welke volgorde de verschillende nameservices worden aangesproken. In ons geval gaat het om de entries password, shadow en groups in dit bestand. Standaard staan die in Ubuntu 12.04 op compat. Om Ubuntu eerst de fysieke bestanden en daarna LDAP te laten checken moet compat veranderd worden in files ldap. Dit gaat het snelst met een sed commando:

sudo sed -i 's/compat/files ldap/g' /etc/nsswitch.conf

Nu /etc/nsswitch.conf is ingesteld kun je gaan testen of je LDAP connectie goed is:

id ldapgebruiker
getent passwd
getent group


Nu is het zaak PAM zo in te stellen dat je zowel tegenover de Yubico servers authenticeert met je YubiKey als tegenover LDAP wanneer je SSH’t naar je machine. Dit regel je in /etc/pam.d/sshd:

# PAM configuration for the Secure Shell service

# Read environment variables from /etc/environment and
# /etc/security/pam_env.conf.
auth       required     pam_env.so # [1]
# In Debian 4.0 (etch), locale-related environment variables were moved to
# /etc/default/locale, so read that as well.
auth       required     pam_env.so envfile=/etc/default/locale

# Yubikey authentication
# Allow local accounts for the moment.
auth sufficient pam_unix.so

# Fetch LDAP password + OTP, verify OTP and move on ('required' control value).
# LDAP password is stripped and passed on.
auth required pam_yubico.so id=1234 ldap_uri=ldaps://fqdn.van.ldap.server:poortnummer [ldapdn=ou=People,DC=voorbeeld,DC=com] user_attr=uid yubi_attr=yubikeyid

# LDAP authentication
# Verify the LDAP password that has been passed on ('use_first_password' argument)
# and grant access when password gets accepted ('sufficient' control value).
auth sufficient pam_ldap.so use_first_pass

# Standard Un*x authentication.
@include common-auth

# Disallow non-root logins when /etc/nologin exists.
account    required     pam_nologin.so

# Uncomment and edit /etc/security/access.conf if you need to set complex
# access limits that are hard to express in sshd_config.
# account  required     pam_access.so

# Standard Un*x authorization.
@include common-account

# LDAP session
# Create homedir for LDAP user if it doesn't exist yet.
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022

# Standard Un*x session setup and teardown.
@include common-session

# Print the message of the day upon successful login.
session    optional     pam_motd.so # [1]

# Print the status of the user's mailbox upon successful login.
session    optional     pam_mail.so standard noenv # [1]

# Set up user limits from /etc/security/limits.conf.
session    required     pam_limits.so

# Set up SELinux capabilities (need modified pam)
# session  required     pam_selinux.so multiple

# Standard Un*x password updating.
@include common-password

De dikgedrukte gedeeltes zijn toegevoegd. Het id wat is toegevoegd bij de pam_yubico.so module kun je aanvragen via Yubico. Dit id is de zgn. API Key. Ook heb ik een extra opties toegevoegd:


Wat dit doet is de mapping gebruiker – YubiKey Public ID checken op de LDAP server, dus niet op de machine zelf. Het gros van de handleidingen gaat ervan uit dat je de mappings op de machine zelf maakt in platte bestandjes. Maar dat wil je helemaal niet, daar heb je nou juist je LDAP server voor, zodat je dit soort dingen als mappings centraal kan regelen. Wat ik heb gedaan is een objectclass yubikey toegevoegd aan de OpenDJ configuratie en deze een attribute yubikeyid meegegeven. Hoe ik dit heb gedaan komt nog wel aan bod in een latere entry waarin ik ook zal uitleggen hoe je users die in moeten kunnen loggen op je machine moet aanmaken in OpenDJ. De objectclass yubikey heb ik op zijn beurt weer toegevoegd als auxiliary objectclass bij de gebruikers die een YubiKey hebben. Vervolgens kan ik dan in het veld yubikeyid het Public ID ingeven van de YubiKey die bij een bepaalde gebruiker hoort. Het Public ID bestaat uit de eerste 12 tekens van de OTP die een YubiKey genereert. Je kan ook een bestaande attribute gebruiken, Zarafa gebruikt bijvoorbeeld het carLicense attribute. Maar dit gaat er bij mij niet in, een YubiKey Public ID is geen rijbewijs, dus krijgt het een eigen attribute.

Als je nu via SSH inlogt met je LDAP wachtwoord meteen gevolgd door je YubiKey OTP op dezelfde regel zou je keurig geauthenticeerd moeten worden. Eerst tegenover de Yubico Cloud, vervolgens stript de pam_yubico.so module het wachtwoord en haalt het YubiKey OTP eraf en geeft de rest door aan pam_ldap.so die je nu met het overgebleven wachtwoord authenticeert tegenover je LDAP server. En mocht je nog geen home directory hebben dan wordt deze aangemaakt door pam_mkhomedir.so.

YubiKeys, SSH, PAM en LDAP