Broadcom Wifi Card – Making it work with Free Software

Till now I have been cursing myself for not being informed enough to buy a laptop which has a wifi card that can run entirely on Free Software. The Acer Aspire 4710z has a Broadcom Corporation BCM4311 802.11b/g WLAN (rev 01) card. I have been using the wifi card with the Free b43 driver together with non-free firmware. All of this changed when i decided to rant about my misfortunes with the wifi card on #gnewsense on freenode. gnufs on #gnewsense pointed me to .  There, I came to know about OpenFWWF , a project “that provides an open source firmware for Broadcom/AirForce chipset based devices”.

The first link above lists steps on how to make the Broadcom wifi card work with the Free firmware under gNewSense. I tried to follow the steps to configure the card under Debian squeeze (presently testing) and it finally worked after I read some debian bug reports as well. The steps I followed are as follows:

Install kernel 2.6.30 from Debian Backports (Currently Squeeze has 2.6.26)

  • Add “deb lenny-backports main contrib non-free” to /etc/apt/sources.list
  • aptitude install linux-image-2.6.30-bpo.1-686 (specific pkg name and version may change with time)

Build and install b43-asm (Tool to compile/assemble the firmware from their source code (b43-asm is not in the Debian repo at the time of writing this article)

  • svn co svn:// b43-asm-debian
  • cd b43-asm
  • debuild -i -us -uc -b –lintian-opts -i  (this builds the .deb package from the source tree. Just running debuild without any options gives some gpg key error)
  • dpkg -i <name of the deb package built in the above step>

Build and install the openfwwf firmware from its source

  • svn co svn:// openfwwf-debian
  • cd openfwwf-debian
  • debuild -i -us -uc -b –lintian-opts -i
  • dpkg -i <name of the deb package built in the above step>. This installs the Free Software firmwares under /lib/firmware/b43-open/ .

OpenFWWF currently does not support hardware encryption and QOS yet. To force these module options automatically, it is recommended to install a module-init-tools override /etc/modprobe.d/openfwwf.conf containing the following line:

  • options b43 nohwcrypt=1 qos=0

Or, just copy the corresponding example /usr/share/doc/openfwwf/examples/openfwwf.conf
to /etc/modprobe.d/openfwwf.conf

Once the Free Firmware is installed, you can remove the previous non-free firmware from /lib/firmware/ directory. Now reboot the machine to see if everything has gone OK or not. On my machine, after rebooting, when i do:

dmesg | grep firmware , I get the following output:

[   34.301153] b43 ssb0:0: firmware: requesting b43/ucode5.fw
[   34.484276] b43 ssb0:0: firmware: requesting b43-open/ucode5.fw
[   34.602878] b43 ssb0:0: firmware: requesting b43-open/pcm5.fw
[   34.609582] b43 ssb0:0: firmware: requesting b43-open/b0g0initvals5.fw
[   34.627897] b43 ssb0:0: firmware: requesting b43-open/b0g0bsinitvals5.fw
[   34.717116] b43-phy0: Loading OpenSource firmware version 410.31754 (Hardware crypto not supported)

Which shows that everything went ok and that I am now using the Free firmware.

One more non-free component removed!! Yay!!! /

My thanks goes to people on #gnewsense (gnufs, graziano and all the others), the OpenFWWF developers and everyone in the Free Software Community.

Important links:

Note: lspci says my wifi card is: 03:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 01)

My OLPC XO Experience

I got an OLPC XO today. Its not actually for me. Its from someone in America to a nunnery in Bumthang. They wanted me to install Dzongkha computing capabilities on the XO. Having never worked on this device, I do not know whether this would be possible or not. Anyways, I am happy to get this opportunity to use and work on an XO. Over the following days, I would be blogging my daily experience in using the device.
Continue reading

Guide for using Dzongkha in Computer

This guide is about how to configure your computer for Dzongkha computing


All the latest GNU/Linux distros has the basic support for Dzogkha like XKB keyboard map, Dzongkha locale etc. Debian and Ubuntu even has Dzongkha font package (ttf-dzongkha, which has the Jomolhari font). Here are the steps to enable Dzogkha support in your GNU/Linux box. This guide can be used for any distro.


