diff --git a/unix/xserver/hw/vnc/RandrGlue.c b/unix/xserver/hw/vnc/RandrGlue.c
index 8106571..54a035d 100644
--- a/unix/xserver/hw/vnc/RandrGlue.c
+++ b/unix/xserver/hw/vnc/RandrGlue.c
@@ -25,9 +25,7 @@
 #include <string.h>
 
 #include "scrnintstr.h"
-#ifdef RANDR
 #include "randrstr.h"
-#endif
 
 #include "RandrGlue.h"
 
@@ -43,50 +41,37 @@
 
 int vncRandRResizeScreen(int scrIdx, int width, int height)
 {
-#ifdef RANDR
   ScreenPtr pScreen = screenInfo.screens[scrIdx];
   /* Try to retain DPI when we resize */
   return RRScreenSizeSet(pScreen, width, height,
                          pScreen->mmWidth * width / pScreen->width,
                          pScreen->mmHeight * height / pScreen->height);
-#else
-  return 0;
-#endif
 }
 
 void vncRandRUpdateSetTime(int scrIdx)
 {
-#ifdef RANDR
   rrScrPrivPtr rp = rrGetScrPriv(screenInfo.screens[scrIdx]);
   rp->lastSetTime = currentTime;
-#endif
 }
 
 int vncRandRHasOutputClones(int scrIdx)
 {
-#ifdef RANDR
   rrScrPrivPtr rp = rrGetScrPriv(screenInfo.screens[scrIdx]);
   for (int i = 0;i < rp->numCrtcs;i++) {
     if (rp->crtcs[i]->numOutputs > 1)
       return 1;
   }
-#endif
   return 0;
 }
 
 int vncRandRGetOutputCount(int scrIdx)
 {
-#ifdef RANDR
   rrScrPrivPtr rp = rrGetScrPriv(screenInfo.screens[scrIdx]);
   return rp->numOutputs;
-#else
-  return 0;
-#endif
 }
 
 int vncRandRGetAvailableOutputs(int scrIdx)
 {
-#ifdef RANDR
   rrScrPrivPtr rp = rrGetScrPriv(screenInfo.screens[scrIdx]);
 
   int availableOutputs;
@@ -138,24 +123,16 @@
   free(usedCrtcs);
 
   return availableOutputs;
-#else
-  return 0;
-#endif
 }
 
 char *vncRandRGetOutputName(int scrIdx, int outputIdx)
 {
-#ifdef RANDR
   rrScrPrivPtr rp = rrGetScrPriv(screenInfo.screens[scrIdx]);
   return strdup(rp->outputs[outputIdx]->name);
-#else
-  return strdup("");
-#endif
 }
 
 int vncRandRIsOutputEnabled(int scrIdx, int outputIdx)
 {
-#ifdef RANDR
   rrScrPrivPtr rp = rrGetScrPriv(screenInfo.screens[scrIdx]);
 
   if (rp->outputs[outputIdx]->crtc == NULL)
@@ -164,14 +141,10 @@
     return 0;
 
   return 1;
-#else
-  return 0;
-#endif
 }
 
 int vncRandRIsOutputUsable(int scrIdx, int outputIdx)
 {
-#ifdef RANDR
   rrScrPrivPtr rp = rrGetScrPriv(screenInfo.screens[scrIdx]);
 
   RROutputPtr output;
@@ -186,14 +159,12 @@
     if (output->crtcs[i]->numOutputs == 0)
       return 1;
   }
