Tips and Tricks About Computers, Web Development, Linux, the Internet and the Like
Desktop Mods
Ubuntu Window Management with Multiple Monitors, Window Effects and Default File Associations
Nov 25th
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).
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.
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 :)
Which Widget Didya Get?
Jun 23rd
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
Jun 14th
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!
![]()
![]()
![]()
![]()
And the one I’m currently using…
![]()







