Ubuntu System Panel – A ’start menu’ for the power-user

Ubuntu System Panel (USP) is a replacement for the standard three menus (Applications, Places, System) that come with Ubuntu in the top left. USP condenses these three menus into one easily filtered menu system. You can either navigate the list by clicking buttons related to the type of application you’re looking for (e.g. Accessories, Games, System Tools) or just start typing the name of what you want for a live filter search (my preferred method).

ubuntu-system-panel

There are many extra tweaks, as seen above I’ve “pimped” mine out a bit with the options. The preferences dialog, you can get to by right clicking system and choosing preferences, has a lot to be desired as it’s interface is a bit O.o. If you play around for a while though, you’ll be able to figure it out.

ubuntu-system-panel_rightclick
usp-preferences

Optionally, I’ve provided my configuration file which you can apply to your USP by selecting “restore” in the bottom right of the preferences dialog.

Read the installation documentation to get started.

Ubuntu Window Management with Multiple Monitors, Window Effects and Default File Associations

Multiple Monitors Window Management in Ubuntu

Moving your applications from one monitor to the next with hotkeys

I’ve been using multiple monitors for a while now, Starting with a 17″ CRT with a 19″ CRT and moving up to two 19″ LCD, then 3, then temporarily one wide screen and back to 2. Something I always loved having as a utility in ultramon that I couldn’t find in Ubuntu (Gnome) or any window manager for that matter, was the ability to move applications from monitor to monitor. I had assumed the search futile until I was searching about some questions I had concerning Compiz-fusion with dual monitors and I came about this thread on Ubuntu forums which brightened up my day. A fellow named gfixler posted a bash script that utilizes command line applications to move the windows.

For you multi-monitor users seeking salvation from removing your hand from the keyboard to move your application from one monitor to another, here’s the skinny on getting it setup using compiz-fusion, aka Advanced Desktop Effects, to set my keybinds.

1. Open a terminal and setup your prerequisites with apt-get:

sudo apt-get install wmctrl xprop xwininfo

If you get errors about x11-utils, just ignore them, this package will handle your needs.

2. Next, lets put the script somewhere you can call it, say “~/scripts

mkdir ~/scripts && cd ~/scripts && touch movewin.sh && chmod +x movewin.sh && gedit movewin.sh

2. Paste the following code, find the first function “getNumberOfMonitors” and configure it to the number of monitors you have (default 2).

#!/bin/bash
# swap_monitor.sh (original version)
# Moves the active window to the other screen of a dual-screen Xinerama setup.
#
# movewin.sh (modified version)
# allows movement of windows left and right between multiple monitors
#
# Requires: wmctrl, xprop, xwininfo
#
# Original Author: Raphael Wimmer
# raphman@gmx.de
#
# Modified by: Gary Fixler
# gfixler+bash@gmail.com
 
function getNumberOfMonitors
{
    # simply must be hardcoded
    # e.g. MatroxTripleHead2Go can service 3 screens,
    # but appears as only one monitor to the computer
 
    # change to your number of monitors
    echo 2
}
 
function getMonitorWidth
{
    numberOfMonitors=$(getNumberOfMonitors)
    monitorLine=$(xwininfo -root | grep "Width")
    monitorWidth=$((${monitorLine:8}/$numberOfMonitors ))
    echo $monitorWidth
}
 
function getActiveWindowID
{
    activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)")
    activeWinID="${activeWinLine:40}"
    echo $activeWinID
}
 
function getActiveWindowHorizontalPosition
{
    activeWinID=$(getActiveWindowID)
    xPosLine=$(xwininfo -id $activeWinID | grep "Absolute upper-left X")
    xPos=${xPosLine:25}
    echo $xPos
}
 
function getActiveWindowWidth
{
    activeWinID=$(getActiveWindowID)
    xWidthLine=$(xwininfo -id $activeWinID | grep "Width")
    xWidth=${xWidthLine:8}
    echo $xWidth
}
 
function getActiveWindowCurrentMonitor
{
    numberOfMonitors=$(getNumberOfMonitors)
    monitorWidth=$(getMonitorWidth)
    activeWinID=$(getActiveWindowID)
    xPos=$(getActiveWindowHorizontalPosition)
    i="0"
    while [ $xPos -gt $monitorWidth ]
    do
        xPos=$[$xPos-$monitorWidth]
        i=$[$i+1]
    done
    echo $i
}
 
function getActiveWindowPositionOneMonitorToTheLeft
{
    monitorWidth=$(getMonitorWidth)
    currentMonitor=$(getActiveWindowCurrentMonitor)
    activeWinID=$(getActiveWindowID)
    xPos=$(getActiveWindowHorizontalPosition)
    xPos=$[$xPos-$monitorWidth]
    echo $xPos
}
 
function getActiveWindowPositionOneMonitorToTheRight
{
    monitorWidth=$(getMonitorWidth)
    numberOfMonitors=$(getNumberOfMonitors)
    currentMonitor=$(getActiveWindowCurrentMonitor)
    activeWinID=$(getActiveWindowID)
    xPos=$(getActiveWindowHorizontalPosition)
    xPos=$[$xPos+$monitorWidth]
    echo $xPos
}
 
