Changeset 99620 in vbox
- Timestamp:
- May 5, 2023 9:08:00 AM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 157146
- Location:
- trunk
- Files:
-
- 9 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/GuestHost/DisplayServerType.h
r99619 r99620 1 1 /* $Id$ */ 2 2 /** @file 3 * Guest / Host common code - Sessiontype detection + handling.3 * Guest / Host common code - Display server type detection + handling. 4 4 */ 5 5 … … 51 51 52 52 /** 53 * Enumeration holding a guest / host desktop sessiontype.53 * Enumeration holding a guest / host desktop display server type. 54 54 */ 55 55 typedef enum 56 56 { 57 /** No sessiondetected or (explicitly) not set. */58 VBGH SESSIONTYPE_NONE = 0,57 /** No display server detected or (explicitly) not set. */ 58 VBGHDISPLAYSERVERTYPE_NONE = 0, 59 59 /** Automatic detection -- might not work reliably on all systems. */ 60 VBGH SESSIONTYPE_AUTO,60 VBGHDISPLAYSERVERTYPE_AUTO, 61 61 /** X11 (X.org). */ 62 VBGH SESSIONTYPE_X11,62 VBGHDISPLAYSERVERTYPE_X11, 63 63 /** Wayland. */ 64 VBGH SESSIONTYPE_WAYLAND,64 VBGHDISPLAYSERVERTYPE_WAYLAND, 65 65 /** XWayland; Wayland is running, but some (older) apps need X as a bridge as well. */ 66 VBGH SESSIONTYPE_XWAYLAND67 } VBGH SESSIONTYPE;66 VBGHDISPLAYSERVERTYPE_XWAYLAND 67 } VBGHDISPLAYSERVERTYPE; 68 68 69 const char *VBGH SessionTypeToStr(VBGHSESSIONTYPE enmType);70 VBGH SESSIONTYPE VBGHSessionTypeDetect(void);71 bool VBGHSe ssionTypeIsXAvailable(VBGHSESSIONTYPE enmType);72 bool VBGH SessionTypeIsWaylandAvailable(VBGHSESSIONTYPE enmType);69 const char *VBGHDisplayServerTypeToStr(VBGHDISPLAYSERVERTYPE enmType); 70 VBGHDISPLAYSERVERTYPE VBGHDisplayServerTypeDetect(void); 71 bool VBGHServerTypeIsXAvailable(VBGHDISPLAYSERVERTYPE enmType); 72 bool VBGHDisplayServerTypeIsWaylandAvailable(VBGHDISPLAYSERVERTYPE enmType); 73 73 74 74 #endif /* !VBOX_INCLUDED_GuestHost_SessionType_h */ -
trunk/src/VBox/Additions/x11/VBoxClient/Makefile.kmk
r99595 r99620 52 52 VBOX_GH_SOURCES := \ 53 53 $(PATH_ROOT)/src/VBox/GuestHost/Log.cpp \ 54 $(PATH_ROOT)/src/VBox/GuestHost/ SessionType.cpp54 $(PATH_ROOT)/src/VBox/GuestHost/DisplayServerType.cpp 55 55 56 56 VBoxClient_TEMPLATE = VBoxGuestR3Exe -
trunk/src/VBox/Additions/x11/VBoxClient/VBoxClient.h
r99585 r99620 38 38 39 39 #include <VBox/GuestHost/Log.h> 40 #include <VBox/GuestHost/ SessionType.h>40 #include <VBox/GuestHost/DisplayServerType.h> 41 41 42 42 int VBClShowNotify(const char *pszHeader, const char *pszBody); … … 54 54 extern void VBClShutdown(bool fExit = true); 55 55 56 extern VBGH SESSIONTYPE VBClGetSessionType(void);56 extern VBGHDISPLAYSERVERTYPE VBClGetDisplayServerType(void); 57 57 58 58 /** -
trunk/src/VBox/Additions/x11/VBoxClient/clipboard.cpp
r99590 r99620 83 83 int rc = VINF_SUCCESS; 84 84 85 if (VBClGet SessionType() == VBGHSESSIONTYPE_X11)85 if (VBClGetDisplayServerType() == VBGHDISPLAYSERVERTYPE_X11) 86 86 { 87 87 rc = VBClX11ClipboardInit(); … … 95 95 } 96 96 #if 0 97 else (VBClGetSessionType() == VBGHSESSIONTYPE_WAYLAND)97 else (VBClGetSessionType() == GHDISPLAYSERVERTYPE_WAYLAND) 98 98 { 99 99 -
trunk/src/VBox/Additions/x11/VBoxClient/display-helper-gnome3.cpp
r99585 r99620 982 982 int rc; 983 983 984 if (VBClGet SessionType() == VBGHSESSIONTYPE_X11)984 if (VBClGetDisplayServerType() == VBGHDISPLAYSERVERTYPE_X11) 985 985 { 986 986 rc = vbcl_hlp_generic_init(); … … 998 998 int rc; 999 999 1000 if (VBClGet SessionType() == VBGHSESSIONTYPE_X11)1000 if (VBClGetDisplayServerType() == VBGHDISPLAYSERVERTYPE_X11) 1001 1001 { 1002 1002 rc = vbcl_hlp_generic_term(); -
trunk/src/VBox/Additions/x11/VBoxClient/display-svga-x11.cpp
r99585 r99620 581 581 } 582 582 583 if (VBClGet SessionType() == VBGHSESSIONTYPE_WAYLAND)583 if (VBClGetDisplayServerType() == VBGHDISPLAYSERVERTYPE_WAYLAND) 584 584 { 585 585 rc = VbglR3DrmClientStart(); -
trunk/src/VBox/Additions/x11/VBoxClient/draganddrop.cpp
r99603 r99620 42 42 static DECLCALLBACK(int) vbclDnDInit(void) 43 43 { 44 switch (VBClGet SessionType())44 switch (VBClGetDisplayServerType()) 45 45 { 46 case VBGH SESSIONTYPE_X11:46 case VBGHDISPLAYSERVERTYPE_X11: 47 47 g_pSvc = new VBClX11DnDSvc(); 48 48 break; 49 49 50 case VBGH SESSIONTYPE_WAYLAND:50 case VBGHDISPLAYSERVERTYPE_WAYLAND: 51 51 RT_FALL_THROUGH(); 52 52 default: -
trunk/src/VBox/Additions/x11/VBoxClient/main.cpp
r99616 r99620 114 114 /** The file handle of parent process pidfile. */ 115 115 static RTFILE g_hControlPidFile; 116 /** The sessiontype to use. */117 static VBGH SESSIONTYPE g_enmSessionType = VBGHSESSIONTYPE_AUTO;116 /** The display server type to use. */ 117 static VBGHDISPLAYSERVERTYPE g_enmDisplayServerType = VBGHDISPLAYSERVERTYPE_AUTO; 118 118 119 119 /** Global critical section held during the clean-up routine (to prevent it … … 165 165 166 166 /** 167 * Returns the current sessiontype.167 * Returns the current display server type. 168 168 * 169 * @returns The sessiontype.170 */ 171 VBGH SESSIONTYPE VBClGetSessionType(void)172 { 173 return g_enm SessionType;169 * @returns The display server type. 170 */ 171 VBGHDISPLAYSERVERTYPE VBClGetDisplayServerType(void) 172 { 173 return g_enmDisplayServerType; 174 174 } 175 175 … … 668 668 { 669 669 if (!RTStrICmp(ValueUnion.psz, "x11")) 670 g_enm SessionType = VBGHSESSIONTYPE_X11;670 g_enmDisplayServerType = VBGHDISPLAYSERVERTYPE_X11; 671 671 else if (!RTStrICmp(ValueUnion.psz, "wayland")) 672 g_enm SessionType = VBGHSESSIONTYPE_WAYLAND;672 g_enmDisplayServerType = VBGHDISPLAYSERVERTYPE_WAYLAND; 673 673 else if (!RTStrICmp(ValueUnion.psz, "none")) 674 g_enm SessionType = VBGHSESSIONTYPE_NONE;674 g_enmDisplayServerType = VBGHDISPLAYSERVERTYPE_NONE; 675 675 else if (!RTStrICmp(ValueUnion.psz, "auto")) 676 g_enm SessionType = VBGHSESSIONTYPE_AUTO;676 g_enmDisplayServerType = VBGHDISPLAYSERVERTYPE_AUTO; 677 677 else 678 678 { 679 679 RTMsgError("Session type \"%s\" is invalid; defaulting to \"auto\" instead.\n", ValueUnion.psz); 680 g_enm SessionType = VBGHSESSIONTYPE_AUTO;680 g_enmDisplayServerType = VBGHDISPLAYSERVERTYPE_AUTO; 681 681 } 682 682 break; … … 741 741 742 742 /* Try to detect the current session type early on, if needed. */ 743 if (g_enm SessionType == VBGHSESSIONTYPE_AUTO)744 { 745 g_enm SessionType = VBGHSessionTypeDetect();743 if (g_enmDisplayServerType == VBGHDISPLAYSERVERTYPE_AUTO) 744 { 745 g_enmDisplayServerType = VBGHDisplayServerTypeDetect(); 746 746 } 747 747 else 748 VBClLogInfo("Session type was manually set to: %s\n", VBGH SessionTypeToStr(g_enmSessionType));749 750 VBClLogInfo("Session type is: %s\n", VBGH SessionTypeToStr(g_enmSessionType));748 VBClLogInfo("Session type was manually set to: %s\n", VBGHDisplayServerTypeToStr(g_enmDisplayServerType)); 749 750 VBClLogInfo("Session type is: %s\n", VBGHDisplayServerTypeToStr(g_enmDisplayServerType)); 751 751 752 752 VBClLogInfo("Service: %s\n", g_Service.pDesc->pszDesc); … … 796 796 } 797 797 798 if (g_enm SessionType == VBGHSESSIONTYPE_X11)798 if (g_enmDisplayServerType == VBGHDISPLAYSERVERTYPE_X11) 799 799 { 800 800 /* This should never be called twice in one process - in fact one Display -
trunk/src/VBox/Additions/x11/VBoxClient/seamless.cpp
r99603 r99620 84 84 static DECLCALLBACK(int) vbclSeamlessInit(void) 85 85 { 86 switch (VBClGet SessionType())86 switch (VBClGetDisplayServerType()) 87 87 { 88 case VBGH SESSIONTYPE_X11:88 case VBGHDISPLAYSERVERTYPE_X11: 89 89 g_pSvc = new VBClX11SeamlessSvc(); 90 90 break; 91 91 92 case VBGH SESSIONTYPE_WAYLAND:92 case VBGHDISPLAYSERVERTYPE_WAYLAND: 93 93 RT_FALL_THROUGH(); 94 94 default: -
trunk/src/VBox/Additions/x11/VBoxClient/testcase/tstSeamlessX11.cpp
r99600 r99620 35 35 36 36 #include <VBox/VBoxGuestLib.h> 37 #include <VBox/GuestHost/ SessionType.h>37 #include <VBox/GuestHost/DisplayServerType.h> 38 38 39 39 #include "../seamless.h" … … 41 41 static RTSEMEVENT eventSem; 42 42 43 VBGH SESSIONTYPE VBClGetSessionType(void)43 VBGHDISPLAYSERVERTYPE VBClGetDisplayServerType(void) 44 44 { 45 return VBGH SESSIONTYPE_X11;45 return VBGHDISPLAYSERVERTYPE_X11; 46 46 } 47 47 -
trunk/src/VBox/GuestHost/DisplayServerType.cpp
r99619 r99620 36 36 37 37 #include <VBox/GuestHost/Log.h> 38 #include <VBox/GuestHost/ SessionType.h>38 #include <VBox/GuestHost/DisplayServerType.h> 39 39 40 40 … … 44 44 45 45 /** 46 * Returns the VBGH SESSIONTYPE as a string.47 * 48 * @returns VBGH SESSIONTYPE as a string.49 * @param enmType VBGH SESSIONTYPE to return as a string.50 */ 51 const char *VBGH SessionTypeToStr(VBGHSESSIONTYPE enmType)46 * Returns the VBGHDISPLAYSERVERTYPE as a string. 47 * 48 * @returns VBGHDISPLAYSERVERTYPE as a string. 49 * @param enmType VBGHDISPLAYSERVERTYPE to return as a string. 50 */ 51 const char *VBGHDisplayServerTypeToStr(VBGHDISPLAYSERVERTYPE enmType) 52 52 { 53 53 switch (enmType) 54 54 { 55 RT_CASE_RET_STR(VBGH SESSIONTYPE_NONE);56 RT_CASE_RET_STR(VBGH SESSIONTYPE_AUTO);57 RT_CASE_RET_STR(VBGH SESSIONTYPE_X11);58 RT_CASE_RET_STR(VBGH SESSIONTYPE_WAYLAND);59 RT_CASE_RET_STR(VBGH SESSIONTYPE_XWAYLAND);55 RT_CASE_RET_STR(VBGHDISPLAYSERVERTYPE_NONE); 56 RT_CASE_RET_STR(VBGHDISPLAYSERVERTYPE_AUTO); 57 RT_CASE_RET_STR(VBGHDISPLAYSERVERTYPE_X11); 58 RT_CASE_RET_STR(VBGHDISPLAYSERVERTYPE_WAYLAND); 59 RT_CASE_RET_STR(VBGHDISPLAYSERVERTYPE_XWAYLAND); 60 60 default: break; 61 61 } … … 65 65 66 66 /** 67 * Tries to detect the desktop sessiontype the process is running in.68 * 69 * @returns A value of VBGH SESSIONTYPE, or VBGHSESSIONTYPE_NONE if detection was not successful.67 * Tries to detect the desktop display server type the process is running in. 68 * 69 * @returns A value of VBGHDISPLAYSERVERTYPE, or VBGHDISPLAYSERVERTYPE_NONE if detection was not successful. 70 70 * 71 71 * @note Precedence is: … … 77 77 * Will print a warning to the release log if configuration mismatches. 78 78 */ 79 VBGH SESSIONTYPE VBGHSessionTypeDetect(void)80 { 81 VBGHLogVerbose(1, "Detecting session type...\n");79 VBGHDISPLAYSERVERTYPE VBGHDisplayServerTypeDetect(void) 80 { 81 VBGHLogVerbose(1, "Detecting display server ...\n"); 82 82 83 83 /* Try to connect to the wayland display, assuming it succeeds only when a wayland compositor is active: */ … … 110 110 111 111 /* If both wayland and X11 display can be connected then we should have XWayland: */ 112 VBGH SESSIONTYPE retSessionType = VBGHSESSIONTYPE_NONE;112 VBGHDISPLAYSERVERTYPE retSessionType = VBGHDISPLAYSERVERTYPE_NONE; 113 113 if (pWaylandDisplay && pXDisplay) 114 retSessionType = VBGH SESSIONTYPE_XWAYLAND;114 retSessionType = VBGHDISPLAYSERVERTYPE_XWAYLAND; 115 115 else if (pWaylandDisplay && !pXDisplay) 116 retSessionType = VBGH SESSIONTYPE_WAYLAND;116 retSessionType = VBGHDISPLAYSERVERTYPE_WAYLAND; 117 117 else if (!pWaylandDisplay && pXDisplay) 118 retSessionType = VBGH SESSIONTYPE_X11;119 120 VBGHLogVerbose(1, "Detected via connection: %s\n", VBGH SessionTypeToStr(retSessionType));118 retSessionType = VBGHDISPLAYSERVERTYPE_X11; 119 120 VBGHLogVerbose(1, "Detected via connection: %s\n", VBGHDisplayServerTypeToStr(retSessionType)); 121 121 122 122 /* If retSessionType is set, we assume we're done here; 123 123 * otherwise try the environment variables as a fallback. */ 124 if (retSessionType != VBGH SESSIONTYPE_NONE)124 if (retSessionType != VBGHDISPLAYSERVERTYPE_NONE) 125 125 return retSessionType; 126 126 … … 130 130 * Therefore we check the Wayland specific display environment variable first. 131 131 */ 132 VBGH SESSIONTYPE waylandDisplayType = VBGHSESSIONTYPE_NONE;132 VBGHDISPLAYSERVERTYPE waylandDisplayType = VBGHDISPLAYSERVERTYPE_NONE; 133 133 const char *const pWaylandDisplayType = RTEnvGet(VBGH_ENV_WAYLAND_DISPLAY); 134 134 if (pWaylandDisplayType != NULL) 135 waylandDisplayType = VBGH SESSIONTYPE_WAYLAND;136 137 VBGHLogVerbose(1, "Wayland display type is: %s\n", VBGH SessionTypeToStr(waylandDisplayType));138 139 VBGH SESSIONTYPE xdgSessionType = VBGHSESSIONTYPE_NONE;135 waylandDisplayType = VBGHDISPLAYSERVERTYPE_WAYLAND; 136 137 VBGHLogVerbose(1, "Wayland display type is: %s\n", VBGHDisplayServerTypeToStr(waylandDisplayType)); 138 139 VBGHDISPLAYSERVERTYPE xdgSessionType = VBGHDISPLAYSERVERTYPE_NONE; 140 140 const char *pSessionType = RTEnvGet(VBGH_ENV_XDG_SESSION_TYPE); 141 141 if (pSessionType) 142 142 { 143 143 if (RTStrIStartsWith(pSessionType, "wayland")) 144 xdgSessionType = VBGH SESSIONTYPE_WAYLAND;144 xdgSessionType = VBGHDISPLAYSERVERTYPE_WAYLAND; 145 145 else if (RTStrIStartsWith(pSessionType, "x11")) 146 xdgSessionType = VBGH SESSIONTYPE_X11;147 } 148 149 VBGHLogVerbose(1, "XDG session type is: %s\n", VBGH SessionTypeToStr(xdgSessionType));150 151 VBGH SESSIONTYPE xdgCurrentDesktopType = VBGHSESSIONTYPE_NONE;146 xdgSessionType = VBGHDISPLAYSERVERTYPE_X11; 147 } 148 149 VBGHLogVerbose(1, "XDG session type is: %s\n", VBGHDisplayServerTypeToStr(xdgSessionType)); 150 151 VBGHDISPLAYSERVERTYPE xdgCurrentDesktopType = VBGHDISPLAYSERVERTYPE_NONE; 152 152 153 153 const char *pszCurDesktop = RTEnvGet(VBGH_ENV_XDG_CURRENT_DESKTOP); … … 155 155 { 156 156 if (RTStrIStr(pszCurDesktop, "wayland")) 157 xdgCurrentDesktopType = VBGH SESSIONTYPE_WAYLAND;157 xdgCurrentDesktopType = VBGHDISPLAYSERVERTYPE_WAYLAND; 158 158 else if (RTStrIStr(pszCurDesktop, "x11")) 159 xdgCurrentDesktopType = VBGH SESSIONTYPE_X11;160 } 161 162 VBGHLogVerbose(1, "XDG current desktop type is: %s\n", VBGH SessionTypeToStr(xdgCurrentDesktopType));159 xdgCurrentDesktopType = VBGHDISPLAYSERVERTYPE_X11; 160 } 161 162 VBGHLogVerbose(1, "XDG current desktop type is: %s\n", VBGHDisplayServerTypeToStr(xdgCurrentDesktopType)); 163 163 164 164 /* Set the returning type according to the precedence. */ 165 if (waylandDisplayType != VBGH SESSIONTYPE_NONE) retSessionType = waylandDisplayType;166 else if (xdgSessionType != VBGH SESSIONTYPE_NONE) retSessionType = xdgSessionType;167 else if (xdgCurrentDesktopType != VBGH SESSIONTYPE_NONE) retSessionType = xdgCurrentDesktopType;168 else retSessionType = VBGH SESSIONTYPE_NONE;165 if (waylandDisplayType != VBGHDISPLAYSERVERTYPE_NONE) retSessionType = waylandDisplayType; 166 else if (xdgSessionType != VBGHDISPLAYSERVERTYPE_NONE) retSessionType = xdgSessionType; 167 else if (xdgCurrentDesktopType != VBGHDISPLAYSERVERTYPE_NONE) retSessionType = xdgCurrentDesktopType; 168 else retSessionType = VBGHDISPLAYSERVERTYPE_NONE; 169 169 170 170 /* Try to detect any mismatches between the variables above. 171 171 * This might indicate a misconfigred / broken system, and we can warn the user then. */ 172 172 #define COMPARE_SESSION_TYPES(a_Type1, a_Type2) \ 173 if ( (a_Type1 != VBGH SESSIONTYPE_NONE) \174 && (a_Type2 != VBGH SESSIONTYPE_NONE) \173 if ( (a_Type1 != VBGHDISPLAYSERVERTYPE_NONE) \ 174 && (a_Type2 != VBGHDISPLAYSERVERTYPE_NONE) \ 175 175 && (a_Type1 != a_Type2)) \ 176 176 { \ 177 177 VBGHLogError("Unable to reliably detect desktop environment:\n"); \ 178 178 VBGHLogError("Mismatch between %s (%s) and %s (%s) detected! This might indicate a misconfigured and/or broken system!\n", \ 179 #a_Type1, VBGH SessionTypeToStr(a_Type1), #a_Type2, VBGHSessionTypeToStr(a_Type2)); \179 #a_Type1, VBGHDisplayServerTypeToStr(a_Type1), #a_Type2, VBGHDisplayServerTypeToStr(a_Type2)); \ 180 180 VBGHLogError("Use --session-type to override this detection.\n"); \ 181 retSessionType = VBGH SESSIONTYPE_NONE; \181 retSessionType = VBGHDISPLAYSERVERTYPE_NONE; \ 182 182 } 183 183 … … 197 197 * @param enmType Type to check. 198 198 */ 199 bool VBGH SessionTypeIsXAvailable(VBGHSESSIONTYPE enmType)200 { 201 return enmType == VBGH SESSIONTYPE_XWAYLAND202 || enmType == VBGH SESSIONTYPE_X11;199 bool VBGHDisplayServerTypeIsXAvailable(VBGHDISPLAYSERVERTYPE enmType) 200 { 201 return enmType == VBGHDISPLAYSERVERTYPE_XWAYLAND 202 || enmType == VBGHDISPLAYSERVERTYPE_X11; 203 203 } 204 204 … … 209 209 * @param enmType Type to check. 210 210 */ 211 bool VBGH SessionTypeIsWaylandAvailable(VBGHSESSIONTYPE enmType)212 { 213 return enmType == VBGH SESSIONTYPE_XWAYLAND214 || enmType == VBGH SESSIONTYPE_WAYLAND;215 } 216 211 bool VBGHDisplayServerTypeIsWaylandAvailable(VBGHDISPLAYSERVERTYPE enmType) 212 { 213 return enmType == VBGHDISPLAYSERVERTYPE_XWAYLAND 214 || enmType == VBGHDISPLAYSERVERTYPE_WAYLAND; 215 } 216
Note:
See TracChangeset
for help on using the changeset viewer.