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>
      </action>
    </keybind>
    <keybind key="Cancel">
      <action name="Execute">
        <command>xkill</command>
      </action>
    </keybind>
    <keybind key="Redo">
      <action name="Execute">
        <command>xdotool key ctrl+y</command>
      </action>
    </keybind>
    <keybind key="SunProps">
      <action name="Execute">
        <command>xdotool key Menu</command>
      </action>
    </keybind>
    <keybind key="Undo">
      <action name="Execute">
        <command>xdotool key ctrl+z</command>
      </action>
    </keybind>
    <keybind key="SunFront">
      <action name="Execute">
        <command>xdotool keydown alt key Tab</command>
      </action>
    </keybind>
    <keybind key="XF86Copy">
      <action name="Execute">
        <command>xdotool key ctrl+c</command>
      </action>
    </keybind>
    <keybind key="SunOpen">
      <action name="Execute">
        <command>xdotool key ctrl+o</command>
      </action>
    </keybind>
    <keybind key="XF86Paste">
      <action name="Execute">
        <command>xdotool key ctrl+v</command>
      </action>
    </keybind>
    <keybind key="Find">
      <action name="Execute">
        <command>xdotool key ctrl+f</command>
      </action>
    </keybind>
    <keybind key="XF86Cut">
      <action name="Execute">
        <command>xdotool key ctrl+x</command>
      </action>
    </keybind>

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:
https://bugs.launchpad.net/xfce4-power-manager/+bug/1008650
Staat ook een link in naar een workaround:
http://www.who.is.free.fr/wiki/doku.php?id=xfce#power_button_event_workaround

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

#!/bin/bash
xfce4-power-manager -q
openbox --reconfigure
xfce4-power-manager

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

XFCE Power Manager

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:

XKBMODEL="sun6"
XKBLAYOUT="us"
XKBVARIANT="altgr-intl"
XKBOPTIONS="ctrl:nocaps"

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

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.

ldap-auth-config

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

/etc/ldap.conf

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.

/etc/nsswitch.conf

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

PAM

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:

yubi_attr=yubikeyid

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

YubiKeys

De afgelopen tijd zijn de nodige bedrijven gehackt waaronder ook wat telecombedrijven. M’n baas kreeg daar de kriebels van en heeft een zak met YubiKeys aangeschaft. Of ik de authenticatie met die dingen even kon implementeren voor het hele netwerk.

Met YubiKeys kun je tweeweg authenticatie opzetten, in ons geval LDAP authenticatie in combinatie met de YubiKeys. Maar een LDAP server was er ook nog niet. SSH’en bijvoorbeeld ging met lokale accounts en ik werk wel met keys maar mijn collega’s niet. Vragen om moeilijkheden dus eigenlijk.

Van LDAP had ik weinig kaas gegeten maar uiteindelijk kwam ik na wat tips van mijn chef uit bij OpenDJ, een op Java gebaseerde LDAP directory server. OpenDJ installeren is redelijk eenvoudig, alleen staat nergens beschreven hoe je dit echt veilig moet doen. Het viel me al op dat er in de installatiehandleiding niet-standaard LDAP poorten gebruikt werden hoger dan 1024. Dit zijn unprivileged poorten die geopend mogen worden door gewone gebruikers dus heb het ook zo opgezet, dus dat OpenDJ draait onder een systeemuseraccount wat verder niks mag.

Volgende stap was het opzetten van een RADIUS server voor de YubiKeys. Je kan natuurlijk ook direct tegen de Yubico servers authenticeren maar die kun je voor zover ik weet niet koppelen aan je eigen LDAP server en ook niet goed beheren qua gebruikers. Ik ben degene die bepaalt aan wie welke YubiKey wordt toegewezen die toegang krijgt tot ons netwerk, niet de collega’s zelf. Voor het opzetten van een dergelijke server heb ik de YubiRADIUS Virtual Appliance gebruikt, een VMware image dat ik gedeployed heb op onze ESXi server. Dat is een Debian 6 installatie die ik nog wel wat heb moeten tweaken, ik ga bijvoorbeeld echt geen netwerkinstellingen op een server configureren via Network Manager.

