Moving Compiz to a local overlay in Gentoo

Sadly, Compiz’s heyday has passed and the Compiz ebuilds in the Gentoo Portage main tree were recently masked for removal. I rarely use Compiz these days, as KWin’s Desktop Effects are now almost as good. Nevertheless I want to keep Compiz installed for the time being, so I decided to move the ebuilds to a local overlay before the Gentoo developers remove them from the main Portage tree. Here’s how I did it.

The masked Compiz packages installed on my machine were:

# eix -I compiz
[D] dev-python/compizconfig-python
Available versions: [M](~)0.8.4 [M](~)0.8.4-r1 [M](~)0.8.4-r3
Installed versions: 0.8.4-r3(00:52:18 01/09/11)
Homepage: http://www.compiz.org/
Description: Compizconfig Python Bindings

[D] x11-libs/compiz-bcop
Available versions: [M](~)0.8.4
Installed versions: 0.8.4(23:33:17 27/08/11)
Homepage: http://www.compiz.org/
Description: Compiz Option code Generator

[D] x11-libs/compizconfig-backend-gconf
Available versions: [M](~)0.8.4-r2
Installed versions: 0.8.4-r2(18:39:26 27/08/11)
Homepage: http://www.compiz.org/
Description: Compizconfig Gconf Backend

[D] x11-libs/compizconfig-backend-kconfig4
Available versions: [M](~)0.8.4 {aqua}
Installed versions: 0.8.4(23:35:31 27/08/11)(-aqua -kdeenablefinal)
Homepage: http://www.compiz.org/
Description: Compizconfig Kconfig Backend

[D] x11-libs/libcompizconfig
Available versions: [M](~)0.8.4-r2!t
Installed versions: 0.8.4-r2!t(18:32:41 27/08/11)
Homepage: http://www.compiz.org/
Description: Compiz Configuration System

[D] x11-plugins/compiz-plugins-extra
Available versions: [M](~)0.8.6-r1 {gconf libnotify}
Installed versions: 0.8.6-r1(23:35:08 27/08/11)(libnotify -gconf)
Homepage: http://www.compiz.org/
Description: Compiz Fusion Window Decorator Extra Plugins

[D] x11-plugins/compiz-plugins-main
Available versions: [M](~)0.8.6-r1 {gconf}
Installed versions: 0.8.6-r1(18:33:51 27/08/11)(-gconf)
Homepage: http://www.compiz.org/
Description: Compiz Fusion Window Decorator Plugins

[D] x11-plugins/compiz-plugins-unsupported
Available versions: [M](~)0.8.4-r1!m
Installed versions: 0.8.4-r1!m(18:36:55 27/08/11)
Homepage: http://www.compiz.org/
Description: Compiz Fusion Window Decorator Unsupported Plugins

[D] x11-wm/compiz
Available versions: [M](~)0.8.6-r3 {+cairo fuse gconf gnome gtk kde +svg}
Installed versions: 0.8.6-r3(18:54:59 23/11/11)(cairo gtk kde svg -fuse -gconf -gnome)
Homepage: http://www.compiz.org/
Description: OpenGL window and compositing manager

[D] x11-wm/compiz-fusion
Available versions: [M](~)0.8.4-r1 [M](~)0.8.6 {emerald gnome kde unsupported}
Installed versions: 0.8.6(18:55:16 23/11/11)(emerald kde -gnome -unsupported)
Homepage: http://www.compiz.org/
Description: Compiz Fusion (meta)

Found 10 matches.
# eix -I fusion
[D] x11-apps/fusion-icon
Available versions: [M](~)0.1-r2 {gtk qt4}
Installed versions: 0.1-r2(18:55:09 23/11/11)(gtk qt4)
Homepage: http://compiz-fusion.org
Description: Compiz Fusion Tray Icon and Manager

[D] x11-wm/compiz-fusion
Available versions: [M](~)0.8.4-r1 [M](~)0.8.6 {emerald gnome kde unsupported}
Installed versions: 0.8.6(18:55:16 23/11/11)(emerald kde -gnome -unsupported)
Homepage: http://www.compiz.org/
Description: Compiz Fusion (meta)

Found 2 matches.
# eix -I ccsm
[D] x11-apps/ccsm
Available versions: [M](~)0.8.4-r1
Installed versions: 0.8.4-r1(23:33:31 27/08/11)
Homepage: http://www.compiz.org/
Description: Compizconfig Settings Manager

# eix -I emerald
[D] x11-themes/emerald-themes
Available versions: [M](~)0.5.2
Installed versions: 0.5.2(18:47:58 27/01/11)
Homepage: http://compiz-fusion.org
Description: Emerald window decorator themes

[D] x11-wm/emerald
Available versions: [M](~)0.8.4-r2
Installed versions: 0.8.4-r2(21:28:46 27/08/11)
Homepage: http://www.compiz.org/
Description: Emerald Window Decorator

Found 2 matches.

Using the locate command I quickly located the ebuilds:

/usr/portage/dev-python/compizconfig-python/compizconfig-python-0.8.4-r3.ebuild
/usr/portage/x11-libs/compiz-bcop/compiz-bcop-0.8.4.ebuild
/usr/portage/x11-libs/compizconfig-backend-gconf/compizconfig-backend-gconf-0.8.4-r2.ebuild
/usr/portage/x11-libs/compizconfig-backend-kconfig4/compizconfig-backend-kconfig4-0.8.4.ebuild
/usr/portage/x11-libs/libcompizconfig/libcompizconfig-0.8.4-r2.ebuild
/usr/portage/x11-plugins/compiz-plugins-extra/compiz-plugins-extra-0.8.6-r1.ebuild
/usr/portage/x11-plugins/compiz-plugins-main/compiz-plugins-main-0.8.6-r1.ebuild
/usr/portage/x11-plugins/compiz-plugins-unsupported/compiz-plugins-unsupported-0.8.4-r1.ebuild
/usr/portage/x11-wm/compiz/compiz-0.8.6-r3.ebuild
/usr/portage/x11-wm/compiz-fusion/compiz-fusion-0.8.6.ebuild
/usr/portage/x11-apps/fusion-icon/fusion-icon-0.1-r2.ebuild
/usr/portage/x11-apps/ccsm/ccsm-0.8.4-r1.ebuild
/usr/portage/x11-themes/emerald-themes/emerald-themes-0.5.2.ebuild
/usr/portage/x11-wm/emerald/emerald-0.8.4-r2.ebuild

I first created the necessary directories in my local overlay:

mkdir -p /usr/local/portage/dev-python/compizconfig-python
mkdir -p /usr/local/portage/x11-libs/compiz-bcop
mkdir -p /usr/local/portage/x11-libs/compizconfig-backend-gconf
mkdir -p /usr/local/portage/x11-libs/compizconfig-backend-kconfig4
mkdir -p /usr/local/portage/x11-libs/libcompizconfig
mkdir -p /usr/local/portage/x11-plugins/compiz-plugins-extra
mkdir -p /usr/local/portage/x11-plugins/compiz-plugins-main
mkdir -p /usr/local/portage/x11-plugins/compiz-plugins-unsupported
mkdir -p /usr/local/portage/x11-wm/compiz
mkdir -p /usr/local/portage/x11-wm/compiz-fusion
mkdir -p /usr/local/portage/x11-apps/fusion-icon
mkdir -p /usr/local/portage/x11-apps/ccsm
mkdir -p /usr/local/portage/x11-themes/emerald-themes
mkdir -p /usr/local/portage/x11-wm/emerald

Then I copied the ebuilds and associated files into each directory and generated a manifest for each:

