How I improved my life with a PS3 controller.
Picture this: after hours of web browsing, your body is contorted in various unnatural positions over time: your legs up on the table or you’re lying on the bed sideways with the laptop rotated sideways as well. Does that sound familiar?
For me it does.
Of course, I am not proud of my posture after sitting at the screen for four hours straight, but I soon realized that my posture was a result of my body’s pursuit of comfort, while being dependent on the keyboard and mouse.
All I want is to kick back and relax on my lounge chair, but with a laptop on my lap, that means my body has little to no degrees of freedom.
“Are you telling me that there is only one way to lay in my chair?” /r/firstworldproblems.
Okay, it may be somewhat bearable with a laptop, but what about all the other folks who own a desktop?
And then I came up with the idea to use a PS3 controller for day to day casual web browsing. Why not? the analog sticks will be perfect for emulating the mouse, and the other keys will be mapped to my most common keyboard shortcuts.
Here is how it looks:
Step 1: Get MotionInJoy
The PS3 controller did not seem to come with its native drivers, and the only way to make it work with my computer was with the MotionInJoy Application.
What’s cool about MotionInJoy is that it has multiple profiles, even including X-box 360 mode.
I followed this video to set up the application.
*Warning Warning Danger Danger*
Some of their own instructions were wrong and ultimately misleading, and the change to Mandarin was just a silly thing to do. Disregard everything between 1:50 and 2:35, instead connect your controller via USB, and click the “Driver Manager” tab, then click “Install all”.
Pressing “Load Driver” will NOT work as they suggested. The rest should be correct.
When in doubt, the vibration test is your friend. To make sure your bluetooth drivers are supported by the app, feature 39 must be working (under Bluetooth Pair->Supports Feature).
Step 2: Get JoyToKey
Next I used JoyToKey in order to map the keys that I wanted onto the controller. This video should help you understand how to do most of it. The main caveat is this: the exact names of the buttons in JoyToKey may not exactly correspond to the key numbers in your controller settings. As you can see from my demo video above, the corresponding keys in JoyToKey will light up in yellow when the key is pressed.
EDIT: I have received some questions about what the specific mapping I used, here it is:
L1: Right mouse click,
R1: Left mouse click,
L2: CTRL+SHIFT+TAB (move to previous tab),
R2: CTRL+TAB (move to next tab),
D-pad Up: scroll up,
D-pad Down: scroll down,
D-pad left: ALT+LEFT (back),
D-pad right: ALT+RIGHT (forward),
Start: HOME (home directory),
PS: WIN+G (Open Chrome),
Triangle: CTRL+W (close tab),
Square: CTRL+= (zoom in),
Cross: CTRL+- (zoom out),
Circle: CTRL+SHIFT+T (restore tab),
Left Analog stick: Slow mouse (15%, for accuracy),
Right Analog stick: Fast Mouse (100% for dropping the cursor in the right general area)
Left stick click: F5 (refresh),
Right stick click: middle mouse click (scroll).
If you are like me, you want to scroll up or down when you press and hold D-pad up, and D-pad down. Just do this:
If you have more specific questions with JoyToKey, don’t hesitate to contact me. :)
Step 3 (optional): Get AutoHotKey
Now if we want to truly make the mapping powerful, we can get AutoHotKey, and assign really complex actions to certain combination of keys. I looked through the manual, and there’s a metric shit-ton of stuff you can do with it.
All I am doing with it is launch google chrome (WIN + G) and open my home directory (HOME), and then I assign these keys to the <PS> button, and <START> button on my controller respectively.
When I don’t use the controller after a while, it automatically shuts down. Sometimes pressing the PS button will cause the LED’s to flash a bit and then nothing else happens. I follow this ritual to get my controller voodoo working again:
Do a vibration test in MotionInJoy, if not working, reset the program.
If vibration test passes, click “Enable” in the main MotionInJoy screen.
If the cursor is still not moving, go to JoyToKey->Options, and click “Refresh”
With my current mapping, I have found that I can do almost all of the actions that I usually do with a keyboard and mouse while browsing. I would even argue that I can do them much faster with a controller. The obvious downside to this is when I need to type in a link or a keyword in a search bar. But I minimized that problem by keeping my regular websites in the bookmark bar in Chrome, within my click’s reach.
I hope that more people can see the value of this, since most computer users are so heavily dependent on pointing and clicking their way through the day. This poses obvious ergonomic concerns as wrist and back-pain are so common in office workers. I am planning to improve this whole set-up by writing an application that would effectively bootstrap these applications and combine their functionality for easier configuration.
Go ahead, try it! You’ll feel the difference. Just don’t become this guy:
With great power comes great responsibility :)