Eric Bidelman has documented some of the common workflows possible with headless Chrome over in https://developers.google.com/web/updates/2017/04/headless-chrome.
If you're looking at this in 2016 and beyond, I strongly recommend investigating real headless Chrome: https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md
Windows and Mac users might find using Justin Ribeiro's Docker setup useful here while full support for these platforms is being worked out.
You can use
chrome --headless on Linux as of M57 but note you'll need to build the binaries yourself for now.
The metabug for adding headless mode to Chromium is over here.
Otherwise, if you're on Ubuntu or working with a Linux VM that isn't working with Linux:
SSH into your server as a root or do sudo -i.
Then install necessary software:
apt-get update apt-get install -y xvfb fluxbox x11vnc dbus libasound2 libqt4-dbus libqt4-network libqtcore4 libqtgui4 libxss1 libpython2.7 libqt4-xml libaudio2 libmng1 fontconfig liblcms1 lib32stdc++6 lib32asound2 ia32-libs libc6-i386 lib32gcc1 nano apt-get install -y python-gobject-2 apt-get install -y curl git
xvfb-run --server-args='-screen 0, 1024x768x16' google-chrome -start-maximized > /dev/null &
Start and open a page:
xvfb-run --server-args='-screen 0, 1024x768x16' google-chrome -start-maximized http://www.example.com > /dev/null &
Use Desktops from the MS SysInternals package. You can spawn your Chrome process directly from the "hidden" desktop and keep it working there (I have not personally tested this).
You could try spawning Chrome as a child process using something like Node.js and piping the output back to the terminal. See runChrome.js for an example of how to do this (todo: update to latest Express).