Smolt is a hardware profiler for Linux distributions which makes it easier for end-users to report back their machine configurations to a centralized database. Mike McGrath provides an excellent backend for developing Smolt GUIs which I have coupled with GTK+ for GSmolt:
(Click on the thumbnails for larger versions.)
The script can be found at the gsmolt repository on GitHub. Things on todo list include profile reporting in a separate thread and better error handling. I’ll provide RPM and Deb packages when the code is ready for a public release.
As a side note, this is the first project I have tracked using GitHub (as opposed to Launchpad + Bazaar). While Launchpad has its added advantage of PPAs which make it easier to push out public releases for Debian derivatives, I’m liking the Git experience so far. Hopefully some day Copr shall mature to a point where it can be the end-all, be-all Launchpad alternative for Fedora users.
, Open Source
In past, I had always struggled to find the “correct” way of launching Compiz Fusion while starting Xfce. For a while, I had resorted to the easiest — and not perhaps the prettiest — way of launching Fusion Icon with the desktop autostart files. The problem with this method lied in the fact that Xfwm was launched before Fusion, and the most glaring workaround was to write my own
xinitrc files for X startup, which was just uglier anyway.
Xfce’s own documentation is as bare as my memory while running it, so the right way was not actually obvious until I was fiddling around my configuration directory a few days ago. There, I found an interesting file named
xfce4-session.xml. To truly exploit this lovely thing, I first copied it into my home configuration directory:
[krkhan@orthanc ~]$ cp /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml
And then edited the file with a text-editor, making it look something like:
<?xml version="1.0" encoding="UTF-8"?>
<channel name="xfce4-session" version="1.0">
<property name="general" type="empty">
<property name="FailsafeSessionName" type="string" value="Failsafe"/>
<property name="SessionName" type="string" value="Default"/>
<property name="SaveOnExit" type="bool" value="false"/>
<property name="sessions" type="empty">
<property name="Failsafe" type="empty">
<property name="IsFailsafe" type="bool" value="true"/>
<property name="Count" type="int" value="5"/>
<property name="Client0_Command" type="array">
<value type="string" value="fusion-icon"/>
<value type="string" value="--force-compiz"/>
<property name="Client0_PerScreen" type="bool" value="false"/>
<property name="Client1_Command" type="array">
<value type="string" value="xfce4-panel"/>
<property name="Client1_PerScreen" type="bool" value="false"/>
<property name="Client2_Command" type="array">
<value type="string" value="Thunar"/>
<value type="string" value="--daemon"/>
<property name="Client2_PerScreen" type="bool" value="false"/>
<property name="Client3_Command" type="array">
<value type="string" value="xfdesktop"/>
<property name="Client3_PerScreen" type="bool" value="false"/>
<property name="Client4_Command" type="array">
<value type="string" value="xfce4-settings-helper"/>
<property name="Client4_PerScreen" type="bool" value="false"/>
<property name="splash" type="empty">
<property name="Engine" type="string" value=""/>
13-15 initially referred to Xfwm’s commands, but replacing them with the Fusion Icon ones worked like a charm. This way, Fusion is always guaranteed a launch, which actually wasn’t the case with other workarounds.
, Open Source
Among many of freedesktop.org’s vital contributions to GUI computing on POSIX platforms, a divine one has been the uniform specification for automatically launching programs at initiation of a desktop session. Informally put (or theoretically at least), it means that you can add programs to startup in the appropriate settings, and they will be launched automatically at initiation of your session regardless of which desktop environment you use.
It’s been about 4 years since I migrated to Xfce for everyday work and it does come with a basic tool for managing startup entries (accessed through
Application Menu > Preferences > Session and Startup). Still, if you need anything more than rudimentary addition/deletion of the entries you’re pretty much out of luck. For example, I wanted to start the applications in a particular order. I don’t know whether GNOME or KDE have the feature yet, but Xfce lacked the support for maintaining any such arrangement. The proper way to deal with the issue would have been to code the feature in the session manager myself, but since I barely get time to even read
fortune-mod these days I instead had to rely on an ugly workaround. If you’re in the same sticky situation, here it is: Go to the autostart directory (usually
~/.config/autostart), open the startup script you’re concerned with, and edit the
Exec line like this:
Exec=bash -c "sleep 3 && awn-autostart"
The ugliness arises from the fact that the new
Exec line is merely launching the program with a delay of 3 seconds. Now, you can add another program with a delay of 4 and it will almost be guaranteed to start after the 3 seconds’ one across all desktop environments. I really hope that the specification itself would be revised soon to provide a uniform way of setting the startup order. But until that gets done, I can thank
sleep for making my life simpler.
, Open Source
Ever wondered what’s the equivalent of ‘Hello World’ in the GUI world? (Besides just displaying a ‘Hello World’ label that is.) Here’s the answer: Tic Tac Toe. Now anyone may disagree with the ‘Hello World’ part for a number of reasons but no one can actually deny the fact that building a Tic Tac Toe app is a good introductory GUI exercise for anyone who has never stepped outside the console world (and that does not include TUI’s — if you’re thinking
curses). TTT may be a boring game to play, but it’s rather fun for a newbie to develop as means of getting familiar with the basics of GUI programming. Here‘s my first attempt, which you can compile using the following command line:
gcc `pkg-config --cflags --libs gtk+-2.0` -o tictactoe tictactoe.c
Of course, the above command assumes that you have the development headers of GTK+ installed on your system (and that you’re somehow interested in compiling an utterly useless application just for the sake of it). Apart from being a good read for other GTK+ newbies, the program doesn’t do much. Nevertheless, if you do decide to analyze the code and find out instances where my programming practices start resembling those of a haywire baboon (or a Microsoft developer — which is actually the same thing anyway), please oblige me by pointing them out using the comments form of this post.
, Tic Tac Toe