تغيير دقة جلسة VNC في نظام التشغيل Linux [مغلق]

StackOverflow https://stackoverflow.com/questions/15816

  •  08-06-2019
  •  | 
  •  

سؤال

أستخدم VNC للاتصال بمحطة عمل Linux في العمل.لدي في العمل شاشة مقاس 20 بوصة تعمل بدقة 1600 × 1200، بينما في المنزل أستخدم الكمبيوتر المحمول بدقة تبلغ 1440 × 900.إذا قمت بتعيين vncserver ليعمل على 1440x900، فإنني أفقد مساحة كبيرة على شاشتي، بينما إذا قمت بتعيينه ليعمل على 1600x1200، فلن يتناسب مع شاشة الكمبيوتر المحمول، ويجب أن أقوم بتمريره طوال الوقت.

هل هناك أي طريقة جيدة لتغيير حجم جلسة VNC بسرعة؟

خادم VNC الخاص بي هو RealVNC E4.x (لا أتذكر الإصدار الدقيق) الذي يعمل على SuSE64.

هل كانت مفيدة؟

المحلول

يتضمن خادم Real VNC 4.4 دعمًا لـ Xrandr، والذي يسمح بتغيير حجم VNC.ابدأ الخادم بـ:

vncserver -geometry 1600x1200 -randr 1600x1200,1440x900,1024x768

ثم قم بتغيير الحجم باستخدام:

xrandr -s 1600x1200
xrandr -s 1440x900
xrandr -s 1024x768

نصائح أخرى

اكتشف أن vnc4server (4.1.1) الذي تم شحنه مع Ubuntu (10.04) تم تصحيحه ليدعم أيضًا تغيير الدقة بسرعة عبر xrandr.لسوء الحظ، كان من الصعب العثور على هذه الميزة لأنها غير موثقة.حتى هنا هو عليه...

ابدأ الخادم بمثيلات "هندسة" متعددة، مثل:

vnc4server -geometry 1280x1024 -geometry 800x600

من محطة في vncviewer (مع:تم تمكين "السماح بتغيير حجم سطح المكتب الديناميكي") استخدم xrandr لعرض الأوضاع المتاحة:

xrandr

لتغيير النتيجة، على سبيل المثال استخدم:

xrandr -s 800x600

هذا كل شيء.

أنا أركض TigerVNC على خادم Linux الخاص بي، والذي يحتوي على ملف أساسي randr يدعم.لقد قمت للتو بتشغيل vncserver بدون أي خيارات -randr أو خيارات هندسية متعددة.

عندما أقوم بتشغيل xrandr في محطة طرفية، فإنه يعرض جميع دقة الشاشة المتاحة:

bash> xrandr
 SZ:    Pixels          Physical       Refresh
 0   1920 x 1200   ( 271mm x 203mm )   60
 1   1920 x 1080   ( 271mm x 203mm )   60
 2   1600 x 1200   ( 271mm x 203mm )   60
 3   1680 x 1050   ( 271mm x 203mm )   60
 4   1400 x 1050   ( 271mm x 203mm )   60
 5   1360 x 768    ( 271mm x 203mm )   60
 6   1280 x 1024   ( 271mm x 203mm )   60
 7   1280 x 960    ( 271mm x 203mm )   60
 8   1280 x 800    ( 271mm x 203mm )   60
 9   1280 x 720    ( 271mm x 203mm )   60
*10  1024 x 768    ( 271mm x 203mm )  *60
 11   800 x 600    ( 271mm x 203mm )   60
 12   640 x 480    ( 271mm x 203mm )   60
Current rotation - normal
Current reflection - none
Rotations possible - normal
Reflections possible - none

يمكنني بعد ذلك التبديل بسهولة إلى دقة أخرى (على سبيل المثال.التبديل إلى 1360x768):

bash> xrandr -s 5

أنا أستخدم عارض TightVnc كعميل ويتكيف تلقائيًا مع الدقة الجديدة.

أعتقد أن أفضل ما لديك هو تشغيل خادم VNC بهندسة مختلفة على منفذ مختلف.سأحاول على أساس صفحة الرجل

$vncserver :0 -geometry 1600x1200
$vncserver :1 -geometry 1440x900