For Debian and Ubuntu users, install ttf-dzongkha package. This installs the font called Jomolhari which is a Tshuyig Font. For Joyig, you have to install Wangdi. For other distros, download the zipped font file. This contains five fonts, Jomolhari, Wangdi, Joyig (smaller version of Wangdi), Tashi, Uchen.

In Gnome desktop, open Nautilus file browser. In the address bar, type “fonts://” (without the quotes). This will open the fonts directory. Now copy your choice of fonts in this directory. This insall the fonts in the .fonts directory in your home directory. This method installs the font for only the perticular user. You may need to logout and login again after this.

This method installs the font for only the perticular user. To install fonts globally, do the following as root. This needs executing commands at shell:

  • mkdir /usr/share/fonts/truetype/dzongkha

  • cp <fonts> /usr/share/fonts/truetype/dzongkha/

  • fc-cache -fv

In KDE, go to KDE Control Center, select System Administration Font Installer, and add the fonts. You may need to logout and login back after this.

Download Dzongkha fonts from here

Once the font is successfully installed, you will be able to write Dzongkha text using the OpenOffice office suite, view Dzongkha web content in any pango enabled browsers like Debian Iceweasel/Firefox, Epiphany etc and chat in Dzongkha using Gaim/Pidgin chat application. Debian’s Firefox, named Iceweasel, has excellent support for rendering Dzongkha. Epiphany (Gnome’s web browser) comes with pango disabled by default. To enable :

  • Start Gconf Editor by running “gconf-editor” in the command line

  • Go to Apps Epiphany Web and click on enable_pango.


To do Dzongkha wordprocessing, presentation and spreadsheet, insall and use OpenOffice Office Suite. Most of the major distros like Debian, Fedora has preconpiled, ready-to-use OpenOffice Packages. You just have to install them using your distro’s package manager. To enable text editing, you need to add Dzongkha Keyboard Indicator.

In Gnome:

  • Right click on the upper panel and click on Add to Panel

  • Add Keyboard Indicator

  • The upper panel will now show just one keyboard, USA

  • Right click on USA , select Keyboard Preferences.

  • In Keyboard Preferences dialog, go to layout tab Add Layouts and select Bhutan from the dropdown list.

  • Now you can select between English and Dzongkha while editing by clicking on the Keyboard Indicator Icon on the upper panel.

Fresh Lenny Install; WinXP > /dev/null

Till now I was dual booting Windows XP and Debian on my Acer Laptop. I use XP mainly to play some games like warcraft and AoE. Recently, i have been thinking of having only “The One” OS on my machine and today I did it. I did a fresh Lenny install from a recent weekly-build iso (Downloaded the iso using Jigdo .. Hurrayh!!), with a seperate /home partition. The following lists some of the tweakings and features:

1. Wireless
The 2.6.24 kernel that comes with lenny recognises my wireless chip. So I have only go to download the firmware. The boot messege even gives me the url from where to get the firmware.. awesome!! The url is and all the instructions are there. Basically I need to install the firmware cutter b43-fwcutter. I did a aptitude install b43-fwcutter and the install process even has to option to download and install the firmware automatically. I did that and its working!!

2. Sound
My earphone jack which was not working with etch is working now. The only problem is when i use my earphone, the laptop speakers dont mute automatically, and have to do that manually. But this is much better than on XP where the earphone jack doesnt work atall. Someone on IRC adviced me to upgrade to 2.6.25 kernel. May be this will solve the un-muting problem :).

3. System Time
There is this problem of setting the system time everytime i boot the machine. The bios time is ok but the system time always becomes 12 hours out of sync whenever i reboot. I did a google search and found out the solution:
Edit /etc/init.d/ and /etc/init.d/ and change HWCLOCKPARS to HWCLOCKPARS=”–directisa”
This worked like a charm.

4. Bluetooth
aptitude install bluetooth

5. Webcam
Same as in the etch documentation:
aptitude install linux-uvc-source
m-a auto-install linux-uvc
modprobe uvcvideo

6. Graphics
My Acer laptop comes with a “VGA compatible controller: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller (rev 03)” graphics card and the lenny iso that i used for installation comes with xserver-xorg 7.3. To have openGL support inorder to have good graphics rendering for games:

