I don't think that you can activate snap without compositing (Gnome3 classic). It does come out of the box on full Gnome3 (I think) and definately does with Cinnamon. Anyway, I have written a script which essentially does the same thing.
It will not work automatically, that is it won't be activated just by dragging a window to the edge of the screen, but you can assign shortcuts to it. For example, Ctrl+R to snap to the right hand side etc.
The script requires disper, xdpyinfo and wmctrl, all of which should be easily available and are in the debian repos (which kali uses). If you save the script as snap_windows.sh, you can use it as follows:
snap_windows.sh will maximize/unmaximize the current window.
snap_windows.sh l will snap the current window to the left hand side of the screen
snap_windows.sh r will snap the current window to the right hand side of the screen
If you are using two screens, it will always snap to the left/right side of the right hand side screen. It is not perfect and I haven't used it since I switched to Cinnammon so let me know if you have trouble with it.
Here's the script:
#!/bin/bash
## If no side has been given, toggle maximizing the current window and exit
if [ ! $1 ]
then
wmctrl -r :ACTIVE: -b toggle,maximized_vert,maximized_horz
exit
fi
## If a side has been given, continue
side=$1;
## How many screens are there?
screens=`disper -l | grep -c display`
## Get screen dimensions
WIDTH=`xdpyinfo | grep 'dimensions:' | cut -f 2 -d ':' | cut -f 1 -d 'x'`;
HALF=$(($WIDTH/2));
## If we are running on one screen, snap to edge of screen
if [ $screens == '1' ]
then
## Snap to the left hand side
if [ $side == 'l' ]
then
## wmctrl format: gravity,posx,posy,width,height
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,0,0,$HALF,-1
## Snap to the right hand side
else
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$HALF,0,$HALF,-1
fi
## If we are running on two screens, snap to edge of right hand screen
## I use 1600 because I know it is the size of my laptop display
## and that it is not the same as that of my 2nd monitor.
else
LAPTOP=1600; ## Change this as approrpiate for your setup.
let "WIDTH-=LAPTOP";
SCREEN=$LAPTOP;
HALF=$(($WIDTH/2));
if [ $side == 'l' ]
then
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$LAPTOP,0,$HALF,-1
else
let "SCREEN += HALF+2";
wmctrl -r :ACTIVE: -b add,maximized_vert && wmctrl -r :ACTIVE: -e 0,$SCREEN,0,$HALF,-1;
fi
fi