وبعد ذلك يمكنك الاتصال من العمل بمنفذ ومن المنزل إلى آخر.

يحرر:ثم استخدم xmove لتحريك النوافذ بين خادمي x.

ومن المثير للاهتمام أن لا أحد أجاب على هذا.في TigerVNC، عندما تقوم بتسجيل الدخول إلى الجلسة.اذهب إلى System > Preference > Display من شريط القائمة العلوي (كنت أستخدم Cent OS كخادم بعيد).انقر على القائمة المنسدلة للدقة، وهناك العديد من الإعدادات المتاحة بما في ذلك 1080 بكسل.اختر الشخص الذي يعجبك.وسوف تتغير على الطاير.

enter image description here

تأكد من تطبيق الإعداد الجديد عند مطالبتك بمربع حوار.وإلا فإنه سيعود إلى الإعداد السابق تمامًا كما هو الحال في Windows

نظرًا لظهور هذا السؤال أولاً على Google، اعتقدت أنني سأشارك حلاً باستخدام TigerVNC وهو الحل الافتراضي هذه الأيام.

xrandr يسمح باختيار أوضاع العرض (الملقب قرارات) ولكن بسبب وجود النماذج مشفرة صلبةيجب أن يكون أي طراز إضافي مثل "2560 × 1600" أو "1600x900" تمت إضافته إلى الكود.أعتقد أن المطورين الذين كتبوا الرمز أكثر ذكاءً ، والقائمة المشفرة الصلبة هي مجرد عينة من القيم.يؤدي إلى استنتاج مفاده أنه يجب أن تكون هناك طريقة لإضافة نماذج مخصصة و man xrandr يؤكد ذلك.

مع هذه الخلفية إذا كان الهدف هو مشاركة جلسة VNC بين جهاز كمبيوتر مع القرارات المذكورة أعلاه وافتراض أن خادم VNC هو الكمبيوتر مع دقة "1600 × 900":

  1. ابدأ جلسة VNC بشكل هندسي مطابق للعرض الفعلي:

    $ vncserver -geometry 1600x900 :1
    
  2. على جهاز الكمبيوتر "2560x1600" ، ابدأ عارض VNC (أفضل Remmina) واتصل بجلسة VNC عن بُعد:

    host:5901
    
  3. بمجرد الدخول إلى جلسة VNC، قم بتشغيل نافذة طرفية.

  4. تأكد من أن الشكل الهندسي الجديد متاح في جلسة VNC:

    $ xrandr
    Screen 0: minimum 32 x 32, current 1600 x 900, maximum 32768 x 32768
    VNC-0 connected 1600x900+0+0 0mm x 0mm
       1600x900      60.00 +
       1920x1200     60.00  
       1920x1080     60.00  
       1600x1200     60.00  
       1680x1050     60.00  
       1400x1050     60.00  
       1360x768      60.00  
       1280x1024     60.00  
       1280x960      60.00  
       1280x800      60.00  
       1280x720      60.00  
       1024x768      60.00  
       800x600       60.00  
       640x480       60.00  
    

    وستلاحظ أن الشاشة صغيرة جدًا.

  5. اذكر طراز Modeline (انظر مقالة Xrandr في Archlinux Wiki) لدقة "2560 × 1600":

    $ cvt 2560 1600
    # 2560x1600 59.99 Hz (CVT 4.10MA) hsync: 99.46 kHz; pclk: 348.50 MHz
    Modeline "2560x1600_60.00"  348.50  2560 2760 3032 3504  1600 1603 1609 1658 -hsync +vsync
    

    أو إذا كانت الشاشة قديمة، فاحصل على توقيت GTF:

    $ gtf 2560 1600 60
    # 2560x1600 @ 60.00 Hz (GTF) hsync: 99.36 kHz; pclk: 348.16 MHz
    Modeline "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  6. أضف النموذج الجديد إلى جلسة VNC الحالية:

    $ xrandr --newmode "2560x1600_60.00"  348.16  2560 2752 3032 3504  1600 1601 1604 1656 -HSync +Vsync
    
  7. في ما سبق xrandr ابحث عن اسم العرض على السطر الثاني:

    VNC-0 connected 1600x900+0+0 0mm x 0mm
    
  8. قم بربط النموذج الجديد بالشاشة الافتراضية VNC الحالية:

    $ xrandr --addmode VNC-0 "2560x1600_60.00"
    
  9. استخدمه:

    $ xrandr -s "2560x1600_60.00"
    

