To be fully transparent, the issue I'm dealing with is the following:
If I set a specific unix_socket_directory in postgresql.conf then running
pg_ctl start -w -t5 -D '/val/lib/postgresql/9.4/main'
fails because I believe it cannot verify the server is running because
it's looking for socket in /tmp.
More likely is that it takes more than 5 seconds to start and you are timing out. (I'll presume */val* is a typo in the email only)
The source code for pg_ctl indicates that the "pid file" the postmaster creates at startup contains the information needed for both unix and tcp socket connections and this is where pg_ctl gets its "connection string" information from.
Supplying logging data from the pg_ctl run would help.
David J.