# Core features The Video SDK for Linux lets an app share the contents of the device's screen or a single window with the session. You start and manage sharing with `IZoomVideoSDKShareHelper`, obtained from `getShareHelper`. To draw over shared content, see [Annotation](/docs/video-sdk/linux/share/annotation/). When more than one user shares at once, see [Handle multiple screen shares](/docs/video-sdk/linux/share/handle-multiple-shares/). ## Share a screen To share an entire display, call `startShareScreen` with the ID of the monitor you want to share. ```cpp IZoomVideoSDKShareHelper* pShareHelper = m_pVideoSDK->getShareHelper(); if (!pShareHelper) return; ZoomVideoSDKErrors err = pShareHelper->startShareScreen(monitorID); if (err == ZoomVideoSDKErrors_Success) { // Started sharing the screen. } ``` ## Share a window To share a single window instead of a whole display, call `startShareView` with the window handle. ```cpp IZoomVideoSDKShareHelper* pShareHelper = m_pVideoSDK->getShareHelper(); if (!pShareHelper) return; ZoomVideoSDKErrors err = pShareHelper->startShareView(handle); ``` On Linux, the window handle string identifies an X11 window in the form `hostname:display_number-screen_number(x, y, width, height)-winid`, for example `:0-0(0,0,1920,1080)-34563456`. ## Share device audio To include the device's audio with your share, call `enableShareDeviceAudio` before you start sharing. ```cpp pShareHelper->enableShareDeviceAudio(true); ``` To feed your own frames into a share instead of capturing a screen or window, share an external source. For details, see [Send raw data](/docs/video-sdk/linux/raw-data/send-raw-data/). ## Stop, pause, and resume sharing Call `stopShare` to end the share. To temporarily stop sending share frames without ending the share, call `pauseShare`, and `resumeShare` to continue. ```cpp pShareHelper->pauseShare(); pShareHelper->resumeShare(); pShareHelper->stopShare(); ``` ## Verify your share started After you start sharing, the SDK calls `onUserShareStatusChanged` and passes an `IZoomVideoSDKShareAction`. Read the status from the action object with `getShareStatus`. ```cpp void CExampleListener::onUserShareStatusChanged(IZoomVideoSDKShareHelper* pShareHelper, IZoomVideoSDKUser* pUser, IZoomVideoSDKShareAction* pShareAction) { if (pShareAction && pShareAction->getShareStatus() == ZoomVideoSDKShareStatus_Start) { // The user has successfully started sharing to the session. } } ``` ## Render another user's share To render a share, get the user's share actions with `getShareActionList`, then subscribe to the `IZoomVideoSDKRawDataPipe` from the share action you want to display. Each `IZoomVideoSDKShareAction` represents one share, so this also covers the case where a user has more than one share active. ```cpp IVideoSDKVector* pShareActions = pUser->getShareActionList(); if (pShareActions && pShareActions->GetCount() > 0) { IZoomVideoSDKShareAction* pShareAction = pShareActions->GetItem(0); IZoomVideoSDKRawDataPipe* pSharePipe = pShareAction->getSharePipe(); // Subscribe to pSharePipe to render the shared content. } ``` For the subscription and rendering flow, see [Receive raw data](/docs/video-sdk/linux/raw-data/receive-raw-data/). To let viewers pick between simultaneous shares, see [Handle multiple screen shares](/docs/video-sdk/linux/share/handle-multiple-shares/).