-#endif
 
   return 0;
 }
 
 int vncRandRDisableOutput(int scrIdx, int outputIdx)
 {
-#ifdef RANDR
   rrScrPrivPtr rp = rrGetScrPriv(screenInfo.screens[scrIdx]);
   RRCrtcPtr crtc;
 
@@ -202,25 +173,17 @@
     return 1;
 
   return RRCrtcSet(crtc, NULL, crtc->x, crtc->y, crtc->rotation, 0, NULL);
-#else
-  return 0;
-#endif
 }
 
 unsigned int vncRandRGetOutputId(int scrIdx, int outputIdx)
 {
-#ifdef RANDR
   rrScrPrivPtr rp = rrGetScrPriv(screenInfo.screens[scrIdx]);
   return rp->outputs[outputIdx]->id;
-#else
-  return 0;
-#endif
 }
 
 void vncRandRGetOutputDimensions(int scrIdx, int outputIdx,
                             int *x, int *y, int *width, int *height)
 {
-#ifdef RANDR
   rrScrPrivPtr rp = rrGetScrPriv(screenInfo.screens[scrIdx]);
   int swap;
 
@@ -237,13 +200,11 @@
     *height = swap;
     break;
   }
-#endif
 }
 
 int vncRandRReconfigureOutput(int scrIdx, int outputIdx, int x, int y,
                               int width, int height)
 {
-#ifdef RANDR
   rrScrPrivPtr rp = rrGetScrPriv(screenInfo.screens[scrIdx]);
 
   RROutputPtr output;
@@ -277,7 +238,4 @@
 
   /* Reconfigure new mode and position */
   return RRCrtcSet(crtc, mode, x, y, crtc->rotation, 1, &output);
-#else
-  return 0;
-#endif
 }
diff --git a/unix/xserver/hw/vnc/XserverDesktop.h b/unix/xserver/hw/vnc/XserverDesktop.h
index 8866f18..f1c3e3e 100644
--- a/unix/xserver/hw/vnc/XserverDesktop.h
+++ b/unix/xserver/hw/vnc/XserverDesktop.h
@@ -132,9 +132,7 @@
   rfb::CharArray queryConnectUsername;
   rfb::Timer queryConnectTimer;
 
-#ifdef RANDR
   OutputIdMap outputIdMap;
-#endif
 
   rfb::Point oldCursorPos;
 };
diff --git a/unix/xserver/hw/vnc/vncHooks.c b/unix/xserver/hw/vnc/vncHooks.c
index c0d9f7c..f3c2520 100644
--- a/unix/xserver/hw/vnc/vncHooks.c
+++ b/unix/xserver/hw/vnc/vncHooks.c
@@ -38,9 +38,7 @@
 #ifdef RENDER
 #include "picturestr.h"
 #endif
-#ifdef RANDR
 #include "randrstr.h"
-#endif
 
 #define DBGPRINT(x) //(fprintf x)
 
@@ -79,11 +77,9 @@
   TriFanProcPtr                TriFan;
 #endif
 #endif
-#ifdef RANDR
   RRSetConfigProcPtr           rrSetConfig;
   RRScreenSetSizeProcPtr       rrScreenSetSize;
   RRCrtcSetProcPtr             rrCrtcSet;
-#endif
 } vncHooksScreenRec, *vncHooksScreenPtr;
 
 typedef struct _vncHooksGCRec {
@@ -174,7 +170,6 @@
             int npoint, xPointFixed * points);
 #endif
 #endif
-#ifdef RANDR
 static Bool vncHooksRandRSetConfig(ScreenPtr pScreen, Rotation rotation,
                                    int rate, RRScreenSizePtr pSize);
 static Bool vncHooksRandRScreenSetSize(ScreenPtr pScreen,
@@ -184,7 +179,6 @@
                                  RRModePtr mode, int x, int y,
                                  Rotation rotation, int numOutputs,
                                  RROutputPtr *outputs);
-#endif
 
 // GC "funcs"
 
@@ -277,9 +271,7 @@
 #ifdef RENDER
   PictureScreenPtr ps;
 #endif
-#ifdef RANDR
   rrScrPrivPtr rp;
-#endif
 
   pScreen = screenInfo.screens[scrIdx];
 
@@ -339,7 +331,6 @@
 #endif
   }
 #endif
