>[оверквотинг удален]
> if (dpy != NULL ) {
>
> XWorker(dpy); // если
>работаем с Х-ами
>
> } else {
>
> FBWorker(); // если
>во фреймбуферной консоли.
> } это новая информация :-)
тогда все выглядит логично.
В описании XOpenDisplay явно не указано, что она возвращает
когда мы к ней обращаемся с display_name == NULL и DISPLAY не установлен.
но думаю вернуть, тоже, должна NULL если соединиться не удалось
вот вам выдержка их Xlib - C Language interface (там подробней, чем в man-е)
Display *XOpenDisplay(display_name)
char *display_name;
display_name
Specifies the hardware display name, which determines the display and communications domain to be used. On a POSIX-conformant system, if the display_
name is NULL, it defaults to the value of the DISPLAY environment variable.
The encoding and interpretation of the display name are implementation-dependent. Strings in the Host Portable Character Encoding are supported; support for other characters is implementation dependent. On POSIX-conformant systems, the display name or DISPLAY environment variable can be a string in the format:
protocol/hostname:number.screen_number
protocol Specifies a protocol family or an alias for a protocol family. Supported protocol
families are implementation dependent. The protocol entry is optional. If protocol
is not specified, the / separating protocol and hostname must also not be specified.
hostname Specifies the name of the host machine on which the display is physically
attached. You follow the hostname with either a single colon (:) or a double
colon (::).
number Specifies the number of the display server on that host machine. You may
optionally follow this display number with a period (.). A single CPU can have
more than one display. Multiple displays are usually numbered starting with
zero.
screen_number
Specifies the screen to be used on that server. Multiple screens can be controlled
by a single X server. The screen_number sets an internal variable that can be
accessed by using the DefaultScreen macro or the XDefaultScreen function if
you are using languages other than C (see section 2.2.1).
For example, the following would specify screen 1 of display 0 on the machine named ‘‘dualheaded’’:
dual-headed:0.1
The XOpenDisplay function returns a Display structure that serves as the connection to the X
server and that contains all the information about that X server. XOpenDisplay connects your
application to the X server through TCP or DECnet communications protocols, or through some
local inter-process communication protocol. If the protocol is specified as "tcp", "inet", or
"inet6", or if no protocol is specified and the hostname is a host machine name and a single colon
(:) separates the hostname and display number, XOpenDisplay connects using TCP streams. (If
the protocol is specified as "inet", TCP over IPv4 is used. If the protocol is specified as "inet6",
TCP over IPv6 is used. Otherwise, the implementation determines which IP version is used.) If
the hostname and protocol are both not specified, Xlib uses whatever it believes is the fastest
transport. If the hostname is a host machine name and a double colon (::) separates the hostname
and display number, XOpenDisplay connects using DECnet. A single X server can support any
or all of these transport mechanisms simultaneously. A particular Xlib implementation can support
many more of these transport mechanisms.
If successful, XOpenDisplay returns a pointer to a Display structure, which is defined in
<X11/Xlib.h>. If XOpenDisplay does not succeed, it returns NULL. After a successful call to
XOpenDisplay, all of the screens in the display can be used by the client. The screen number
specified in the display_name argument is returned by the DefaultScreen macro (or the XDefaultScreen
function). You can access elements of the Display and Screen structures only by
using the information macros or functions. For information about using macros and functions to
obtain information from the Display structure, see section 2.2.1.
X servers may implement various types of access control mechanisms (see section 9.8).