Setting up my fresh Crunchbang installation

Update 2016-01-16

Development of Crunchbang has now stopped. There are a few community spin-offs available, Bunsen Labs and Crunchbang++. Although most of what’s been written here should be applicable to these distributions, it hasn’t been tested. I’m now using a netinst version of Debian at home with the i3 window manager, and Bunsen Labs on my office laptop. Both are working well.

For the past year and a half, I’ve been working primarily on Microsoft’s stack – C#.NET, ASP.NET Web Forms, HTML, CSS, JavaScript (jQuery primarily). My company recently started taking up projects on open source software such as PHP, WordPress and Android. This gave me an opportunity to shift to Linux again. I’ve always been fond of Linux. The ability to customize and fine tune your system to just the way you like it gives me a sense of freedom and power.

Last Friday, I installed Crunchbang. It is a Linux distribution derived from Debian. The purpose of this post is to outline the various steps I followed to get Crunchbang ready for use. I can then refer to this post whenever I’m setting up my system again, or helping someone else set up theirs.

Hardware Configuration

I’ll start of with my computer specifications first. This might help people with similar hardware configuration to find a solution to their problems.

ProcessorIntel i5-4570 CPU @ 3.20GHz
MotherboardGigabyte H87M-D3H
Video CardMSI HD 7850 Hawk
Monitor(s)Philips 190VW (1440 X 900) Dell S2240L (1920 x 1080)

System Update

Once Crunchbang is installed and you boot up for the first time a handy script starts up that allows you to update your system and installed software. This script can be invoked later on as well by running cb-welcome command on the terminal.

Installing LAMP and Java

Follow the script and install Java and the LAMP stack. It is also possible to install – Git, SVN and drivers for printer.

Installing AMD Proprietary Driver

After the script has finished, it’s time to install the graphics driver.

I followed the manual method outlined in this post on the Crunchbang forums. I tried using smxi to do it for me, but I think it was having trouble disabling the default Radeon drivers. Follow the exact steps, and reboot whenever advised.

Setup dual monitors in AMD CCC

Okay, so driver installation is over. It’s time to set up dual monitors. By default, after you’ve installed Crunchbang on a system that has dual monitors and an AMD graphics card, the monitors will duplicate each other. Once you’ve installed the driver you can change that setting. Fire up the AMD Catalyst Control Center by running amdcccle command on the terminal.

Change the mode to extend the display to two monitors rather than duplicate the display –

Multiple Monitors in AMD CCC

Placing monitors in the correct order (left or right of each other) is as simple as dragging them into place. You can also change the resolution from this screen.

Another problem that people with DELL S2240L and AMD cards will have that the display on the monitor won’t re-size to fit the entire screen. The fix for that is available through CCC –

Dell S2240L Overscan Correction

Note that the CCC makes changes to the xorg.conf file in /etc/X11. If you don’t want to make these changes everytime you reinstall Crunchbang, just backup that file.

Installing Logitech Wireless Driver

I have a wireless Logitech keyboard. With the new motherboard the keyboard is not auto detected by Crunchbang. Installing the driver found here and then restarting resolves the issue.

Boot Error : platform-microcode : intel-ucode … (not found?)

If you are running new Intel hardware, the following error –

platform microcode: firmware: agent aborted loading intel-ucode/06-1a-05 (not found?)

seems to pop up during boot. It’s basically harmless, but can be fixed by installing intel-microcode using APT.

Un-install Software

VLC Media Player

Install Software

Following is a list of software I install after installing #!


Torrent client


Music player


Use existing #! script, under the Openbox menu, Networking tab.


Video player

Then change add the following to the ~/.mplayer/config

This raises the max volume to 400%.



Google Chrome

Use existing #! script, under the Openbox menu, Networking tab.


Monitor screen color manager

I know the above line, doesn’t make it sound very exciting, but you really should give flux a go.

  • Grab the binary from here. That’s the xflux daemon (command line, but for X-Windows).
  • Add the following line to Openbox autostart file to start xflux daemon on system startup.


Development IDE for PHP

Grab the installer from here


C / C++ Editor

Grab the .deb from here


Grab the .deb installation files from here
Run the following commands one after the other –

Customize Startup and Openbox Menu determines the applications to be run at start-up and menu.xml defines the layout of the Openbox menu.

Here is my current file and here is my menu.xml.

Customize Conky and Tint2

Conky is basically a system monitor software for the X Window System. It can be extend via plugins and can be customized to show things such as weather.

Tint2 is a task-bar designed to be simple and lightweight. Here’s my tint2 config file.

My Conky configuration can be found here. The result –

Conky Screenshot