يا رفاق هذا بسيط حقا.

تسجيل الدخول عبر ssh في بي الخاص بك

ينفذ

vncserver -geometry 1200x1600

سيؤدي هذا إلى إنشاء جلسة جديدة :1

تواصل مع عميل vnc الخاص بك على ipaddress:1

هذا كل شيء.

إضافة إلى إجابة ناثان (المقبولة):

كنت أرغب في التنقل بين قائمة الحلول ولكن لم أر أي شيء لذلك:

function vncNextRes()
{
   xrandr -s $(($(xrandr | grep '^*'|sed 's@^\*\([0-9]*\).*$@\1@')+1)) > /dev/null 2>&1 || \
   xrandr -s 0
}

فإنه يحصل على الفهرس الحالي، والخطوات إلى الفهرس التالي، ويعود إلى 0 عند حدوث خطأ (أي.نهاية)


يحرر

تم تعديله ليطابق إصدارًا أحدث من xrandr ("*" موجود في نهاية السطر ولا يوجد معرف دقة رئيسي).

function vncNextRes()
{
   xrandr -s $(($(xrandr 2>/dev/null | grep -n '\* *$'| sed 's@:.*@@')-2))  || \
   xrandr -s 0
}

لست متأكدًا من نظام التشغيل Linux، ولكن تحت نظام التشغيل Windows، سيكتشف Tightvnc تغييرات الدقة على الخادم ويتكيف معها.

لذلك يجب أن تكون قادرًا على إدخال VNC إلى محطة العمل، والقيام بما يعادل النقر بزر الماوس الأيمن على سطح المكتب، والخصائص، وتعيين الدقة على أي شيء، وجعل نافذة vnc للعميل الخاص بك تقوم بتغيير حجم نفسها وفقًا لذلك.

من ناحية أخرى ، إذا كانت هناك طريقة لنقل نافذة موجودة من خادم X إلى آخر ، فقد يحل المشكلة.

أعتقد أنه يمكنك استخدامها com.xmove لتحريك النوافذ بين خادمي x منفصلين.لذا، إذا نجح الأمر، فمن المفترض أن يوفر لك هذا على الأقل طريقة للقيام بما تريد، وإن لم يكن بنفس سهولة تغيير الدقة.

ربما تكون الإجابة الأكثر جهلاً التي نشرتها ولكن هنا كالتالي:استخدم عميل/عارض TigerVNC وتحقق 'Resize remote session to local window' ضمن علامة التبويب شاشة الخيارات.

لا أعرف ما الذي يخبره عميل TigerVNC $%#@ عن بعد لـ vncserver أو xrandr أو Xvnc أو gnome أو...ولكن يتم تغيير حجمه عندما أقوم بتغيير نافذة عميل TigerVNC.

الإعداد الخاص بي:

  • خادم Tiger VNC يعمل على CentOS 6.استضافة سطح مكتب جنوم.(يعمل مع RHEL 6.6 أيضًا)
  • Windows بعض الإصدارات مع عميل Tiger VNC.

وبهذا تتغير الدقة لتناسب حجم نافذة العميل بغض النظر عن ماهيتها، وهي ليست كذلك zooming, إنه تغيير فعلي في الدقة (أستطيع رؤية الدقة الجديدة في مخرجات xrandr).

لقد بذلت قصارى جهدي لإضافة دقة جديدة إلى xrandr، ولكن دون جدوى، دائمًا ما ينتهي بي الأمر 'xrandr: Failed to get size of gamma for output default' خطأ.

الإصدارات التي تعمل معي الآن (على الرغم من أنني لم أواجه مشكلات مع أي إصدارات في الماضي، إلا أنني قمت فقط بتثبيت الإصدار الأحدث باستخدام yum install gnome-* tigervnc-server ويعمل بشكل جيد):

OS: RHEL 6.6 (Santiago)
VNC Server:
Name        : tigervnc-server
Arch        : x86_64
Version     : 1.1.0
Release     : 16.el6

