diff --git a/src/avadapter.cpp b/src/avadapter.cpp
index 4af8cf4bbd33ca1172a6e8492c55bf688e1b0dda..fe0dcea34498dc231ca47d2bf812f59ca448ee4e 100644
--- a/src/avadapter.cpp
+++ b/src/avadapter.cpp
@@ -88,21 +88,8 @@ AvAdapter::shareEntireScreen(int screenNumber)
         return;
     QRect rect = screen->geometry();
 
-    int display = 0;
-#ifdef Q_OS_WIN
-    display = screenNumber;
-#else
-    QString display_env {getenv("DISPLAY")};
-    if (!display_env.isEmpty()) {
-        auto list = display_env.split(":", Qt::SkipEmptyParts);
-        // Should only be one display, so get the first one
-        if (list.size() > 0) {
-            display = list.at(0).toInt();
-        }
-    }
-#endif
     LRCInstance::avModel()
-        .setDisplay(display, rect.x(), rect.y(), rect.width(), rect.height(), getCurrentCallId());
+        .setDisplay(getScreenNumber(), rect.x(), rect.y(), rect.width(), rect.height(), getCurrentCallId());
 }
 
 void
@@ -117,7 +104,7 @@ AvAdapter::shareAllScreens()
             height = scr->geometry().height();
     }
 
-    LRCInstance::avModel().setDisplay(0, 0, 0, width, height, getCurrentCallId());
+    LRCInstance::avModel().setDisplay(getScreenNumber(), 0, 0, width, height, getCurrentCallId());
 }
 
 void
@@ -183,18 +170,6 @@ void
 AvAdapter::shareScreenArea(unsigned x, unsigned y, unsigned width, unsigned height)
 {
 #ifdef Q_OS_LINUX
-    int display;
-
-    // Get display
-    QString display_env {getenv("DISPLAY")};
-    if (!display_env.isEmpty()) {
-        auto list = display_env.split(":", Qt::SkipEmptyParts);
-        // Should only be one display, so get the first one
-        if (list.size() > 0) {
-            display = list.at(0).toInt();
-        }
-    }
-
     // xrectsel will freeze all displays too fast so that the call
     // context menu will not be closed even closed signal is emitted
     // use timer to wait until popup is closed
@@ -202,7 +177,7 @@ AvAdapter::shareScreenArea(unsigned x, unsigned y, unsigned width, unsigned heig
         x = y = width = height = 0;
         xrectsel(&x, &y, &width, &height);
 
-        LRCInstance::avModel().setDisplay(0,
+        LRCInstance::avModel().setDisplay(getScreenNumber(),
                                           x,
                                           y,
                                           width < 128 ? 128 : width,
@@ -210,7 +185,7 @@ AvAdapter::shareScreenArea(unsigned x, unsigned y, unsigned width, unsigned heig
                                           getCurrentCallId());
     });
 #else
-    LRCInstance::avModel().setDisplay(0,
+    LRCInstance::avModel().setDisplay(getScreenNumber(),
                                       x,
                                       y,
                                       width < 128 ? 128 : width,
@@ -302,3 +277,22 @@ AvAdapter::slotDeviceEvent()
 
     deviceListSize_ = currentDeviceListSize;
 }
+
+int
+AvAdapter::getScreenNumber() const
+{
+    int display = 0;
+
+#ifdef Q_OS_LINUX
+    // Get display
+    QString display_env {getenv("DISPLAY")};
+    if (!display_env.isEmpty()) {
+        auto list = display_env.split(":", Qt::SkipEmptyParts);
+        // Should only be one display, so get the first one
+        if (list.size() > 0) {
+            display = list.at(0).toInt();
+        }
+    }
+#endif
+    return display;
+}
diff --git a/src/avadapter.h b/src/avadapter.h
index d3e961d60015881897b97135a1ae5d141fdf8012..45bde4577f6c055d0912686577a425420068eee7 100644
--- a/src/avadapter.h
+++ b/src/avadapter.h
@@ -107,4 +107,9 @@ private:
      * Device changed slot.
      */
     void slotDeviceEvent();
+
+    /*
+     * Get the screen number
+     */
+    int getScreenNumber() const;
 };