i just wrote an test app in gambas that can set multiple rows/colums and number of workspaces when using compiz.
See topic on gambasone
(Very rubbish WIP tester app, made as a tester for adding virtualroot handling in gambas)
download WIP gambas application
The code to set workspaces is simple.
it just sets _NET_DESKTOP_GEOMETRY to [Screen.Width * Columns, Screen.Height * Rows]
the number of desktops is automatically set by the geometry size, so if geometry is twice the screen width and twice the height then the count will automatically be 4
the panel workspace manager "could" easily be updated to do the same simple function. (Where's the developers?)
Also in compiz you need to disable "Desktop cube" and enable "Desktop Wall" to use multiple rows.
You could also use xprop
if screen width is 1920 and height 1080 then to get a 3 column 2 row spread use this command..
xprop -root -notype -f _NET_DESKTOP_GEOMETRY 32c -set _NET_DESKTOP_GEOMETRY "5760, 2160"
or use a script, something like this will work for setting rows and if required columns...
#!/usr/bin/env bash
# set workspace rows when using compiz
# Note: disable compiz "desktop cube" and enable "desktop wall" or multiple rows will not work
# save file as "setrows" or something, make it executable then use..
# setrows 2
# setrows 3
# Columns can also be set with an additional number
# so for 2 rows with 4 columns use
# setrows 2 4
ROWS=$1
if [ $ROWS -lt 1 ]; then
echo "bad row count"
exit
fi
COLS=$2
# get current screen size
SCREEN=$(xrandr | grep "*"| awk {'print $1'})
X=${SCREEN%x*}
Y=${SCREEN#*x}
# multiply height by rows
Y=$[Y*$ROWS]
# check if columns arg was given
if [ "$COLS" != "" ]; then
if [ $COLS -lt 1 ]; then
echo "bad column count"
exit
fi
# multiply given columns by screen width
X=$[X*$COLS]
else
# no column arg was given so get total current geometry width
GEO=$(xprop -root -notype _NET_DESKTOP_GEOMETRY|tr -d " "|tr , " ")
GEO=${GEO##*=}
X=${GEO% *}
fi
# set new geometry
xprop -root -notype -f _NET_DESKTOP_GEOMETRY 32c -set _NET_DESKTOP_GEOMETRY "$X, $Y"
After setting the geometry the workspace switcher applet works fine for moving to the workspaces, it's just rubbish at configuring it with compiz,