title: org.openqa.selenium.WebDriverException: connection refused while using Selenium Java and webdriver (linux headless with Xvfb)
body: <p>Recently i got a new virtual server which im trying to configure since some days to make my Java (8) based selenium web app running. This webapp is running inside a tomcat (8.5.31) and is using selenium for some basic website scraping. The OS of the server is gentoo (before i had a debian system which was running fine) </p>
  
  <p>I spend already some days to make it work but now im stuck at the  following error:</p>
  
  <pre><code>1526203737341   geckodriver     INFO    geckodriver 0.20.1
  1526203737367   geckodriver     INFO    Listening on 127.0.0.1:25016
  1526203737796   mozrunner::runner       INFO    Running command: "/usr/bin/firefox-bin" "-marionette" "-profile" "/tmp/rust_mozprofile.ESuH8rdqpwT8"
  1526203737802   geckodriver::marionette DEBUG   Waiting 60s to connect to browser
  1526203739872   Marionette      INFO    Listening on port 2828
  1526203797867   webdriver::server       DEBUG   &lt;- 500 Internal Server Error {"value":{"error":"unknown error","message":"connection refused","stacktrace":""}}
  11:29:57.944 [pool-2-thread-1] ERROR test.Test - Exception occured while processing.
  org.openqa.selenium.WebDriverException: connection refused
  Build info: version: '3.12.0', revision: '7c6e0b3', time: '2018-05-08T14:04:26.12Z'
  System info: host: 'gentoo', ip: 'xxx.xxx.xxx.xxx', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.95-gentoo', java.version: '1.8.0_172'
  Driver info: driver.version: FirefoxDriver
  </code></pre>
  
  <p>This is what the process list is showing:</p>
  
  <pre><code>root      7808     1  0 14:36 ?        00:00:00   /usr/bin/Xvfb :99 -screen 0 1600x1200x24 -auth /etc/conf.d/Xvfb.cfg -listen tcp
  tomcat    7863     1 59 14:38 ?        00:00:51   /etc/java-config-2/current-system-vm/bin/java -Djava.util.logging.config.file=/opt/tomcat8/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderL
  tomcat    7923  7863  0 14:38 ?        00:00:00     /opt/geckodriver --port=31399 -b /usr/bin/firefox-bin
  tomcat    7943  7923  6 14:38 ?        00:00:04       /opt/firefox/firefox -marionette --headless -profile /tmp/rust_mozprofile.qpQfCj8DR1ab
  tomcat    8032  7943  0 14:38 ?        00:00:00         /opt/firefox/plugin-container -greomni /opt/firefox/omni.ja -appomni /opt/firefox/browser/omni.ja -appdir /opt/firefox/browser 7943 true tab
  tomcat    7977     1  0 14:38 ?        00:00:00   dbus-launch --autolaunch 32b951aa6b930bec1f195b765af588f5 --binary-syntax --close-stderr
  tomcat    7978     1  0 14:38 ?        00:00:00   /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
  tomcat    7993     1  0 14:38 ?        00:00:00   /usr/libexec/gconfd-2
  </code></pre>
  
  <p>The Code for creating the Firefox instance (was using more detailed log levels to get some more informations about the problem):</p>
  
  <pre><code>    System.setProperty("webdriver.gecko.driver", driverGeckoPath);
  
      LoggingPreferences loggingPrefs = new LoggingPreferences();
      loggingPrefs.enable(LogType.BROWSER, Level.ALL);
      loggingPrefs.enable(LogType.CLIENT, Level.ALL);
      loggingPrefs.enable(LogType.DRIVER, Level.ALL);
      loggingPrefs.enable(LogType.PERFORMANCE, Level.ALL);
      loggingPrefs.enable(LogType.PROFILER, Level.ALL);
      loggingPrefs.enable(LogType.SERVER, Level.ALL);
  
      DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
      desiredCapabilities.setCapability("marionette", true);
      desiredCapabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
      desiredCapabilities.setCapability(CapabilityType.LOGGING_PREFS, loggingPrefs);
  
      FirefoxOptions options = new FirefoxOptions(desiredCapabilities);
      options.setLogLevel(FirefoxDriverLogLevel.TRACE);
  
      driver = new FirefoxDriver(options);
  </code></pre>
  
  <p>The geckodriver lays in /opt/ and is executable.</p>
  
  <p><strong>My current setup/configuration</strong></p>
  
  <p><strong>Selenium</strong> <br>
  All components are having version 3.12.0 (selenium-java, selenium-remote-driver, selenium-firefox-driver, selenium-api)</p>
  
  <p><strong>Firefox</strong> <br>
  Version 60.0</p>
  
  <p><strong>geckodriver</strong> <br>
  Version 20.1</p>
  
  <p><strong>Xvfb configuration</strong></p>
  
  <pre><code>XVFB=/usr/bin/Xvfb
  XVFBARGS=":99 -screen 0 1600x1200x24 -auth /etc/conf.d/Xvfb.cfg -nolisten tcp"
  PIDFILE=/var/run/Xvfb.pid
  </code></pre>
  
  <p><strong>Xvfb config</strong></p>
  
  <pre><code>localhost
  </code></pre>
  
  <p><strong>Xvfb init.d-script</strong></p>
  
  <pre><code>start() {
          ebegin "Starting virtual X frame buffer: Xvfb"
          start-stop-daemon --start --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
          eend ${?}
  }
  
  stop() {
          ebegin  "Stopping virtual X frame buffer: Xvfb"
          start-stop-daemon --stop --pidfile $PIDFILE
          eend ${?}
  }
  </code></pre>
  
  <p><strong>Export of display variable</strong> (initialized at boot time for all users):</p>
  
  <pre><code>DISPLAY=:99
  </code></pre>
  
  <p><strong>/etc/conf.d/hostname</strong> <br></p>
  
  <pre><code>gentoo
  </code></pre>
  
  <p><strong>/etc/hosts</strong> <br></p>
  
  <pre><code>127.0.0.1       gentoo
  127.0.0.1       localhost
  ::1             localhost
  </code></pre>
  
  <p><br>
  Would appreciate very much any hints/tips to get more informations about how to debug/solve this problem...</p>
  
  <p><br></p>
  
  <h1><strong>Update 1</strong> <br></h1>
  
  <p>I tried running my selenium component with the <strong><code>ChromeDriver</code> which interestingly works</strong>. The code:</p>
  
  <pre><code>  System.setProperty("webdriver.chrome.driver", "/opt/chromedriver");
    driver = new ChromeDriver();
  </code></pre>
  
  <p>The log shows:</p>
  
  <pre><code>Starting ChromeDriver 2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb) on port 24646
  Only local connections are allowed.
  </code></pre>
  
  <p><br></p>
  
  <h1><strong>Update 2</strong> <br></h1>
  
  <p>When im running the app in my local environment (similary configured / gentoo) everything works fine. But im not using Xvfb here but a xorg-server instead.
  This is the logging output:</p>
  
  <pre><code>1526217622830   geckodriver INFO    geckodriver 0.20.1
  1526217622833   geckodriver INFO    Listening on 127.0.0.1:12500
  1526217622955   mozrunner::runner   INFO    Running command: "/usr/bin/firefox-bin" "-marionette" "-profile" "/tmp/rust_mozprofile.AZMw0iETRqFj"
  1526217622955   geckodriver::marionette DEBUG   Waiting 60s to connect to browser
  1526217623246   Marionette  DEBUG   Received observer notification profile-after-change
  1526217623372   Marionette  DEBUG   Received observer notification command-line-startup
  1526217623372   Marionette  DEBUG   Received observer notification nsPref:changed
  1526217624744   Marionette  DEBUG   Received observer notification sessionstore-windows-restored
  1526217624816   Marionette  DEBUG   Setting recommended pref toolkit.cosmeticAnimations.enabled to false
  1526217624816   Marionette  DEBUG   Setting recommended pref datareporting.policy.dataSubmissionPolicyAccepted to false
  1526217624816   Marionette  DEBUG   Setting recommended pref extensions.shield-recipe-client.api_url to 
  1526217624847   Marionette  DEBUG   New connections are accepted
  1526217624848   Marionette  INFO    Listening on port 34253
  1526217624860   geckodriver::marionette DEBUG   Connected to Marionette on localhost:34253
  1526217624868   Marionette  DEBUG   Accepted connection 0 from 127.0.0.1:56070
  </code></pre>
  
  <p>For me it seems to be a connection problem between Marionette and the geckodriver. Could it be a port problem? On the server Marionette seems to listen always at port 2828, on my local machine its seems to be always a random port...</p>