Wat users opgevoerd in LDAP, YubiKeys toegewezen op de YubiRADIUS server, maar hoe nu verder? Hoe zet ik de tweeweg authenticatie op voor bijvoorbeeld SSH toegang? De beschikbare documentatie is summier en wat betreft het opzetten van tweeweg authenticatie met behulp van LDAP en YubiKeys onder Linux is er eigenlijk helemaal geen documentatie beschikbaar. Dit moet je met PAM doen en er is een YubiKey PAM module beschikbaar maar hoe je de authenticatie uiteindelijk moet implementeren wordt nergens beschreven.

Uiteindelijk heb ik het goed werkend gekregen en ik zal proberen om de werkende configuratie om via SSH in te loggen met behulp van YubiKeys en LDAP authenticatie te beschrijven in een vervolgentry.

YubiKeys

Geniaal spul

In de KLANG discussie geeft datenwolf aan dat het niet vaak voorkomt dat je meer dan 256 kanalen tegelijkertijd nodig hebt dus met dat soort usercases hoef je niet zo veel rekening te houden. Prompt komt Paul Davis met een reply waar je eigenlijk niks tegenin kan brengen (behalve dan dat het misschien inderdaad wel een erg extreme usercase is). Een topic over een mixing console van ruim 6 meter lang met 384 inputs, een monsterlijk apparaat van Harrison Consoles (de MPC4-D) die dus op Linux draait.

Harrison MPC4-D console, 384 inputs, 112 faders en 3000 EQ bands

De CPU power voor de console, zo te zien 12 servers waarop Linux draait, aan elkaar geknoopt via gigabit ethernet

Geniaal spul

Nieuw toetsenbord II

Heb uiteindelijk twee toetsenborden aangeschaft. Eén nieuw Sun toetsenbord, gewoon via de Oracle store, en een tweedehands ZaReason Tux Keyboard via Marktplaats. De Sun neem ik mee naar mijn werk en de ZaReason komt in de homestudio te staan.


text-align: center;

ZaReason Tux Keyboard

Het Sun keyboard met muis was nog geen €60,- inclusief verzendkosten. En dat terwijl er bedrijven zijn die tweedehands Sun Type 7 keyboards (dus zonder muis!) verkopen voor €50,-. Weird.

Nieuw toetsenbord II

Nieuw toetsenbord

Ben het nu zat om iedere dag tegen dat Windows icoontje op mijn toetsenbord aan te moeten kijken. Ga een Sun Type 7 toetsenbord bestellen via eBay. Heb deze gezien bij het RKZ in Beverwijk en moet ook zo’n ding hebben. De toetsenborden bij het RKZ zijn wel merkloos heb ik gezien, helaas kun je die nergens krijgen. Mocht iemand een tip hebben waar het RKZ z’n toetsenborden vandaan haalt dan hoor ik dat graag.


text-align: center;

Sun Type 7 keyboard

Nieuw toetsenbord

Icidu Wireless Nano Router 150N

We hebben sinds kort een nieuwe Blu-Ray speler met een ethernetaansluiting en de mogelijkheid om draadloos netwerk te kunnen gebruiken mbv. een speciale Wi-Fi adapter. Probleem is alleen dat de netwerkkabel die voorheen in mijn KiSS DP-1500 zat nu in onze Gigaset telefoon zit dus kan de Blu-Ray speler alleen via Wi-Fi in ons netwerk hangen. Die speciale Wi-Fi adapter kost echter een vermogen (meer dan de helft van de oorspronkelijke aanschafprijs!) en uiteraard zijn er geen goedkopere Wi-Fi adapters die het ook doen icm. de Blu-Ray speler. Hoe hang ik nu die Blu-Ray speler in ons netwerk zonder al te veel uit te hoeven geven?