aptitude insall libgl1-mesa-dri (this also installs libgl1-mesa-glx)
aptitude install mesa-utils (This installs the glxinfo util which we can use to check for direct rendering support)

Before installing the libgl1-mesa-dri, doing a “glxinfo | grep direct” tells me that I dont have direct support. But everything turns out fine once we install libgl1-mesa-dri. Now I can play openarena and may be even flighgear smoothly. This is thanks to all the help from enouf and Nemoder at #debian@OFTC. I even updated a wiki article here:

To install splashy refer this two links :

Connecting to the Internet using phone’s GPRS modem from a Debian machine

Here in Bhutan, we are at the moment enjoying free GPRS connection ( Free test-trial till 5th May, 2008 ) thanks to B-Mobile. I have a four year old Nokia Ngage-QD and got myself registered for the free GPRS. I installed the 45-days trail version of Netfront as my browser, Slick for IM and Profimail for e-mail. With its small screen and keypad, my phone is not an ideal device to experience the internet. Hence, I made a google search on how to use a GPRS connection as a modem. I have some experience regarding this from my college days where I used the Rs. 99/month GPRS connection from Hutch. But this time I wanted to connect from my laptop running Debian.

My set-up:

  • GPRS from B-mobile

  • Nokia N-Gage QD with, Access point configured to use the GPRS connection

  • My Debian Laptop with Gnome Desktop, inbuilt bluetooth and the ppp package installed

Configuring bluetooth on laptop

  • Install the packages bluetooth, bluez-utils and gnone-bluetooth

  • Run ‘hcitool dev’ to get the address of the bluetooth device on the laptop in the form of ‘xx:xx:xx:xx:xx’. Run ‘hcitool scan’ after turning on the bluetooth on your phone. This will give you the bluetooth address of your phone. Now bond the phone to the computer using the Gnome Bluetooth Manager. I also set my laptop as “Authorised” in my phone’s bluetooth setting.

  • Run ‘sdptool browse <phone-bluetooth-address>’ to see which channel on the phone is being used for Dial-up Networking. The sdptool command will give a long output. We have look out for a block of output beginning with “Service Name: Dial-up Networking” see which channel this service uses. On my phone, it is channel 1.

  • Set up a RFCOMM device. We can use /dev/rfcomm0 as the device to connect the phone as a modem. Edit the /etc/bluetooth/rfcomm.conf as shown below to ensure /dev/rfcomm0 connects to channel 1 (in my case) of the phone.

