Edit: The answer to your question upfront, I'll leave the rest of the explanation below:
If you want to access the current user, you can get it from $permissionChecker. So just replace your first three lines with this:
#set( $user = $permissionChecker.getUser() )
Here's my old explanation on why the technique used in your question didn't work:
Check $userLS.getClass().getName()
: It's already not resolving properly. The reason most likely is this setting:
#
# Set a comma delimited list of Java classes the Velocity engine cannot have
# access to.
#
velocity.engine.restricted.classes=\
java.lang.Class,\
java.lang.ClassLoader,\
java.lang.Thread
Check this Wiki article to learn about serviceLocator, but be aware that it is - for good reasons - also unavailable from templates.
#
# Set a comma delimited list of variables the Velocity engine cannot
# have access to. This will affect Dynamic Data List templates, Journal
# templates, and Portlet Display templates.
#
velocity.engine.restricted.variables=serviceLocator
If you're the only one writing templates (or if you trust everyone doing so) it's fine to change this configuration in portal-ext.properties: Configure serviceLocator to not be restricted, then call
#set($userLocalService = $serviceLocator.findExceptionSafeService(
"com.liferay.portal.service.UserLocalService"))
On the positive side: This will ease error handling, as the exceptionSafeService will transparently ignore all exceptions - velocity can't handle them and without this behaviour you'd see no result (and no hint for the error message) at all, should an exception occur ever.