cd /usr/local/portage/dev-python/compizconfig-python
cp -r /usr/portage/dev-python/compizconfig-python/* .
ebuild compizconfig-python-0.8.4-r3.ebuild manifest
cd /usr/local/portage/x11-libs/compiz-bcop
cp -r /usr/portage/x11-libs/compiz-bcop/* .
ebuild compiz-bcop-0.8.4.ebuild manifest
cd /usr/local/portage/x11-libs/compizconfig-backend-gconf
cp -r /usr/portage/x11-libs/compizconfig-backend-gconf/* .
ebuild compizconfig-backend-gconf-0.8.4-r2.ebuild manifest
cd /usr/local/portage/x11-libs/compizconfig-backend-kconfig4
cp -r /usr/portage/x11-libs/compizconfig-backend-kconfig4/* .
ebuild compizconfig-backend-kconfig4-0.8.4.ebuild manifest
cd /usr/local/portage/x11-libs/libcompizconfig
cp -r /usr/portage/x11-libs/libcompizconfig/* .
ebuild libcompizconfig-0.8.4-r2.ebuild manifest
cd /usr/local/portage/x11-plugins/compiz-plugins-extra
cp -r /usr/portage/x11-plugins/compiz-plugins-extra/* .
ebuild compiz-plugins-extra-0.8.6-r1.ebuild manifest
cd /usr/local/portage/x11-plugins/compiz-plugins-main
cp -r /usr/portage/x11-plugins/compiz-plugins-main/* .
ebuild compiz-plugins-main-0.8.6-r1.ebuild manifest
cd /usr/local/portage/x11-plugins/compiz-plugins-unsupported
cp /usr/portage/x11-plugins/compiz-plugins-unsupported/* .
ebuild compiz-plugins-unsupported-0.8.4-r1.ebuild manifest
cd /usr/local/portage/x11-wm/compiz
cp -r /usr/portage/x11-wm/compiz/* .
ebuild compiz-0.8.6-r3.ebuild manifest
cd /usr/local/portage/x11-wm/compiz-fusion
cp -r /usr/portage/x11-wm/compiz-fusion/* .
ebuild compiz-fusion-0.8.6.ebuild manifest
cd /usr/local/portage/x11-apps/fusion-icon
cp -r /usr/portage/x11-apps/fusion-icon/* .
ebuild fusion-icon-0.1-r2.ebuild manifest
cd /usr/local/portage/x11-apps/ccsm
cp -r /usr/portage/x11-apps/ccsm/* .
ebuild ccsm-0.8.4-r1.ebuild manifest
cd /usr/local/portage/x11-themes/emerald-themes
cp -r /usr/portage/x11-themes/emerald-themes/* .
ebuild emerald-themes-0.5.2.ebuild manifest
cd /usr/local/portage/x11-wm/emerald
cp -r /usr/portage/x11-wm/emerald/* .
ebuild emerald-0.8.4-r2.ebuild manifest

My /etc/make.conf file contains the following lines required for my local overlay and to accept any licences:

PORTDIR_OVERLAY="${PORTDIR_OVERLAY} /usr/local/portage/"
ACCEPT_LICENSE="*"

and I named my local overlay ‘local_overlay’:

mkdir /usr/local/portage/profiles
echo "local_overlay" > /usr/local/portage/profiles/repo_name

I then unmasked the ebuilds in my local overlay by listing them in the file
/etc/portage/package.unmask:

=dev-python/compizconfig-python-0.8.4-r3::local_overlay
=x11-libs/compiz-bcop-0.8.4::local_overlay
=x11-libs/compizconfig-backend-gconf-0.8.4-r2::local_overlay
=x11-libs/compizconfig-backend-kconfig4-0.8.4::local_overlay
=x11-libs/libcompizconfig-0.8.4-r2::local_overlay
=x11-plugins/compiz-plugins-extra-0.8.6-r1::local_overlay
=x11-plugins/compiz-plugins-main-0.8.6-r1::local_overlay
=x11-plugins/compiz-plugins-unsupported-0.8.4-r1::local_overlay
=x11-wm/compiz-0.8.6-r3::local_overlay
=x11-wm/compiz-fusion-0.8.6::local_overlay
=x11-apps/fusion-icon-0.1-r2::local_overlay
=x11-apps/ccsm-0.8.4-r1::local_overlay
=x11-themes/emerald-themes-0.5.2::local_overlay
=x11-wm/emerald-0.8.4-r2::local_overlay

I right-clicked on the Fusion Icon on the Panel and selected Quit, then I uninstalled the packages and reinstalled them from my local overlay:

emerge -aC compizconfig-python compiz-bcop compizconfig-backend-gconf compizconfig-backend-kconfig4 libcompizconfig compiz-plugins-extra compiz-plugins-main compiz-plugins-unsupported compiz compiz-fusion fusion-icon ccsm emerald-themes emerald

USE="-kde qt4" emerge -1v compizconfig-python compiz-bcop compizconfig-backend-gconf compizconfig-backend-kconfig4 libcompizconfig compiz-plugins-extra compiz-plugins-main compiz-plugins-unsupported compiz compiz-fusion fusion-icon ccsm emerald-themes emerald

The installed packages are now:

# eix -I compiz
[I] dev-python/compizconfig-python
Available versions: [M](~)0.8.4 {M}(~)0.8.4[1] [M](~)0.8.4-r1 {M}(~)0.8.4-r1[1] [M](~)0.8.4-r3 {M}(~)0.8.4-r3[1]
Installed versions: 0.8.4-r3[1](02:03:18 28/01/12)
Homepage: http://www.compiz.org/
Description: Compizconfig Python Bindings

[I] x11-libs/compiz-bcop
Available versions: [M](~)0.8.4 {M}(~)0.8.4[1]
Installed versions: 0.8.4[1](02:01:00 28/01/12)
Homepage: http://www.compiz.org/
Description: Compiz Option code Generator

[I] x11-libs/compizconfig-backend-gconf
Available versions: [M](~)0.8.4-r2 {M}(~)0.8.4-r2[1]
Installed versions: 0.8.4-r2[1](02:03:34 28/01/12)
Homepage: http://www.compiz.org/
Description: Compizconfig Gconf Backend

[I] x11-libs/compizconfig-backend-kconfig4
Available versions: [M](~)0.8.4 {M}(~)0.8.4[1] {aqua}
Installed versions: 0.8.4[1](02:03:59 28/01/12)(-aqua)
Homepage: http://www.compiz.org/
Description: Compizconfig Kconfig Backend

[I] x11-libs/libcompizconfig
Available versions: [M](~)0.8.4-r2!t {M}(~)0.8.4-r2!t[1]
Installed versions: 0.8.4-r2!t[1](02:01:31 28/01/12)
Homepage: http://www.compiz.org/
Description: Compiz Configuration System

[I] x11-plugins/compiz-plugins-extra
Available versions: [M](~)0.8.6-r1 {M}(~)0.8.6-r1[1] {gconf libnotify}
Installed versions: 0.8.6-r1[1](02:05:19 28/01/12)(libnotify -gconf)
Homepage: http://www.compiz.org/
Description: Compiz Fusion Window Decorator Extra Plugins

[I] x11-plugins/compiz-plugins-main
Available versions: [M](~)0.8.6-r1 {M}(~)0.8.6-r1[1] {gconf}
Installed versions: 0.8.6-r1[1](02:02:55 28/01/12)(-gconf)
Homepage: http://www.compiz.org/
Description: Compiz Fusion Window Decorator Plugins

[I] x11-plugins/compiz-plugins-unsupported
Available versions: [M](~)0.8.4-r1!m {M}(~)0.8.4-r1!m[1]
Installed versions: 0.8.4-r1!m[1](02:06:11 28/01/12)
Homepage: http://www.compiz.org/
Description: Compiz Fusion Window Decorator Unsupported Plugins

[I] x11-wm/compiz
Available versions: [M](~)0.8.6-r3 {M}(~)0.8.6-r3[1] {+cairo fuse gconf gnome gtk kde +svg}
Installed versions: 0.8.6-r3[1](02:41:46 28/01/12)(cairo gtk svg -fuse -gconf -gnome -kde)
Homepage: http://www.compiz.org/
Description: OpenGL window and compositing manager

[I] x11-wm/compiz-fusion
Available versions: [M](~)0.8.4-r1 {M}(~)0.8.4-r1[1] [M](~)0.8.6 {M}(~)0.8.6[1] {emerald gnome kde unsupported}
Installed versions: 0.8.6[1](02:07:11 28/01/12)(emerald -gnome -kde -unsupported)
Homepage: http://www.compiz.org/
Description: Compiz Fusion (meta)

[1] "local_overlay" /usr/local/portage

Found 10 matches.
# eix -I fusion
[I] x11-apps/fusion-icon
Available versions: [M](~)0.1-r2 {M}(~)0.1-r2[1] {gtk qt4}
Installed versions: 0.1-r2[1](02:06:20 28/01/12)(gtk qt4)
Homepage: http://compiz-fusion.org
Description: Compiz Fusion Tray Icon and Manager

[I] x11-wm/compiz-fusion
Available versions: [M](~)0.8.4-r1 {M}(~)0.8.4-r1[1] [M](~)0.8.6 {M}(~)0.8.6[1] {emerald gnome kde unsupported}
Installed versions: 0.8.6[1](02:07:11 28/01/12)(emerald -gnome -kde -unsupported)
Homepage: http://www.compiz.org/
Description: Compiz Fusion (meta)

[1] "local_overlay" /usr/local/portage

Found 2 matches.
# eix -I ccsm
[I] x11-apps/ccsm
Available versions: [M](~)0.8.4-r1 {M}(~)0.8.4-r1[1]
Installed versions: 0.8.4-r1[1](02:05:30 28/01/12)
Homepage: http://www.compiz.org/
Description: Compizconfig Settings Manager

[1] "local_overlay" /usr/local/portage
# eix -I emerald
[I] x11-themes/emerald-themes
Available versions: [M](~)0.5.2 {M}(~)0.5.2[1]
Installed versions: 0.5.2[1](02:07:05 28/01/12)
Homepage: http://compiz-fusion.org
Description: Emerald window decorator themes

[I] x11-wm/emerald
Available versions: [M](~)0.8.4-r2 {M}(~)0.8.4-r2[1]
Installed versions: 0.8.4-r2[1](02:06:55 28/01/12)
Homepage: http://www.compiz.org/
Description: Emerald Window Decorator

[1] "local_overlay" /usr/local/portage

Found 2 matches.

I launched KRunner (Alt-F2) and entered the command “fusion-icon” (without the quotes) to get the Fusion Icon back on the Panel, and then rebooted to check if everything was working correctly.

The only way I could get compiz-0.8.6-r3 to build this time was to specify "-kde" as a USE flag. The last time I merged that package, back in November 2011, it would build with USE="kde qt4" and enable me to select Emerald, GTK Window Decorator or KDE Window Decorator as the window decorator in Compiz. But, as the package will no longer build with the kde USE flag, I now only have the choice of Emerald or GTK Window Decorator. Perhaps this old, unmaintained compiz ebuild will no longer build with USE="kde" because I have since installed new versions of other packages on which it depends, and/or because I am now using KDE 4.8.0 instead of KDE 4.7.3. Anyway, at least I now have Compiz available for a while yet and can still select KWin or Compiz as the Window Manager.

EDIT (February 1, 2012): The stuff overlay has the following ebuilds, which do enable the KDE4 Window Decorator to be used with Compiz in KDE 4.8.0:

dev-python/compizconfig-python-0.8.4-r3
x11-libs/compiz-bcop-0.8.8
x11-libs/compizconfig-backend-gconf-0.8.8
x11-libs/compizconfig-backend-kconfig4-0.8.8
x11-libs/libcompizconfig-0.8.8
x11-plugins/compiz-plugins-extra-0.8.8
x11-plugins/compiz-plugins-main-0.8.8
x11-plugins/compiz-plugins-unsupported-0.8.8
x11-wm/compiz-0.8.8
x11-wm/compiz-fusion-0.8.8
x11-apps/fusion-icon-0.1-r2
x11-apps/ccsm-0.8.4-r1
x11-themes/emerald-themes-0.5.2
x11-wm/emerald-0.8.8

which can be installed as follows:

# layman -a stuff
# USE="kde qt4" emerge -1v compizconfig-python::stuff compiz-bcop::stuff compizconfig-backend-gconf::stuff compizconfig-backend-kconfig4::stuff libcompizconfig::stuff compiz-plugins-extra::stuff compiz-plugins-main::stuff compiz-plugins-unsupported::stuff compiz::stuff compiz-fusion::stuff fusion-icon::stuff ccsm::stuff emerald-themes::stuff emerald::stuff

Playing QuickTime videos in Firefox and Chromium + XVideo bug in AMD Catalyst 11.11 and 11.12 driver

Video problems seem to be perennial in Linux. The latest two to affect me were:

1) Firefox and Chromium could no longer play QuickTime videos on the Apple iTunes Movie Trailers Web site;

2) a bug in the latest two releases of the closed-source ATI FGLRX driver (AMD Catalyst 11.11 and 11.12 for Linux) that causes the X.Org Server to crash when I try to play .mov files using XVideo (Xv) output in media players such as SMPlayer, VLC, GNOME-MPlayer etc. (see e.g. Gentoo Bug Report No. 391193).

The reason I mention these two problems in the same breath is because I encountered the second whilst trying to fix the first. Anyway, below I explain what I did to resolve the two problems.

I first had a problem displaying QuickTime movie trailers in Firefox a couple of years ago. The solution then was to install the User Agent Switcher add-on for Firefox and create a user agent to fool the Apple Web site into thinking Firefox was using Apple’s QuickTime browser plugin instead of mplayerplug-in for Linux. But within a few days Firefox again could not play movie trailers on the Apple Web site. I had to uninstall mplayerplug-in and install the then latest version of its successor, gecko-mediaplayer (which uses gnome-mplayer). All was good again until…

Several months ago I found that, yet again, Firefox could not play movie trailers on the Apple Web site. I tried to view the trailers in Chromium instead but had the same problem. Both browsers just displayed a black box where the video should be playing. A little searching on the Web led me to the conclusion that the problem lay with the latest version of gecko-mediaplayer and gnome-mplayer that I was using at the time, so I gave up and decided to wait for new versions of gecko-mediaplayer and gnome-mplayer to be released.

Now, yesterday I wanted to watch a particular trailer on the Apple Web site, but, despite having installed the latest version of gecko-mediaplayer and gnome-mplayer anyway a few days ago, neither Firefox nor Chromium would display the trailer. A little searching on the Web suggested that I should try mozplugger instead of gecko-mediaplayer, so I uninstalled the latter, installed mozplugger and… the black box in the browser was replaced by a white box displaying the QuickTime ‘Q’ logo and a message that I needed to install QuickTime. Argghh!

So I uninstalled mozplugger and reinstalled gecko-mediaplayer and gnome-mplayer (the same versions that I installed recently, you inderstand). This time my attempts to watch trailers on the Apple Web site resulted in Firefox and Chromium displaying grey boxes and appearing to download the QuickTime videos, but then the X.Org Server crashed, restarted and the Desktop Environment’s login screen appeared. Furthermore, when I tried playing .mov videos in VLC, the same thing happened. Perhaps now you may understand why I mentioned above the bug with the FGLRX driver? It took me a few hours to realise there were two separate problems here.

The work-around to the second problem was to configure media players to use a different output driver rather than the XVideo (Xv) output driver. For example, in VLC this is done via Tools > Preferences > Video and selecting ‘GLX video output (XCB)’ as the Output under Video Settings. For SMPlayer this is done via Options > Preferences > General and selecting ‘gl (fast – ATI cards)’ as the Output driver under the Video tab.

And, most importantly, in order to enable gecko-mediaplayer to display those Apple QuickTime trailers in Firefox and Chromium I had to launch gnome-mplayer, select Edit > Preferences, click on the Player tab and select ‘gl’ as the Video Output under Adjust Output Settings. Actually, clicking on the MPlayer tab and entering “-vo gl” (without the quotes) in the ‘Extra Options to MPlayer:’ box achieves the same result. By the way, the tickboxes QuickTime Emulation, RealPlayer Emulation, Windows Media Player Emulation and DIVX Player Emulation were already ticked on the Plug-in tab.

So, there you have it. After several hours of searching and tinkering I can again watch movie trailers on the Apple Web site. Don’t you just love Linux?

For the sake of completeness, below I list the versions of the applicable packages currently installed on my main laptop:

firefox-9.0
chromium-16.0.912.63
gecko-mediaplayer-1.0.5_beta1_p20111207
gnome-mplayer-1.0.5_beta1
mplayer-1.0_rc4_p20111215
ffmpeg-0.9
libquicktime-1.2.3-r1
xorg-server-1.11.2-r2
ati-drivers-11.12

EDIT (January 2, 2012): I’ve just had a thought: When I used Skype for Linux a few days ago, my laptop rebooted spontaneously as soon as the person at the other end enabled her Webcam in Skype for Windows. This was reproducible consistently. However, I could enable my Webcam, she could see me in Skype on her PC, and I could also see video of me in Skype’s ‘myself preview’ on my laptop. Now, it could be a coincidence but I wonder if the reboot occurred because Skype for Linux uses XVideo? Skype’s Web page for Skype for Linux lists “Video card driver with Xv support” as one of the hardware requirements, which looks pretty conclusive to me. However, this leaves a couple of niggling questions: a) If Skype does indeed use XVideo, why didn’t the ‘myself preview’ video in the Skype for Linux window crash the X.Org Server?. b) If the FGLRX driver bug is the cause, why did my laptop reboot instead of just the X.Org Server crashing, restarting and displaying the Desktop Environment login screen? Furthermore, Skype’s Options > Video Devices > Test does work correctly on my laptop. So perhaps the rebooting problem is caused by a different bug. Suspicious, though. Unfortunately, as far as I know there is no way of switching Skype to use OpenGL instead of XVideo, so I cannot prove that XVideo is the cause of this particular problem I’m experiencing with Skype.

How to install and use Tor for anonymous browsing or to access country-restricted content from another country

Some people want to browse the Web in complete anonymity. One tool for doing that is Tor. However, there are other reasons for using Tor. For example, when I am travelling in a country where the government blocks certain Web sites (or blocks accessing content on certain Web sites), or when I am travelling overseas and certain Web sites back home will not let me view content (e.g. TV shows), I use Tor. Note that some Web sites are now clever enough to detect that you are accessing them via a proxy and could be overseas, so even Tor will not gain you access to media on some Web sites back home. Anyway, it’s still worth trying Tor to see if it works in your case.

For an overview of the installation and configuration procedure, see Running the Tor client on Linux/BSD/Unix. Below I will explain how to install and use Tor in Gentoo Linux.

Before you use Tor, it is useful to check your current IP address. Several Web sites will tell you your current IP address; here is the site I usually use: http://whatismyipaddress.com/

1. Install Tor:

# USE="tordns" emerge -1v tor

(Actually, the more-recent versions of the tor package don’t require that USE flag but I’ve left it in as it does no harm.)

2. Install Vidalia:

# cd /usr/portage/distfiles/
# wget --no-check-certificate https://www.torproject.org/dist/vidalia/vidalia-x.y.z.tar.gz
# USE="tor" emerge -1v vidalia

Use the current version x.y.z of the vidalia package in the package manager and https://www.torproject.org/dist/vidalia/

3. Install Polipo:

# emerge -1v polipo

4. Download polipo.conf

# cd /etc/polipo
# wget --no-check-certificate https://gitweb.torproject.org/torbrowser.git/blob_plain/HEAD:/build-scripts/config/polipo.conf

Edit April 21, 2013: The above URL is now:

https://gitweb.torproject.org/torbrowser.git/blob_plain/ae4aa49ad9100a50eec049d0a419fac63a84d874:/build-scripts/config/polipo.conf

5. Edit it and change proxyPort = 8118 to proxyPort = 8123

6. Copy it to /etc/polipo/:

# cd /etc/polipo
# cp /etc/polipo/config /etc/polipo/config.bak
# cp polipo.conf config

7. Configure Firefox:

Edit > Preferences > Network > Settings

Manual proxy configuration:

HTTP Proxy: 127.0.0.1 Port: 8123
SSL Proxy: 127.0.0.1 Port 8123

SOCKS Host: 127.0.0.1 Port 9051
SOCKS v5
No Proxy for: 127.0.0.1

8. Run Vidalia and then configure it:

$ vidalia &

a) Settings > Sharing

Select ‘Run as a client only’

b) Settings > Advanced

Select ‘Use TCP connection (ControlPort)’
Address: 127.0.0.1 9051

Tor Configuration File:
/home/fitzcarraldo/.vidalia/torrc

Data Directory:
/home/fitzcarraldo/.tor

c) Click on ‘Edit current torrc’ and make it:

# This file was generated by Tor; if you edit it, comments will not be preserved
# The old torrc file was renamed to torrc.orig.1 or similar, and Tor will ignore it
ControlPort 9051
ExitNodes {gb}
Log notice stdout
SocksListenAddress 127.0.0.1
StrictNodes 1

Note that I have specified “{gb}” above so that I am perceived by Web sites to be browsing in the UK even if I am in another country. But you can use a different country code if you want Web sites to perceive you are in another country. For example, “{us}” would make it look as if you are browsing in the USA.

9. Run Polipo:

$ sudo polipo

10. Surf to http://torcheck.xenobite.eu/ to check that you are now using a Tor exit node.

11. Surf to http://whatismyipaddress.com/ to check that your IP address has changed.

Sabayon Linux developers split the Portage sabayon overlay into two new overlays

If you are a Gentoo Linux user who added the sabayon overlay, or if you are a Sabayon Linux user who already uses Portage, note that the developers of Sabayon Linux have just split the overlay into two overlays. One of the overlays (sabayon-distro) contains ebuilds that are specific to the Sabayon Linux distribution and unlikely to be of interest to users of other distributions that use the Portage package manager. The other overlay (sabayon) contains ebuilds that could be of interest to Portage users of other distributions. For example, the package app-misc/sabayon-version will only be of relevance to users of Sabayon Linux, so you’ll only find it in the sabayon-distro overlay, not the sabayon overlay:

# eix sabayon-version
* app-misc/sabayon-version [1]
Available versions: (~)5-r5 (~)7-r1
Homepage: http://www.sabayon.org/
Description: Sabayon System Release virtual package

[1] "sabayon-distro" /var/lib/layman/sabayon-distro

All you need to do in order to cater for this change is the following as root user:

layman -d sabayon
layman -S
layman -a sabayon
layman -a sabayon-distro
eix-update

You only need to add the sabayon-distro overlay if you are a user of Sabayon Linux or want to install any of the distribution-specific ebuilds from it. Of course omit the eix-update command if you do not have the excellent eix utility installed.

From then onwards you can just continue as normal using the usual Portage commands as root user in order to synchronise the main Portage tree and synchronise all the overlays added on your machine:

emerge --sync
layman -S
eix-update

or, if you have an asterisk on its own line in the file /etc/eix-sync.conf then you can replace the above three commands with the following single command:

eix-sync

Secure deletion of a file via the KDE GUI

One of the various Linux tools for secure deletion of files is the srm command. In Gentoo Linux the srm command and other security-related commands are available by installing the package secure-delete. Now, srm is easy enough to use from the command line:

$ srm mysecrets.doc

You can do the same thing from the KDE GUI very easily by adding the srm command to the KDE Service Menu. To do this, first install KDE Service Menu Editor. Then launch it and do the following:

On the Actions tab:

1. Enter “Securely Delete” (without the quotes) in the Label box.

2. Enter srm -r %u in the Exec box. As you will see if you use the man srm command, the “-r” option means “recursive mode, deletes all subdirectories”. I’ve added this option so that I can securely delete directories and all their contents including sub-directories, as well as individual files.

3. Click on the blank Icon and choose a suitable icon. I selected System Icons > Actions, entered “delete” (without the quotes) in the Search box and selected the big red X (edit-delete) icon.

On the Conditions tab:

4. Against ‘Display the menu for:’, click on All Files.

5. Click OK then Close, and you’re done.

Now all you need to do in KDE is right-click on a file or directory and select Actions > Securely Delete.

The above configuration will only allow you to delete files and directories owned by your user name. However, if you also want to be able to delete files owned by other Linux accounts on your machine then you can modify the command in the KDE Service Menu to prompt you for the root user’s password. To do that, in Step 2 above you would use the following command instead:

kdesu srm -r %u

Now when you right-click on a file or directory, a window will pop up and prompt you to enter the root user’s password.

Of course, if you would prefer to use a different tool to securely delete a file or directory then you could substitute the srm command with e.g. wipe or bcwipe if you have those installed. Use man wipe and man bcwipe after installing them, to check which options you might want to use.

Note that some of your data might be in a temporary (deleted) copy of the file somewhere on the disk. If you installed the secure-delete package then you could use the sfill command to wipe free disk space on any mounted partition, but you would need to be root user to use it. Note also that, if a small file has already acquired a block with your data, no tool can remove that data. Anyway, if you also want to securely wipe any free disk space you can modify the aforementioned command in the KDE Service Menu even further:

kdesu srm -r %u && kdesu sfill directory/mountpoint

I have my /home directory on its own partition, so, in my case the KDE Service Menu entry would be:

kdesu srm -r %u && kdesu sfill /home

This would pop up a window twice prompting you to enter the root user’s password: once for the srm command, and once for the sfill command. Note that the sfill command can take a very, very long time to wipe the free space if it is large (I personally don’t bother using it, as I don’t want my hard disk thrashing for hours). The sfill command works by creating one big file to fill all the free space, then writes to that file using several steps to ensure all the previously-free areas of the disk have had their original contents erased. Once that is completed, the utility then removes the big file, releasing the free disk space.

If you think your swap space contains some of your data, you could use the sswap command — also available if you install the secure-delete package — for secure deletion of the swap space, but you would need to disable your swap space first. I have 4 GB of RAM and my swap partition is virtually never used, so I don’t bother putting my tinfoil hat on in the case of swap either.

KDE 4 Service Menu Editor

You would have thought that it would be possible to edit the KDE Service Menu (the menu that you see when you right-click on an entry in a Dolphin or Konqueror window) or add your own commands to it. However, this is not a feature of KDE 4 to date (June 2011). Fortunately, KDE developer David Edmundson produced a handy GUI utility to do just this. His blog post KDE Service Menu Editor and KDE-Apps.org entry give the details.

I hope this utility will become part of KDE in a future release, but, until it does, below I explain how I installed it in KDE 4.6.2 for Sabayon Linux. The same procedure should apply in the case of Gentoo Linux.

1. Download kservicemenueditor-0.2a.tar.gz and extract it to ~/kservicemenueditor-0.2a/

2. N.B. This step is distribution-dependent, and may not be necessary for your distribution. Use the following command to determine whether or not you need to perform this edit:

$ kde4-config --path data

If the above command returns the following paths:

/home/fitzcarraldo/.kde4/share/apps/:/usr/share/apps/

then edit setup.py and change the line:

('share/kde4/apps/servicemenueditor', glob.glob("*.ui")),

to:

('share/apps/servicemenueditor', glob.glob("*.ui")),

3. To install KDE Service Menu Editor:

$ cd ~/kservicemenueditor-0.2a/
$ su
Password:
# ./setup.py install
# exit
exit
$

4. To launch the utility, either run it on the command line from your normal user account:

$ servicemenueditor

or double-click the Desktop Configuration File servicemenueditor.desktop (which you can place on your Desktop or in any other directory).

5. Usage example:

Let’s assume you want to make a right-click menu for compressing a file with GZip. In that case you would carry out the steps listed below.

a) Launch servicemenueditor.
b) Click ‘Add’.
c) In the box type the name “compress” (without the quotes) and click ‘OK’.
d) Click on the ‘Conditions’ tab and select ‘All Files’ as you want to be able to work on all files.
e) Click the ‘Action’ tab and enter “Compress Files” (without the quotes) in the ‘Label’ box. This is what will appear in the ‘Actions’ Menu.
f) Click on the blank icon and select an icon of your choice.
g) In the ‘Exec’ box, type the command needed. For this example “gzip %u” would be the command.

Converseen, a GUI batch image converter and resizer using Qt4 and ImageMagick

I normally use ImageMagick on the command line to convert and/or resize my photographs, and the two commands I use are convert and mogrify. However, I learned recently of Converseen, a GUI tool for batch conversion and resizing of image files which is a front-end for ImageMagick. Although it’s easy enough to use the command line, a GUI tool does save having to remember the command syntax each time, so I thought I’d install Converseen in Gentoo. Converseen is not in the main Portage tree, but I found an ebuild for version 0.2 from the qting-edge overlay. However, rather than add the overlay I decided instead to use a local overlay to install Converseen, which is currently at version 0.4.1, and the procedure I used is given below.

1. I downloaded to ~/Desktop/ the ebuild file from http://gitorious.org/gentoo-qt/qting-edge/blobs/master/media-gfx/converseen/converseen-0.2.ebuild and renamed it as converseen-0.4.1.ebuild, which contains the following:

# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI="2"

LANGSLONG="it_IT pl_PL"

inherit qt4-edge

MY_P=${PN}-${PV}

DESCRIPTION="GUI image conversion tool based on imagemagick"
HOMEPAGE="http://converseen.sourceforge.net"
SRC_URI="mirror://sourceforge/${PN}/${MY_P}.tar.bz2"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="debug"

DEPEND="x11-libs/qt-gui:4
|| ( media-gfx/graphicsmagick[imagemagick] media-gfx/imagemagick )"
RDEPEND="${DEPEND}"

S="${WORKDIR}/${MY_P}"

DOCS="README"

src_prepare() {
qt4-edge_src_prepare

sed -i -e "s!/usr/lib!/usr/$(get_libdir)!" ${PN}.pro \
|| die "sed libdir failed"

local ts_files=
for lingua in ${LINGUAS}; do
for a in ${LANGSLONG}; do
if [[ ${lingua} == ${a%_*} ]]; then
ts_files="${ts_files} loc/${PN}_${a}.ts"
fi
done
done
local qm_files="${ts_files/.ts/.qm}"

sed -e '/^ loc/d' \
-e "s!\(TRANSLATIONS += \).*!\1${ts_files}!" \
-e "s!\(translations\.files = \).*!\1${qm_files}!" \
-i ${PN}.pro || die "sed translations failed"
}

2. I downloaded to ~/Desktop/ the file qt4-edge.eclass, which contains the following:

# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

# @ECLASS: qt4-edge.eclass
# @MAINTAINER:
# Ben de Groot ,
# Markos Chandras ,
# Davide Pesavento ,
# Dominik Kapusta
# @BLURB: Experimental eclass for Qt4 packages
# @DESCRIPTION:
# This eclass contains various functions that may be useful when
# dealing with packages using Qt4 libraries. Requires EAPI=2.

inherit base eutils multilib qt4-r2 toolchain-funcs

export XDG_CONFIG_HOME="${T}"

qt4-edge_pkg_setup() {
if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then
ewarn
ewarn "Please file bugs on bugs.gentoo.org and prepend the summary with"
ewarn "[qting-edge]. Alternatively, contact qt@gentoo.org."
ewarn "Thank you for using qting-edge overlay."
ewarn
ebeep 5
fi
}

qt4-edge_src_unpack() {
debug-print-function $FUNCNAME "$@"

qt4-r2_src_unpack "$@"
}

# @FUNCTION: qt4-edge_src_prepare
# @DESCRIPTION:
# Default src_prepare function for packages that depend on qt4. If you have to
# override src_prepare in your ebuild, you should call qt4-edge_src_prepare in it,
# otherwise autopatcher will not work!
qt4-edge_src_prepare() {
debug-print-function $FUNCNAME "$@"

qt4-r2_src_prepare
}

# @FUNCTION: qt4-edge_src_configure
# @DESCRIPTION:
# Default src_configure function for packages that depends on qt4. If you have to
# override src_configure in your ebuild, call qt4-edge_src_configure in it.
qt4-edge_src_configure() {
debug-print-function $FUNCNAME "$@"

qt4-r2_src_configure
}

# @FUNCTION: qt4-edge_src_compile
# @DESCRIPTION:
# Default src_compile function for packages that depends on qt4. If you have to
# override src_compile in your ebuild (probably you don't need to), call
# qt4-edge_src_compile in it.
qt4-edge_src_compile() {
debug-print-function $FUNCNAME "$@"

qt4-r2_src_compile
}

# @FUNCTION: qt4-edge_src_install
# @DESCRIPTION:
# Default src_install function for qt4-based packages. Installs compiled code,
# documentation (via DOCS variable) and translations (via LANGS and
# LANGSLONG variables).
qt4-edge_src_install() {
debug-print-function $FUNCNAME "$@"

qt4-r2_src_install

# install translations # hwoarang: Is this valid for every package???
# need to have specified LANGS or LANGSLONG for this to work
[[ -n "${LANGS}" || -n "${LANGSLONG}" ]] && prepare_translations
}

# Internal function
_do_qm() {
debug-print-function $FUNCNAME "$@"
[[ $# -ne 2 ]] && die "$FUNCNAME requires exactly 2 arguments!"

local transfile="$(find "${1}" -type f -name "*${2}".qm)"
if [[ -e ${transfile} ]]; then
INSDESTTREE="/usr/share/${PN}/${1#${S}}" \
doins "${transfile}" \
|| die "failed to install ${2} translation"
else
eerror
eerror "Failed to install ${2} translation. Contact eclass maintainer."
eerror
die "Failed to install translations"
fi
}

# @VARIABLE: TRANSLATIONSDIR
# @DESCRIPTION: Translations directory. If not set, ${S} will be used

# @FUNCTION: prepare_translations
# @DESCRIPTION:
# Choose and install translation files. Normally you don't need to call
# this function directly as it is called from qt4-edge_src_install.
prepare_translations() {
debug-print-function $FUNCNAME "$@"

# Find translations directory
# Changed default to . - crazy upstreams :)
local roottrdir="${TRANSLATIONSDIR:-${S}}" trdir=.
for dir in lang langs translations; do
[[ -d ${roottrdir}/${dir} ]] && trdir="${roottrdir}/${dir}"
done

local lang=
for lang in ${LINGUAS}; do
for x in ${LANGS}; do
[[ ${lang} == ${x%_*} ]] && _do_qm "${trdir}" ${x}
done
for x in ${LANGSLONG}; do
[[ ${lang} == ${x} ]] && _do_qm "${trdir}" ${x}
done
done
}

EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install

3. I synchronised the Portage main tree’s ebuilds on my PC with those in the repositories:

# emerge --sync

4. I made sure that /etc/make.conf has the following lines at the end of the file:

PORTDIR_OVERLAY="${PORTDIR_OVERLAY} /usr/local/portage/"
ACCEPT_LICENSE="*"

5. I created the necessary directories in the local overlay:

# mkdir -p /usr/local/portage/media-gfx/converseen
# mkdir -p /usr/local/portage/eclass

6. I made sure Portage would not nag me about a missing name for my local overlay:

# mkdir /usr/local/portage/profiles
# echo "local_overlay" > /usr/local/portage/profiles/repo_name

7. I copied the converseen ebuild and eclass file into the relevant directories:

# cp /home/fitzcarraldo/Desktop/converseen-0.4.1.ebuild /usr/local/portage/media-gfx/converseen/
# cp /home/fitzcarraldo/Desktop/qt4-edge.eclass /usr/local/portage/eclass/

8. I generated the manifest for the package:

# cd /usr/local/portage/media-gfx/converseen/
# ebuild converseen-0.4.1.ebuild manifest

9. I merged the package:

# emerge -1v converseen

An entry for Converseen was added to Kickoff > Applications > Graphics, and I can either use that to launch it or I can launch it from the command line by entering the command converseen. The user interface is easy to master, and I’ve already put Converseen to use at work and at home. Overall, then, a useful addition to my KDE toolkit.

EDIT (July 23, 2012}: There is an ebuild for Converseen in Portage these days, so use that instead to install Converseen.

Cannot browse some Web sites: yet another cause

Having spent hours yesterday trying to figure out why I could no longer browse a few specific Web sites from my old Gateway Solo 9300 laptop running Linux, whereas all the other Linux and Windows laptops that use my wireless network can browse any Web site, I thought I’d post the solution as Google did not turn up this particular cause.

There are several possible reasons why one may not be able to browse some Web sites: IPv6; the MTU; a black hole router en route; the settings in the various ip_* and tcp_* files in /proc/sys/net/ipv4/, and so on. So, unfortunately I had many avenues to pursue.

My old Gateway Solo 9300 laptop had enabled me to browse the Web reliably via my home wireless network until recently. Suddenly I could neither browse the Sabayon Linux Web site nor access the Entropy package manager’s repository. I could also no longer browse some other Web sites, although most Web sites were still accessible without trouble.

I tried many different things without success, and then finally remembered that I had reconfigured my router a couple of weeks ago because one of my family had reset it whilst I was away from home. Now, when this model of router (BT Home Hub, Version 1.0) is reset it defaults to WEP encryption for wireless networking. However, I normally have it set to use WPA-PSK encryption. So, when I got home I accessed the router’s Web interface via Ethernet from a Desktop PC and changed wireless networking encryption to “WPA-PSK Version: WPA+WPA2″. In the past I had set it to “WPA-PSK Version: WPA”, and thought that setting “WPA+WPA2″ instead of “WPA” this time would not cause any problems. Well, it didn’t on all the other laptops using my network, but my old Gateway Solo 9300 with Linksys CardBus card (‘Linksys WPC54G (EU) v7.1 wireless notebook adapter card’) was different.

As soon as I wondered if the encryption setting was the cause of my problem, I browsed to the BT Home Hub configuration page and changed wireless networking encryption from “WPA-PSK Version: WPA+WPA2″ to “WPA-PSK Version: WPA”. Bingo, my Gateway Solo 9300 running Sabayon Linux E17 Edition and Firefox 4 could browse all Web sites again. Mind you, I also need to have the ipv6 module disabled (I had previously uncommented the line alias net-pf-10 off in the file /etc/modprobe.d/aliases.conf and used the command update-modules) as well as the modifications mentioned in an earlier post (Why can’t I access a specific Web site?). But all those other measures do not solve the problem if the router is configured for “WPA-PSK Version: WPA+WPA2″.

The router’s wireless security option “WPA-PSK Version: WPA” is intended for a network that would only be used by clients configured to use WPA encryption; the router’s option “WPA-PSK Version: WPA2″ is intended for a network that would only be used by clients configured to use WPA2 encryption; the router’s option “WPA-PSK Version: WPA+WPA2″ is intended for a network that would be used by clients configured to use either WPA or WPA2 encryption. So I wonder why there was a problem, as the laptop and CardBus card are configured for “WPA & WPA2 Personal” in nm-applet, and the card supports WPA (TKIP) and WPA2 (CCMP a.k.a. AES).

Pimping my Desktop: have KWin Desktop Effects improved in KDE 4.6.2?

KWin Desktop Effects in past releases of KDE 4 were lacking in comparison to Compiz. After installing KDE 4.6.2 recently I decided to see if there has been any progress, and was pleasantly surprised. Although KWin is still not quite up to the standard of Compiz in all areas (the behaviour of 3D windows, especially around the corners of the Desktop Cube, being one example), KWin’s Desktop Effects are now very pleasant and a viable alternative to Compiz. I’ll talk you though my Desktop-pimping exercise using KWin on my main laptop running KDE 4.6.2, and then I’ll describe briefly a similar exercise using Compiz on the same machine.

KWin

I decided to have water and the colour blue as my theme. For wallpaper I chose a striking image created by Sabayon Linux user tarabaz.

I selected Oxygen for the widget and icons style (System Settings > Application Appearance) and for the Window Decorations (System Settings > Workspace Appearance), and Air for the Desktop Theme (System Settings > Workspace Appearance). With an attractive wallpaper, it is nice to have the ability, using the Folder View plasmoid, to contain the contents of the directory ~/Desktop in a window on the Desktop. The only other thing I placed on the Desktop was the excellent yaWP plasmoid. To download and install yaWP, follow the instructions on the yaWP page at KDE-Look.org.

I right-clicked on the Pager widget on the Panel, selected Pager Settings, and configured the Pager as follows in order to be able to switch Desktops in KWin in a similar way to Compiz:

General

  • Number of rows: 1

Virtual Desktops (Shortcuts on the ‘Switching’ tab):

  • Switch One Desktop Down > Ctrl+Alt+Down
  • Switch One Desktop to the Left > Ctrl+Alt+Left
  • Switch One Desktop to the Right > Ctrl+Alt+Right
  • Switch One Desktop Up > Ctrl+Alt+Up

The result looks like this:

KDE 4.6.2 Desktop

KDE 4.6.2 Desktop

KDE 4.6.2 Desktop with open windows

KDE 4.6.2 Desktop with open windows

I thought dolphins would look cool on the top and bottom of the Desktop Cube, and I found a gorgeous wallpaper from Vladstudio which matched my vision. I loaded the image into the GIMP, cropped and resized it to the required 800×800 pixels and saved it as a PNG image cubecap.png in my directory ~/Pictures/ (the images on the top and bottom of the Desktop Cube must be the same, unlike Compiz). To specify a KWin cubecap, you have to click on System Settings > Desktop Effects, click on the spanner icon for the Desktop Cube on the All Effects tab, and tick both ‘Show caps’ and ‘Display image on caps’ on the Advanced tab.

The KWin cubecap image must be stored in the /usr/share/apps/kwin/ directory. I backed up the default KWin cubecap first:

mv /usr/share/apps/kwin/cubecap.png /usr/share/apps/kwin/cubecap.png.bak

and then moved my new cubecap to that directory:

mv /home/fitzcarraldo/Pictures/cubecap.png /usr/share/apps/kwin/cubecap.png

For the background wallpaper behind the Desktop Cube (what in Compiz is called the ‘Skydome’), I selected a graduated undersea image that shows off the reflection of the base of the Desktop Cube and complements well the dolphins on the cubecaps. I saved the image in my directory ~/Pictures/. To set the background wallpaper, you have to click on System Settings > Desktop Effects, select the Desktop Cube on the All Effects tab, click on the spanner icon, and under Background on the Basic tab you’ll find a field in which to specify the Wallpaper. I hope you like the results, shown below.

KDE 4.6.2 Desktop Cube

KDE 4.6.2 Desktop Cube

KDE 4.6.2 Desktop Cube

KDE 4.6.2 Desktop Cube

KDE 4.6.2 Desktop Cube viewed from above

KDE 4.6.2 Desktop Cube viewed from above

KDE 4.6.2 Desktop Cube viewed from below

KDE 4.6.2 Desktop Cube viewed from below

Unlike the Desktop Cube, which I do find useful when I have many windows open, wobbly windows are pure ‘eye candy’. Nevertheless, they are fun to show off and impress users of that other OS. The trouble is, the default settings for wobbly windows in KWin Desktop Effects are too stiff for my liking, and the wobble is much less satisfying than in Compiz. Fortunately it is possible to adjust the behaviour in KWin, and I have found settings which make wobbly windows more like those in Compiz and more satisfying. To set the parameters for wobbly windows, you have to click on System Settings > Desktop Effects, then click on the spanner icon for Wobbly Windows on the All Effects tab. The settings that I like are:

Wobbliness: move the slider to More
Wobble when moving: ticked
Wobble when resizing: ticked
Enable advanced mode: ticked
Stiffness: 10
Drag: 50
Move factor: 9

KDE 4.6.2 Desktop Effects - Wobbly Windows

KDE 4.6.2 Desktop Effects - Wobbly Windows

So, there we have it. With little effort it is possible to set up an attractive and eminently usable 3D Desktop environment in KDE 4.6.2. I was so pleased with the result that I’m keeping it for the moment.

I have not yet tried it, but, as with Compiz, it is possible to configure KWin to use a Desktop Cylinder or Desktop Sphere instead of a Desktop Cube.

Compiz

I’ve been using Compiz, its ‘mother’ Compiz-Fusion and its ‘grandmother’ Beryl since 2007. As is the case with the newer KWin Desktop Effects, Compiz is a mixture of useful 3D effects and eye candy. I like Compiz very much. I use the Fusion Icon on the Panel to switch between KWin window manager and Compiz window manager. So, now let’s look at pimping my Compiz Desktop in KDE 4.6.2. This time I chose a darker theme.

I used a brushed aluminium wallpaper created in the GIMP by Sabayon Linux user alonsoty. I saved the wallpaper in my directory ~/Pictures/ and used the standard KDE 4 method of setting the Desktop wallpaper.

A dark Panel looks best with this wallpaper, so I selected a user-customised Desktop Theme (System Settings > Workspace Appearance) ‘(Customized)’ that is installed from the Sabayon Linux LiveDVD, although KDE’s Oxygen theme looks similar to this and would also work.

KDE 4.6.2 with Compiz Desktop

KDE 4.6.2 with Compiz Desktop

I used the Fusion Icon to launch the Emerald Theme Manager, and selected DarkLight v1.1 as the window theme. This Emerald theme was originally developed for use with Beryl and still looks gorgeous today with Compiz.

KDE 4.6.2 with Compiz Desktop with open windows

KDE 4.6.2 with Compiz Desktop with open windows

The above images show that Compiz looks good with KDE 4.6.2. The only problem I have found is with the Pager on the Panel: occasionally it shows all four Desktops, but usually only displays Desktop 1. Nevertheless I can rotate the Desktop Cube using either the keyboard shortcuts or the mouse, so this is only a minor issue. The CCSM (Compiz Config Settings Manager) is used in a similar way to System Settings > Desktop Effects in KWin. However, CCSM has an even more bewildering set of configuration options and is more complicated to use than the KWin equivalent.

Unlike KWin, it is possible for the cubecaps on the top and bottom of the Desktop Cube to be different to each other. I downloaded from the Web an image of the Earth and Moon from space for the top of the Desktop Cube and and an image of the Moon for the bottom of the Desktop Cube, saved them in my directory ~/Pictures/ and used CCSM > ‘Cube Reflection and Deformation’ > Appearance and specified the location of the top and bottom image files. Unlike KWin, they can have any file name.

The Skydome (the background wallpaper behind the Desktop Cube) is specially designed so that it pans when you rotate the Desktop Cube, providing you have selected ‘Animate Skydome’ in CCSM > Desktop Cube > Appearance > Skydome. The image, which must be 2048×1024 pixels, looks distorted when viewed in a browser window or graphics application but looks good in Compiz. This is more sophisticated than KWin’s Desktop Effects. Various Web sites have Skydome files for Compiz (Skydomes for Beryl and Compiz-Fusion work in Compiz too), and, in keeping with my space images on the top and bottom of the Desktop Cube, I downloaded a space-themed Skydome to my directory ~/Pictures/ and used CCSM > Desktop Cube > Appearance > Skydome to specify the file. Any file name is allowed.

Compiz Desktop Cube in KDE 4.6.2

Compiz Desktop Cube in KDE 4.6.2

Compiz Desktop Cube in KDE 4.6.2

Compiz Desktop Cube in KDE 4.6.2

Compiz Desktop Cube viewed from above in KDE 4.6.2

Compiz Desktop Cube viewed from above in KDE 4.6.2

Compiz Desktop Cube viewed from below in KDE 4.6.2

Compiz Desktop Cube viewed from below in KDE 4.6.2

Setting up wobbly windows was as simple as ticking Wobbly Windows in CCSM. I stayed with the default settings.

Compiz Wobbly Windows in KDE 4.6.2

Compiz Wobbly Windows in KDE 4.6.2

Compiz has some more features up its sleeve, though, and I show a couple of them below.

Compiz window top corner pulled down in KDE 4.6.2

Compiz window top corner pulled down in KDE 4.6.2

Compiz window top centre pulled down in KDE 4.6.2

Compiz window top centre pulled down in KDE 4.6.2

The picture above illustrates one area where Compiz (and its predecessor Compiz-Fusion) is less sophisticated than Beryl used to be: notice the polygonal shape of the top of the window that I was pulling down. I won’t bother posting one of the images I have from my Beryl-using days, but, with Beryl, the top of the pulled-down window had a smooth curvature and looked much nicer.

Something else which I don’t believe KWin Desktop Effects has is the ability to vary the transparency of a window by using the Alt key and the mouse wheel, as illustrated in the image below.

Compiz window transparency changed by mouse in KDE 4.6.2

Compiz window transparency changed by mouse in KDE 4.6.2

EDIT (April 28, 2011): Reader lefty.crupps has pointed out that it is possible to do this with KWin too; see his post in the COMMENTS section for how to do it.

Summary

I hope I have given you a taste of what is possible in KDE 4.6.2 using either KWin or Compiz. I have only scratched the surface of either window manager, as there are many features. And, hopefully, KWin Desktop Effects will continue to improve in future releases of KDE, as it has improved noticeably in this release.

Reboot button which allows you to specify which GRUB 2 menu entry to boot

When clicking on Leave > Restart Computer in your Desktop Environment it might be convenient to be able to specify straight away which GRUB 2 menu entry to boot, rather than having to wait for the machine to reboot and display the GRUB 2 menu. Here is how to do it. I use KDE, but the same approach would work in other desktop environments.

N.B. Some distributions use /boot/grub2/ rather than /boot/grub/ for GRUB 2, so replace the path accordingly if the distribution you use is one of them.

Setting it all up

1. Use your favourite text editor to create the simple Bash script shown below in your home directory. I’ll call the script reboot.sh for example:

#!/bin/bash
echo
echo "== SELECT WHICH OS TO BOOT =="
echo
# Delete the next line if you do not have a separate boot partition:
sudo mount /dev/sda3 /boot &>/dev/null # Change "/dev/sda3" to match your boot partition.
echo
sudo cat /boot/grub/grub.cfg | grep menuentry | awk -F\" '{print N++,$(NF-1)}'
echo
read -p "Enter number (q to abort) and press ENTER: " CHOICE
if [ "$CHOICE" != "q" ] ; then
sudo grub-reboot $CHOICE
sudo shutdown -r now
fi

In this script, the GRUB 2 menu entries are read directly from the grub.cfg file instead of being hard-coded in the script. Therefore this script would work as-is on anyone’s installation.

2. Make the script executable:

$ chmod +x ~/reboot.sh

3. Create an icon (Desktop Config File) on your Desktop (right-click on the Desktop and select Create New > Link to Application…), configure it to execute the command sh reboot.sh in a terminal, and give it a nice icon (the icon shown below would suffice). Drag it onto your Panel so it will always be visible and only needs a single click to activate.

Reboot button

Reboot button


4. Edit the file /etc/default/grub to have GRUB_DEFAULT=saved and GRUB_SAVEDEFAULT=true (if it is not already like that).

5. Regenerate the file /boot/grub/grub.cfg (this would only be necessary if you changed anything in /etc/default/grub):

# grub-mkconfig -o /boot/grub/grub.cfg

In some distributions the command is instead:

# grub2-mkconfig -o /boot/grub/grub.cfg

How to use it

1. Click on the new icon on your Panel.

2.You will be presented with a menu similar to the following:

== SELECT WHICH OS TO BOOT ==

Password:

0 Sabayon GNU/Linux, with Linux x86_64-2.6.38-sabayon
1 Sabayon GNU/Linux, with Linux x86_64-2.6.38-sabayon (recovery mode)
2 Sabayon GNU/Linux, with Linux x86_64-2.6.37-sabayon
3 Sabayon GNU/Linux, with Linux x86_64-2.6.37-sabayon (recovery mode)
4 Windows 7 (loader) (on /dev/sda1)
5 Windows 7 (loader) (on /dev/sda2)

Enter number (q to abort) and press ENTER:

You will first be prompted to enter your password, then the menu will be displayed and you will be prompted to enter the number of the menu item you want to boot. The example above is from my machine; your menu will have different entries, depending on what is in your /boot/grub/grub.cfg file.

The machine will then reboot to the kernel or OS you just selected, without you having to touch any further keys, or will exit the script and do nothing if you selected the Abort option (q).

Follow

Get every new post delivered to your Inbox.

Join 26 other followers