rfcomm0 {
                bind yes ;
                device <Bluetooth-device-address> ;
                channel 3 ;
                comment "Dial-up Networking Service -- for PPP" ;
  • Run ‘/etc/init.d/bluetooth restart’ to restart the bluetooth sub-system.

  • Set up the PPP (point-to-point) sub-system. Here we have to creat a peer specification file in /etc/ppp/peers. I created the file /etc/ppp/peers/rlw-ngage-qd-bluetooth-modem with the following content:

connect "/usr/sbin/chat -v -f /etc/chatscripts/rlw-ngage-qd"
remotename rlw-ngage-qd
ipparam rlw-ngage-qd
lcp-echo-interval 0
  • Now create the chat script mentioned in the above peer specification file in line no. 3. Create the file /etc/chatscripts/rlw-ngage-qd with the content below:

# This chatfile was generated by pppconfig 2.3.10.
# Please do not delete any of the comments.  Pppconfig needs them.
# ispauth chat
# abortstring
# modeminit
'' ATZ
# ispnumber
OK-AT-OK "ATDT*99***1#"
# ispconnect
# prelogin

# ispname
#login: xxxxxx
# isppassword
#password: yyyyyy
# postlogin
'' \d\c
# end of pppconfig stuff
  • Since the login details is handled by the setting in the phone, there is no need to specify login name and passord. The most inportant piece of information in the above file is the no. “*99***1#” which is used by the gprs modem to dial for Internet access. On a windows system, to connect to the internet using gprs modem, we create a dial-up connection using the bluetooth Network setting and then use the no “*99***1#” to dial.

  • Now to connect to internet run ‘pon rlw-ngage-qd-bluetooth-modem’ and run ‘poff’ to disconnect.

I have consulted many online docs to get my connection working. This documentation is a collection of settings and configurations that worked for me. With a little or no change, I hope this documentation will be helpful to its readers. Once again, Thanks to all the great docs out there on the Internet.

P.s: Am using my GPRS modem to post this article.

Reading comic Books on My Debian System

I have been downloading and reading old comics like Batman, Startrek etc from the internet and reading it on my laptop. The comics are normally in the “.cbr” format, which is just a rar archive of a folder containing the images that makes up the comic book. In the beginning my laptop was running Debian Etch (4.0) and hence there was no application that can enable me to read the .cbr comic files. I tried unraring the archive and reading the individual images in Eog, but when the image files are of high resolution, reading the comic is not convinient. Later, I came across a comic reading application called Cdisplay, but unfortunately, Cdisplay doesnt have a GNU/Linux release. It is a freeware but not Free Software. Still, to enable myself to read the comic books, I installed Cdisplay on my Debian system using the Wine Emulator. One disadvantage of using Cdisplay was that it cannot render the images properly when the image files inside the archive is in the GIF format. So I had to manually unrar the .cbr file, convert the GIF to JPEG and then create a new archive to read the comics.


Later I upgraded my Debian distro to Lenny/Sid (testing/unstable) and found out that the Evince document reader that comes with Lenny/Sid can read the .cbr archives very well…. Hurrayh!!!!! I uninstalled Cdisplay and now I can read my comic collections using  Free Software.

Setting up a DICT (Dictionary) server on Debian

My work, which is the localization of GNU/Linux for Dzongkha includes lots of coordination work with my translators who do the actual User Interface and other translations from English to Dzonkgha. Our translators has been using a dictionary client to find the meanings of words using the DICT protocol from servers like Recently, due to interruptions in the internet connection at our workplace, we started facing lots of problems in accesing the dictionary servers. Thats when I decided to do a little bit of a search on google to see if I can set up a local dictionary server for my translators. In the following paragraphs, I have listed how I set up a local dictionary server for our local network.

DICT is the dictionary network protocol created by the DICT Development Group. It is described by RFC 2229. Its goal is to surpass the Webster protocol and to allow clients to access more dictionaries during use. Dict servers and clients uses the port 2628. More information on DICT Protocal can be found at .

On a Debian system, one can install the dictd server for the main server application and then add various free dictionaries available on the internet. The Debian repo has various free dictionaries.

Setting up the dictd server

  • sudo aptitude install dictd

This installs the dictd server and also starts it. Here, only the server is installed and no dictionaries are installed. We need to install the dictionaries seperately.

The default installation of dictd will have it configured so that only the clients from the same machine can access it. This is OK if you want to access the dictionaries from the same machine that also runs the server. But if you want your dictionary server to serve queries from the network, you will have to change some settings in the configuration file located at /etc/dictd/dictd.conf. The default access entry in the /etc/dictd/dictd.conf file will be something like this:

access {
allow localhost
# this allows access only from local host

This allows only access from localhost, which is the same machine that runs the server.

Now to make the dictd server respond to remote queries change the access section to the following:

access {
allow *
# this allows access only from all hosts

For a detailed documentation on creating customised access list do a read the man pages for dictd.

Once the configuration file is modified as needed, just restart the dict server : sudo /etc/init.d/dictd restart .

The DICT server is now ready. Now to start serving requests from clients we have to install atleast one dictionary.

Search for the free dictionaries in the Debian repo : aptitude search dict

This will show a list of dictionary softwares as well as a list of free dictionaries. For my local lan dictionary server, I insalled a dictionary named “A comprehensive English Dictionary”. Its found in the package named “dict-gcide”

  • sudo aptitude install dict-gcide

This will install the dictionary, create the necessery listing in /usr/lib/dictd/db/list and then restart the dictd server. You can install as many dictionaries as you like, ex. technical, bibilical, devil’s dictionary and even bi-lingual ones for word translations.

Now, your local dict server is ready to serve the client request.

For the client side, you can use various dict clients like “dictionary” in Gnome and kdict in KDE.

Note: In Debian and Ubuntu, you can install the wordnet dictionary by : sudo apt-get install dict-wn