6
void set_dpms_mode(char *mode);
7
static void check_fbpm(void);
8
static void check_dpms(void);
10
#if LIBVNCSERVER_HAVE_FBPM
12
#include <X11/extensions/fbpm.h>
15
#if LIBVNCSERVER_HAVE_DPMS
16
#include <X11/extensions/dpms.h>
22
/* someday dpms activities? */
25
static void check_fbpm(void) {
26
static int init_fbpm = 0;
27
#if LIBVNCSERVER_HAVE_FBPM
28
static int fbpm_capable = 0;
29
static time_t last_fbpm = 0;
38
if (getenv("FBPM_DEBUG")) {
39
db = atoi(getenv("FBPM_DEBUG"));
41
if (FBPMCapable(dpy)) {
43
rfbLog("X display is capable of FBPM.\n");
45
rfbLog("Preventing low-power FBPM modes when"
46
" clients are connected.\n");
50
rfbLog("X display is not capable of FBPM.\n");
66
if (time(NULL) < last_fbpm + 5) {
69
last_fbpm = time(NULL);
71
if (FBPMInfo(dpy, &level, &enabled)) {
72
if (db) fprintf(stderr, "FBPMInfo level: %d enabled: %d\n", level, enabled);
74
if (enabled && level != FBPMModeOn) {
75
char *from = "unknown-fbpm-state";
76
XErrorHandler old_handler = XSetErrorHandler(trap_xerror);
79
if (level == FBPMModeStandby) {
80
from = "FBPMModeStandby";
81
} else if (level == FBPMModeSuspend) {
82
from = "FBPMModeSuspend";
83
} else if (level == FBPMModeOff) {
87
rfbLog("switching FBPM state from %s to FBPMModeOn\n", from);
89
FBPMForceLevel(dpy, FBPMModeOn);
91
XSetErrorHandler(old_handler);
95
if (db) fprintf(stderr, "FBPMInfo failed.\n");
101
rfbLog("X FBPM extension not supported.\n");
108
void set_dpms_mode(char *mode) {
113
#if LIBVNCSERVER_HAVE_DPMS
114
if (dpy && DPMSCapable(dpy)) {
118
if (!strcmp(mode, "off")) {
120
} else if (!strcmp(mode, "on")) {
122
} else if (!strcmp(mode, "standby")) {
123
want = DPMSModeStandby;
124
} else if (!strcmp(mode, "suspend")) {
125
want = DPMSModeSuspend;
126
} else if (!strcmp(mode, "enable")) {
129
} else if (!strcmp(mode, "disable")) {
135
if (DPMSInfo(dpy, &level, &enabled)) {
137
if (enabled && level != want) {
138
XErrorHandler old_handler = XSetErrorHandler(trap_xerror);
141
rfbLog("DPMSInfo level: %d enabled: %d\n", level, enabled);
142
if (level == DPMSModeStandby) {
143
from = "DPMSModeStandby";
144
} else if (level == DPMSModeSuspend) {
145
from = "DPMSModeSuspend";
146
} else if (level == DPMSModeOff) {
147
from = "DPMSModeOff";
148
} else if (level == DPMSModeOn) {
152
rfbLog("switching DPMS state from %s to %s\n", from, mode);
154
DPMSForceLevel(dpy, want);
156
XSetErrorHandler(old_handler);
165
static void check_dpms(void) {
166
static int init_dpms = 0;
167
#if LIBVNCSERVER_HAVE_DPMS
168
static int dpms_capable = 0;
169
static time_t last_dpms = 0;
178
if (getenv("DPMS_DEBUG")) {
179
db = atoi(getenv("DPMS_DEBUG"));
181
if (DPMSCapable(dpy)) {
183
rfbLog("X display is capable of DPMS.\n");
185
rfbLog("Preventing low-power DPMS modes when"
186
" clients are connected.\n");
190
rfbLog("X display is not capable of DPMS.\n");
197
if (force_dpms || (client_dpms && client_count)) {
198
static int last_enable = 0;
199
if (time(NULL) > last_enable) {
200
set_dpms_mode("enable");
201
last_enable = time(NULL);
203
set_dpms_mode("off");
208
if (! dpms_capable) {
211
if (! client_count) {
214
if (time(NULL) < last_dpms + 5) {
217
last_dpms = time(NULL);
219
if (DPMSInfo(dpy, &level, &enabled)) {
220
if (db) fprintf(stderr, "DPMSInfo level: %d enabled: %d\n", level, enabled);
222
if (enabled && level != DPMSModeOn) {
223
char *from = "unknown-dpms-state";
224
XErrorHandler old_handler = XSetErrorHandler(trap_xerror);
227
if (level == DPMSModeStandby) {
228
from = "DPMSModeStandby";
229
} else if (level == DPMSModeSuspend) {
230
from = "DPMSModeSuspend";
231
} else if (level == DPMSModeOff) {
232
from = "DPMSModeOff";
235
rfbLog("switching DPMS state from %s to DPMSModeOn\n", from);
237
DPMSForceLevel(dpy, DPMSModeOn);
239
XSetErrorHandler(old_handler);
243
if (db) fprintf(stderr, "DPMSInfo failed.\n");
249
rfbLog("X DPMS extension not supported.\n");