# May be this is relevant..
$ xrandr --version
xrandr program version       1.4.0
Server reports RandR version 1.4
$ 

# I start the server using vncserver -geometry 800x600
# Xvnc is started by vncserver with following args:
/usr/bin/Xvnc :1 -desktop plabb13.sgdcelab.sabre.com:1 (sg219898) -auth /login/sg219898/.Xauthority 
-geometry 800x600 -rfbwait 30000 -rfbauth /login/sg219898/.vnc/passwd -rfbport 5901 -fp catalogue:/e
tc/X11/fontpath.d -pn


# I'm running GNOME (installed using sudo yum install gnome-*)
Name        : gnome-desktop
Arch        : x86_64
Version     : 2.28.2
Release     : 11.el6

Name        : gnome-session
Arch        : x86_64
Version     : 2.28.0
Release     : 22.el6

Connect using Tiger 32-bit VNC Client v1.3.1 on Windows 7.

لقد نجح الحل بواسطةomiday في Xvnc TigerVNC 1.1.0، لذلك قمت بتكثيفه في وظيفة bash واحدة فنكسيزي × ص.استخدامه مثل هذا: مقاس 14001000.يفترض ذلك xrandr يُبلغ عن اسم إخراج VNC كـ تقصير.

function vncsize {
    local x=$1 y=$2
    local mode
    if mode=$(cvt "$x" "$y" 2>/dev/null)
    then
        if [[ $mode =~ "Modeline (.*)$" ]]
        then
            local newMode=${BASH_REMATCH[1]//\"/}
            local modeName=${newMode%% *}
            local newSize=( ${modeName//[\"x_]/ } )
            xrandr --newmode $newMode
            xrandr --addmode default "$modeName"
            xrandr --size "${newSize[0]}x${newSize[1]}" &&
                return 0
        else
            echo "Unable to parse modeline for ($x $y) from $mode"
            return 2
        fi
    else
        echo "\`$x $y' is not a valid X Y pair"
        return 1
    fi
}

بقدر ما أعرف، لا توجد طريقة لتغيير دقة العميل باستخدام VNC فقط، لأنه مجرد تطبيق "نسخ الشاشة".

ضيقVNC ومع ذلك (وهو تطبيق عميل وخادم VNC) يمكنه تغيير حجم الشاشة من جانب العميل، أي.جعل كل شيء أصغر قليلاً (على غرار تقنيات تغيير حجم الصور في برامج الرسومات).من المفترض أن ينجح ذلك إذا كنت لا تستخدم أحجام خطوط صغيرة جدًا.يجب أن يكون VNC متوافقًا نظريًا بين تطبيقات VNC المختلفة.

عندي فكرة بسيطة وهي كالتالي:

#!/bin/sh

echo `xrandr --current | grep current | awk '{print $8}'` >> RES1
echo `xrandr --current | grep current | awk '{print $10}'` >> RES2
cat RES2 | sed -i 's/,//g' RES2

P1RES=$(cat RES1)
P2RES=$(cat RES2)
rm RES1 RES2
echo "$P1RES"'x'"$P2RES" >> RES
RES=$(cat RES)

# Play The Game

# Finish The Game with Lower Resolution

xrandr -s $RES

حسنًا، أحتاج إلى حل أفضل لجميع أجهزة العرض التي تعمل بنظام Linux وS.O

أعتقد أن هذا يعتمد على مدير النوافذ الخاص بك.

أنا من مستخدمي Windows، لذا قد يكون هذا تخمينًا خاطئًا، ولكن:ألا يوجد شيء اسمه خادم X هل تعمل على أجهزة Linux - على الأقل تلك التي قد تكون أهدافًا مثيرة للاهتمام لـ VNC - والتي يمكنك الاتصال بها مع "X-Clients"؟

يأخذ VNC كل ما هو موجود على الشاشة ويقوم "بتمريره عبر شبكتك".إذا لم أكن مخطئًا تمامًا، فمن المفترض أن يمنحك البروتوكول "X" الفرصة لاستخدام دقة سطح المكتب الخاصة بعميلك.

يعطي خادم X على ويكيبيديا محاولة، قد تعطيك نظرة عامة تقريبية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top