function changeActiveWindowMonitor
{
    activeWinID=$(getActiveWindowID)
    if [ $1 -eq "0" ]
    then
        newXPos=$(getActiveWindowPositionOneMonitorToTheLeft)
        newXPos=$[$newXPos-5]
    else
        newXPos=$(getActiveWindowPositionOneMonitorToTheRight)
        newXPos=$[$newXPos-5]
    fi
 
    winState=$(xprop -id ${activeWinID} | grep "_NET_WM_STATE(ATOM)" )
 
    if [[ `echo ${winState} | grep "_NET_WM_STATE_MAXIMIZED_HORZ"` != "" ]]
        then
        maxH=1
        wmctrl -i -r ${activeWinID} -b remove,maximized_horz
    fi
 
    if [[ `echo ${winState} | grep "_NET_WM_STATE_MAXIMIZED_VERT"` != "" ]]
        then
        maxV=1
        wmctrl -i -r ${activeWinID} -b remove,maximized_vert
    fi
 
    if [[ `echo ${winState} | grep "_NET_WM_STATE_FULLSCREEN"` != "" ]]
        then
        fulls=1
        wmctrl -i -r ${activeWinID} -b remove,fullscreen
    fi
 
    # move window (finally)
    wmctrl -i -r ${activeWinID} -e 0,${newXPos},-1,-1,-1
 
    # restore maximization
    ((${maxV})) && wmctrl -i -r ${activeWinID} -b add,maximized_vert
    ((${maxH})) && wmctrl -i -r ${activeWinID} -b add,maximized_horz
    ((${fulls})) && wmctrl -i -r ${activeWinID} -b add,fullscreen
 
    # raise window (seems to be necessary sometimes)
    wmctrl -i -a ${activeWinID}
 
}
 
function moveActiveWindowOneMonitorToTheLeft
{
    changeActiveWindowMonitor 0
}
 
function moveActiveWindowOneMonitorToTheRight
{
    changeActiveWindowMonitor 1
}
 
"$1"
 
exit 0

3. Setup your hot keys with compiz-fusion. Go to System >> Preferences >> Advanced Desktop Effects. Inside “General Options“, click on the command tab (I apologize for my heinous blue links).

Compiz-fusion Hotkeys 1

2008-11-25-210327_900x435_scrot.png

Use

scripts/./movewin.sh moveActiveWindowOneMonitorToTheRight

and

scripts/./movewin.sh moveActiveWindowOneMonitorToTheLeft

respectively

Per Application Window Effects in Ubuntu

Bring character and tickle your soul with per application window effects

Another cool feature Compiz-fusion has is window animations. My friend James Lindsay recently reminded me about Window Effects… which when I first install Ubuntu on my laptop, I experimented my butt off… but being a laptop… I just used simple ones I’d turn off half the time anyway. He asked me why I don’t use them on my desktop and I didn’t have a good reason. Well, now I have 2 good reasons to keep using compiz.

2008-11-25-210749_900x591_scrot.png

I made my Thunderbird use the airplane effect so when I send emails, it flys away and for Geany, I used the magic lamp for open, close, maximize and minimize (different speeds). It’s a fun little effect that breaks up the stiffness of the desktop.

Default File Associations in Ubuntu

geany > gedit

I was tired of gedit popping up when geany’s just as lightweight but more affective. So found a command and altered it a bit to make my default editor geany.

1. Open the terminal and create\open the following file:

gedit ~/.local/share/applications/defaults.list

If it’s blank, add “[Default Applications]“. If it’s not, find “[Default Applications]“.

2. Then, back to the terminal, grep the default files associations and replace gedit with your editor of choice

grep gedit /usr/share/applications/defaults.list | sed s/gedit/geany/g

Copy (ctrl+shift+c) and paste the output into gedit, below the “[Default Applications]” header.

3. Restart nautilus to load the changes (will close all your file managers that are open and blink/freeze your desktop for a second)

pkill nautilus

Good luck, have fun and happy coding :)

I’m Back!

Sorry guys, I was out of town for a few days. I don’t have any tips for you today but I have a wallpaper I made yesterday.

Here ya go:

systemetrical_detrition-5b.jpg

Which Widget Didya Get?

I tried Konfabulator a while ago (emphasis on the while) and I wasn’t too pleased. It seemed laggy, buggy and more trouble than it was worth. However, recently I was on the lookout for a good desktop todo list, nothing too fancy but it seemed to achieve this, I would have to put my qualms aside and get some sort of widget program.

I decided to give Konfabulator another shot (now know as Yahoo Widgets. And I must say, I’m quite pleased! Everything runs smoothly, it integrates well with the OS and I haven’t had any crashes.

So if you haven’t tried out Yahoo Widgets, I definitely recommend it.

By the way, here is the todo list that I’m using.

Sexy Up Your Desktop With These Dual Wallpapers

Whether you realize it or not, your desktop wallpaper has a very significant impact on your life. Your eyes, your mood and your creativity are all affected by it. This is why I believe it’s important to have a good one… which isn’t always an easy task for someone with dual monitors. Over the years, I’ve collected many many wallpapers and today, I wish to share with your other people rocking dual monitors, some I’ve hand picked from my collection.

I didn’t realize wordpress’s support for uploading multiple images was so weak… so here are a few examples of what you’ll be getting when you download: this zip

EDIT: Link fixed!

abstractiongarden07thumbnail.gif

clusterthumbnail.gif

face_it_by_aerosolfunthumbnail.gif

windinthegarden-daymixthumbnail.gif

And the one I’m currently using…

coldburnthumbnail.gif