Oplossing: een extra draadloos routertje aanschaffen, deze in het bestaande draadloze netwerk hangen en de ethernetpoort van de Blu-Ray speler verbinden met een ethernetpoort van de router. Hier zijn zelfs specifieke routertjes voor zoals de Netgear Wnce2001 en de Asus WL-330N3G. De goedkoopste is echter de Icidu Wireless Nano Router 150N. Voor een geeltje is deze verkrijgbaar bij diverse toko’s. Heb ‘m zelf bij MyCom besteld en als je de Zalando tegoedbon van een tientje meerekent in de aanschafprijs is ie bij MyCom eigenlijk maar €15,-. En naast dat dit routertje goedkoop is is ie ook superklein en superzuinig.

Goedkoopnessness komt uiteraard met een prijs. De handleiding van de Nano Router gaat uit van een oudere firmware versie en is verre van gedetailleerd en hoewel mijn specifieke usercase genoemd wordt in de handleiding staat nergens uitgelegd hoe je dit in moet regelen. Hieronder dan ook een stappenplan om van de Nano Router een Wi-Fi adapter te maken voor je Blu-Ray/Media- of whateverplayer.

  1. Sluit de LAN poort van de Nano Router met een ethernetkabeltje aan op je PC en voorzie de router van voeding met de bijgeleverde Micro USB kabel
  2. Surf naar de configuratiepagina van de router (192.168.2.1)
  3. Ga naar General SetupWirelessBasic Settings en zet Mode op Station (Infrastructure) en SSID op de SSID van je bestaande Wi-Fi netwerk
  4. Ga vervolgens naar Security Settings en geef hier de authenticatiegegevens van je bestaande Wi-Fi netwerk op
  5. In General SetupLAN vul je bij LAN IP een IP adres in die binnen de range van je bestaande Wi-Fi netwerk valt (en bij voorkeur buiten de DHCP scope van je netwerk) en schakel DHCP uit
  6. Druk op APPLY en in het Save settings succesfully! scherm druk je nog een keer op APPLY
  7. De router herstart nu en zou daarna in het bestaande Wi-Fi netwerk moeten hangen met het LAN IP wat je hebt opgegeven
  8. Sluit nu je Blu-Ray speler aan op het LAN poortje van de router en je speler zou nu via DHCP een IP adress van je hoofdrouter moeten krijgen en het interwebs op moeten kunnen

Edit: waarom trek je gewoon niet nog een kabel? Nou, de router staat op de 1e verdieping en heb de kabels destijds tijdens de verbouwing getrokken. Nu alles verbouwd is wordt het een heidens karwei om een extra kabel te trekken. Een extra routertje is dan een veel snellere oplossing.

Icidu Wireless Nano Router 150N

Der Hannsi

Vorige week via Marktplaats een Hannspad aangeschaft. De Hannspad is een budget Android tablet met voor het geld eigenlijk te goeie specs, zoals een 10″ capacitief scherm en een Nvidia Tegra 2 SoC (System on Chip) met een dual core CPU. De ROM nerds zijn hier dan ook als gieren opgedoken en er zijn dan ook de nodige custom ROMs beschikbaar wat de tablet nóg aantrekkelijker maakt. Der Hannsi werd geleverd met een GtabComb ROM maar heb deze inmiddels vervangen met een ICS ROM. Het is een alpha release maar werkt eigenlijk prima, ben nog weinig bugjes tegengekomen. Helaas is de ontwikkelaar van deze ROM er net mee gestopt, gelukkig zijn er nog genoeg alternatieven.

Ik zou Der Hannsi graag als USB host willen gebruiken en NFS zou ook fijn zijn. En een Bash shell in plaats van de wat beperkte BusyBox shell. Dus in het ongunstigste geval staat binnenkort de Android NDK weer op mijn notebook. Ach, zie wel, heb genoeg andere dingen aan m’n hoofd en heb de tablet vooral gekocht om doelloos mee op de bank te frutten en niet om er allerlei binaries of kernels voor te compileren.



Der Hannsi