That’s it. That’s all I do once Crunchbang has been installed. It took me about four hours hours, but with this post as a reference, next time I should be able to reduce that time to about an hour.

Crunchbang is wonderful distribution that is minimalist, fast, stable and extremely customizable. It runs very well on old and new hardware. They have a helpful and friendly community. So, if you are looking for a new Linux distribution to try out, do give Crunchbang a test drive.

  1. List of software that can be installed using APT on !#.

Macro to insert date time in Visual Studio 2010

My current assignment at work has me working through a lot of old code. Code that now needs to be modified to implement new features and remove bugs. While updating or modifying existing code it is very important to insert comments stating why the modifications were carried out and the date on which they were carried out. Eventually when other developers work on the same piece of software and compare revisions, they shouldn’t be left wondering why a certain modification was made.

Unfortunately, Visual Studio lacks insert date time at current position functionality. But what it does support are Macros, and using those, it’s quite easy to implement that feature ourselves.

Macros are written in VB.NET. The following VB.NET code can be used to insert the date time at the current caret position –

The code above creates a module called PrintDateTime.

  1. It first checks if there is an active document, if there, it gets the currently selected text.
  2. It then inserts current date time at the currently selected caret location.

Next step is to place this code in the correct place.

Macros in Visual Studio 2010

  1. Open up the Macro explorer by pressing ALT + F8.
  2. In the Macro explorer right click on Macros, and click on ‘New Macro Project’.
  3. Give it a name, and once it’s created, it should be visible in the Macro explorer.
  4. Create a new Module under the project and give it a name that relates to what you are doing
  5. Double click on the new Module to open a Macro editor.
  6. Paste the code above in that editor and save the file.

Now that that is done, your Module should be visible under your project. The next thing we have to do is to assign our newly created Macro to a shortcut key, so that we can easily run it whenever we want.

  1. On the file menu, click on Tools > Options
  2. On the window that opens up, in the tree view, go to Environment > Keyboard
  3. In the Show commands containing textbox, type the name of the Module you created earlier and it should show up in the list below the textbox. Select it.
  4. In the Press shortcut keys textbox, press the combination of keys that you want to use whenever you wish to run your Macro.
  5. Make sure Global is selected under Use new shortcut in: and then press the Assign button, followed by OK.

It’s time to see if what we did works! Open up a document and press the same combination of keys that you used to create the shortcut. Once you do, the date time should be inserted at your current caret position and this should work for any document that you create inside Visual Studio 2010.

Passing JavaScript object to ASP.NET web service or method

I recently came across a question on StackOverflow, where the author was having trouble calling a JSON based web service from his ASPX page using jQuery. He was passing a user defined JavaScript object. I decided that I would quickly put a project together describing how to do so, for my future reference, and for anyone else who needs help. Here is my original answer on StackOverflow. I’ll be offering a higher level of explanation here in the post.

Below is the web method that we’ll be calling, in my ASPX page code behind. Note that a web method has to be declared as static,

The user defined object that you pass through JavaScript has to have the same properties as the user defined object on the server. Say for example that you were passing the following from JavaScript –

The object we defined in JavaScript has two properties, name and phone in lower case letters.

This is exactly similar to the class defined on the server

Note that the properties in the class have to be public

Now we’ll see how to call this web method from our ASPX page,

For an explanation of the options used here check jQuery ajax API documentation,

I’ll be discussing two noteworthy things,

1. Sending data to the server

Data (data) contains the object we will be sending to the server. Before we send the object to the web method, we have to ensure that we convert the object into a JSON format. We can do this by calling JSON.stringify. This javascript method is supported in all modern browsers*. The values that you pass to JSON.stringify have to be similar to what I have specified here. The name of the object we are passing to the server is named as 'cnt' in single or double quotes. This also has to be exactly same as the variable name being accepted by the web method.

2. Specifying what to connect to

The url specifies the web method or web service that we wish to call. If we were calling an ASP.NET based web service, we’d just have to change the url to /Default.asmx/getContact. Note that the name of the method that we wish to call is concatenated to the end of the web service path.

Now let’s see everything in action using Fiddler, a nifty network monitoring tool.

You’ll notice the call, with the request data sent to the server, and the response that is received from the server. If the call succeeds the success function of jQuery ajax is called. The server returns data as a JSON object and we can access it using the d property of the object. ASP.NET adds the property by default as of .NET Framework 3.5 to protect you from JSON hijacking.

Data sent to the server

Response from the server

So that’s basically it, if you have any doubts, ping me through the comment section. You’ll find the source code for the application here.

JSON.stringify is not supported by Internet Explorer 7 by default. To add this function to it, add JSON2.js to your page.