#!/bin/bash ### BEGIN INIT INFO # Provides: mpdas # Required-Start: $remote_fs $syslog $mpd # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # X-Interactive: true # Short-Description: Audio Scrobbler for mpd # Description: Starts the Audio Scrobbler for the mpd music player daemon. ### END INIT INFO DAEMON_PATH="/usr/bin/" DAEMON=daemon DAEMONOPTS="-u pi -r -X /usr/local/bin/mpdas" NAME=mpdas DESC="The mpdas audio scrobbler for mpd" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME case "$1" in start) printf "%-50s" "Starting $NAME..." cd $DAEMON_PATH PID=`$DAEMON $DAEMONOPTS > /dev/null 2>&1 & echo $!` #echo "Saving PID" $PID " to " $PIDFILE if [ -z $PID ]; then printf "%s\n" "Fail" else echo $PID > $PIDFILE printf "%s\n" "Ok" fi ;; status) printf "%-50s" "Checking $NAME..." if [ -f $PIDFILE ]; then PID=`cat $PIDFILE` if [ -z "`ps axf | grep ${PID} | grep -v grep`" ]; then printf "%s\n" "Process dead but pidfile exists" else echo "Running" fi else printf "%s\n" "Service not running" fi ;; stop) printf "%-50s" "Stopping $NAME" PID=`cat $PIDFILE` cd $DAEMON_PATH if [ -f $PIDFILE ]; then kill -HUP $PID printf "%s\n" "Ok" rm -f $PIDFILE else printf "%s\n" "pidfile not found" fi ;; restart) $0 stop $0 start ;; *) echo "Usage: $0 {status|start|stop|restart}" exit 1 esac
2013-03-24
How to make the mpdas run as a daemon
The other day I installed the mpdas, which is the audio scrobbler for the music player daemon. Since there's no debian package for the Raspberry Pi, I compiled mpdas from scratch and installed it. Now I don't want to run it manually each time the Raspberry Pi boots up. So I found a nice template for writing your own debian-style init-script. I changed it a little and also installed the daemon tool, to turn the interactive mpdas program into a daemon. Just run apt-get install daemon to install it. Then put the following file under /etc/init.d/mpdas and run update-rc.d mpdas defaults. Then mpdas will be run automatically upon boot. Oh, one more thing: put your mpdas configuration under /usr/local/etc/mpdasrc or adjust the DAEMONOPTS in the init script accordingly.
Labels:
bash,
Debian,
Linux,
Raspberry Pi,
UNIX
2013-03-22
How to make the Raspberry Pi automatically restart the WiFi interface
My WiFi router sometimes goes haywire and the Pi won't notice when the WiFi connection is up again. So I wrote this little script:
My corresponding /etc/network/interfaces looks like this (I uninstalled all the network managers):
#!/bin/bash TESTIP=192.168.1.1 ping -c4 ${TESTIP} > /dev/null if [ $? != 0 ] then logger -t $0 "WiFi seems down, restarting" ifdown --force wlan0 ifup wlan0 else logger -t $0 "WiFi seems up." fiYou can put this script under /usr/local/bin and add the following line to the system wide /etc/crontab:
*/5 * * * * root /usr/local/bin/testwifi.shThis will check every five minutes if the connection is still up, and restart it, if the router cannot be pinged. If you dislike all the syslog messages, you can comment them out in the script.
My corresponding /etc/network/interfaces looks like this (I uninstalled all the network managers):
auto lo iface lo inet loopback iface eth0 inet static address 192.168.3.42 netmask 255.255.255.0 auto wlan0 iface wlan0 inet dhcp pre-up wpa_supplicant -Dwext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B post-down killall wpa_supplicant ; rmmod 8192cu ; modprobe 8192cu iface default inet dhcpThe wpa_supplicant.conf should be easy to generate, there are lots of guides on the web for this.
Labels:
Linux,
Raspberry Pi
2013-03-15
Good console fonts for OS X terminal applications
Today I was looking for a better console font for the Apple terminal application. Up until now I was using a variant of the Terminus font, but it did not have the line drawing characters. So several programs looked quite borked. But there is a nice page with a collection of the X11 terminal fonts in Apple's dfont format, which you know and like from all kinds of Linux distributions.
You have to tweak the spacings, for example for the 7x14 font you need to pick 0.98 and 0.93 for the horizontal and vertical spacing. Also make sure to use the fonts at their specified size. I.e. the 7x14 font at 14 points only.
You have to tweak the spacings, for example for the 7x14 font you need to pick 0.98 and 0.93 for the horizontal and vertical spacing. Also make sure to use the fonts at their specified size. I.e. the 7x14 font at 14 points only.
2013-03-10
Attaching a USB sound card to the Raspberry Pi
Since my Raspberry Pi runs headless, and the analog audio output is not that great, I decided to add a USB sound card to my little machine. I took a Roland UA-1G, which I was using before on an OpenWRT machine. The device was immediately recognized:
Bus 001 Device 007: ID 0582:00ea Roland Corp.However, ALSA will prohibit the card from becoming sound device #0, thus being the default. For that you have to comment out the following line in /etc/modprobe.d/alsa-base.conf:
# Keep snd-usb-audio from beeing loaded as first soundcard #options snd-usb-audio index=-2After rebooting or restarting ALSA, the Roland will become the default sound device:
$ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: UA1G [UA-1G], device 0: USB Audio [USB Audio] Subdevices: 0/1 Subdevice #0: subdevice #0 card 1: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA] Subdevices: 7/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7
Labels:
Linux,
Raspberry Pi,
sound
Playing with REST: SilverShield USB power web frontend
Yesterday I started to code a small tool that lets me turn on and off power outlets on my USB controlled power strip. You can find the humble beginnings over at github. It uses the sispmctl tool to turn on and off the sockets. It is implemented in Python using the Tornado web server. The rendering is simple, not styled and not yet HTML compliant. But it already scans for attached devices, and lets you toggle single outlets. However, today the power strip sort of died on me, and now I have to look for another project to practice REST with...
Labels:
coding,
Raspberry Pi,
REST,
web
2013-03-09
How to convert a Python list into a string in a strange way
Given a list in Python, suppose you wanted a string representation of that list. Easy enough:
str( [ 1, 2, 3 ] )However, suppose you did not want the standard notation, but rather apply some function to each string element or simply do away with the brackets and commas, you can use list comprehension, the join function and an empty string literal:
''.join( str( i ) for i in [ 1, 2, 3 ] )I already knew list comprehension, but using it in this scenario and with a string literal as an object was new to me. Anyway, using such code is probably a bad idea, since it might be hard to read! At the very least, one should stow it away in a function with a fitting name, such as jointStringRepresentationOfListItems( list ). But really, I am not even sure what I would use that for...
Update: even better is this:
','.join( map( str, [ 1, 2, 3 ] ) )
2013-03-07
How to turn the Raspberry Pi into a music server
I have set up my Raspberry Pi as a music and file server. My requirements were:
- Big local storage (HD), shared over WiFi
- Local music playing capability, remotely controllable
- AirPlay speaker capability
The means by which I fulfilled the requirements were:
- Platinum 1TB MyDrive and Edimax EW-7711UTn USB wireless adapter
- mpd Music Player Daemon
- shairport AirPort emulator
For the first part, I bought a WiFi adapter, the Edimax EW-7711UTn. This one works out of the box with Raspbian, using WPA encryption (Note: I switched to a RTL8188 based dongle by now). It identifies itself with lsusb as:
Bus 001 Device 004: ID 7392:7711 Edimax Technology Co., Ltd EW-7711UTn nLite Wireless Adapter [Ralink RT2870]
This can be easily configured using the wpa_gui tool that comes with the default Raspbian installation. Settings will be saved and restored upon reboot.
Second, I installed samba, samba-common and samba-common-bin for sharing my USB drive. The latter one is a Platinum MyDrive, which is attached to a powered Belkin 7-port USB hub, so that I only need two power supplies. One for the Raspberry Py, and one for the Hub and its attached devices. The MyDrive has been formatted with NTFS, so as to be easily mountable under Linux, OS X and Windows. I mount it using the standard /etc/fstab mechanism. Just added one line to the file:
/dev/sda1 /media/MyDrive ntfs-3g defaults 0 0
The /etc/samba/smb.conf gets in its first iteration only one additional share, a write-for-all public share, as a big file dump:
[BigDump]
comment = Free for all
read only = no
path = /media/MyDrive/FreeForAll
guest ok = yes
Note that literally everybody in your LAN can access this and write to it! You may want to fine tune this...
Now to the mpd. It is easily installed by doing apt-get install mpd. When configuring it via /etc/mpd.conf make sure to change the following lines:
music_directory "/media/MyDrive/Music/"
password "MyVeryOwnPassword@read,add,control,admin"
bind_to_address "any"
bind_to_address "any"
Change the directory and password to your liking. Then restart the service or reboot you device. You can control the mpd using a magnitude of clients. For example Theremin for OS X or Mpod for iOS.
Finally, I would like to be able to use the RasPi as an AirPlay target for my Mac and my iOS devices. This can be done via shairport. There are already a lot of good howtos for shairport on the Raspberry Pi. So I refer you to one of those. Two things come to my mind, though:
- The Net::SDP library, required by shairport, is not available on Raspbian by default. It is best to clone the github mirror, and go by its installation instructions. Installation via CPAN fails, plus CPAN needs huge amounts of RAM.
- The configuration needs to be tweaked a bit. The /etc/init.d/shairport script should be tuned to a sensible name for your RasPi.
This way, you will be able to see the RasPi in your AirPlay speakers list and it will be happily churning along.
Labels:
Linux,
Music,
OS X,
Raspberry Pi,
UNIX
Subscribe to:
Posts (Atom)