Saturday, February 12, 2011

How to fix horrible performance of Java apps in Remote Desktop

Raymond Chen has a great article about developer "taxes". One of the taxes is making sure your app works well in Remote Desktop. Java apps are notoriously bad about getting details like these right. IntelliJ and NetBeans (probably two of the top three IDEs) perform so horribly over Remote Desktop that they're basically unusable.

I tracked the problem down to a Java property that disables use of DirectDraw. A lot of Java apps seem to do this due to a poor implementation in earlier versions of java (*sigh*). Fortunately, there's an easy fix -- the property can be changed by adding this to the command line:

-J-Dsun.java2d.noddraw=false

Enhanced by Zemanta

Saturday, February 5, 2011

KeyFix4000 now available on GitHub

The source code for KeyFix4000 has always been available, but it's now up on GitHub. Enjoy.

Thursday, February 3, 2011

Using charade to proxy cygwin ssh-agent requests to pageant

See charade’s readme for some background. It’s really handy if you want to use pageant as the agent for the cygwin ssh client (in addition to putty). There are two problems I’ve encountered:
  1. Pageant’s security measures reject the proxy request due to the two processes running with different SIDs.
  2. The proxy agent isn’t seen by any processes launched from your outside your shell (since the environment variables only get set in ~/.bash_profile)
Issue #1 can be solved by running both pageant and putty with cygstart – see the issue page for more info.

Here’s my solution for issue #2. Instead of running keychain at the start of every login shell, just run it once at Windows startup, and set the environment variables system-wide using setx. Here’s my shell script that does that:

#!/usr/bin/sh
# Be sure to run this script in a login shell so that cygwin paths are properly
# set, otherwise the Windows version of hostname will run and mess things up

/usr/bin/keychain -q -Q

# The -csh script works perfectly since we can just substitute setx for setenv
alias setenv=setx
. ~/.keychain/`hostname`-csh
Update:
Since this is only running once at startup, keychain isn’t really needed. And to simplify a bit more, it can be done in a batch file:

REM Kill any existing instances first
killall charade
SET FN=%TEMP%\ssh-agent-init.bat
REM The -csh script works perfectly since we can just substitute setenv for setx
charade -c | sed 's/setenv/setx/' | sed 's/;$//' > %FN%
call %FN%
del %FN%