In deployment war stories, I wrote that Pharo's graphical environment is managed by MorphicUIManager, but when invoked -nodisplay, Pharo's graphical environment is managed by NonInteractiveUIManager.
I prefer running my servers without X as far as possible, so I want to have RFBServer running within the Pharo image, to be able to VNC into it.
As it turns out, modifying one method, MorphicUIManager>>onSnapshot:, gets me what I want. Here's what the method looks like in Pharo 1.4, timestamped CamilloBruni 2/13/2012 23:22, (minus comments because I don't like the way the Smalltalk syntax highlighting JS library I'm using is rendering them):
onSnapshot: resuming
resuming ifTrue: [
Smalltalk isInteractive ifFalse: [
^ self nonInteractiveManager onSnapshot: resuming ].
Smalltalk isHeadless ifTrue: [
^ self headlessManager onSnapshot: resuming ]].
SystemWindow wakeUpTopWindowUponStartup
I just needed to add tests for RFBServer, so now the method becomes like this:
onSnapshot: resuming
resuming ifTrue: [
Smalltalk isInteractive ifFalse: [
RFBServer server isRunning ifFalse: [
^ self nonInteractiveManager onSnapshot: resuming ]].
Smalltalk isHeadless ifTrue: [
RFBServer server isRunning ifFalse: [
^ self headlessManager onSnapshot: resuming ]]].
SystemWindow wakeUpTopWindowUponStartup
And now VNC into the Pharo image works, yay!
Tags: deployment, headless, RFB, VNC