-#ifdef RANDR
   rp = rrGetScrPriv(pScreen);
   if (rp) {
     /* Some RandR callbacks are optional */
@@ -350,7 +341,6 @@
     if (rp->rrCrtcSet)
       wrap(vncHooksScreen, rp, rrCrtcSet, vncHooksRandRCrtcSet);
   }
-#endif
 
   return TRUE;
 }
@@ -473,9 +463,7 @@
 #ifdef RENDER
   PictureScreenPtr ps;
 #endif
-#ifdef RANDR
   rrScrPrivPtr rp;
-#endif
 
   SCREEN_PROLOGUE(pScreen_, CloseScreen);
 
@@ -501,14 +489,12 @@
 #endif
   }
 #endif
-#ifdef RANDR
   rp = rrGetScrPriv(pScreen);
   if (rp) {
     unwrap(vncHooksScreen, rp, rrSetConfig);
     unwrap(vncHooksScreen, rp, rrScreenSetSize);
     unwrap(vncHooksScreen, rp, rrCrtcSet);
   }
-#endif
 
   DBGPRINT((stderr,"vncHooksCloseScreen: unwrapped screen functions\n"));
 
@@ -1199,8 +1185,6 @@
 
 #endif /* RENDER */
 
-#ifdef RANDR
-
 // Unwrap and rewrap helpers
 
 #define RANDR_PROLOGUE(field)                                             \
@@ -1275,8 +1259,6 @@
   return TRUE;
 }
 
-#endif /* RANDR */
-
 /////////////////////////////////////////////////////////////////////////////
 //
 // GC "funcs"
diff --git a/unix/xserver/hw/vnc/vncModule.c b/unix/xserver/hw/vnc/vncModule.c
index 704e56e..5d95ef0 100644
--- a/unix/xserver/hw/vnc/vncModule.c
+++ b/unix/xserver/hw/vnc/vncModule.c
@@ -24,9 +24,7 @@
 #endif
 
 #include "opaque.h"
-#ifdef RANDR
 #include "randrstr.h"
-#endif
 
 #include "xorg-version.h"
 #if XORG <= 111
@@ -112,7 +110,6 @@
 {
 }
 
-#ifdef RANDR
 int vncRandRCreateOutputs(int scrIdx, int extraOutputs)
 {
   return 0;
@@ -137,4 +134,4 @@
 
   return NULL;
 }
-#endif
+
diff --git a/unix/xserver/hw/vnc/xvnc.c b/unix/xserver/hw/vnc/xvnc.c
index 4133689..0f17095 100644
--- a/unix/xserver/hw/vnc/xvnc.c
+++ b/unix/xserver/hw/vnc/xvnc.c
@@ -73,9 +73,7 @@
 #include "os.h"
 #include "miline.h"
 #include "inputstr.h"
-#ifdef RANDR
 #include "randrstr.h"
-#endif /* RANDR */
 #ifdef DPMSExtension
 #include "dpmsproc.h"
 #endif
@@ -953,7 +951,6 @@
     miPointerWarpCursor
 };
 
-#ifdef RANDR
 
 static Bool vncRandRGetInfo (ScreenPtr pScreen, Rotation *rotations)
 {
@@ -1450,7 +1447,6 @@
     return TRUE;
 }
 
-#endif
 
 static Bool
 #if XORG < 113
@@ -1507,9 +1503,7 @@
     int ret;
     void *pbits;
 
-#ifdef RANDR
     rrScrPrivPtr rp;
-#endif
 
 #if XORG >= 113
     if (!dixRegisterPrivateKey(&cmapScrPrivateKeyRec, PRIVATE_SCREEN, 0))
@@ -1645,7 +1639,6 @@
     pvfb->closeScreen = pScreen->CloseScreen;
     pScreen->CloseScreen = vfbCloseScreen;
 
-#ifdef RANDR
     ret = RRScreenInit(pScreen);
     if (!ret) return FALSE;
 
@@ -1660,7 +1653,6 @@
 
     ret = vncRandRInit(pScreen);
     if (!ret) return FALSE;
-#endif
 
 
   return TRUE;
