تغيير دقة جلسة VNC في نظام التشغيل Linux [مغلق]
سؤال
أستخدم 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 بكسل.اختر الشخص الذي يعجبك.وسوف تتغير على الطاير.
تأكد من تطبيق الإعداد الجديد عند مطالبتك بمربع حوار.وإلا فإنه سيعود إلى الإعداد السابق تمامًا كما هو الحال في Windows
نظرًا لظهور هذا السؤال أولاً على Google، اعتقدت أنني سأشارك حلاً باستخدام TigerVNC وهو الحل الافتراضي هذه الأيام.
xrandr
يسمح باختيار أوضاع العرض (الملقب قرارات) ولكن بسبب وجود النماذج مشفرة صلبةيجب أن يكون أي طراز إضافي مثل "2560 × 1600" أو "1600x900" تمت إضافته إلى الكود.أعتقد أن المطورين الذين كتبوا الرمز أكثر ذكاءً ، والقائمة المشفرة الصلبة هي مجرد عينة من القيم.يؤدي إلى استنتاج مفاده أنه يجب أن تكون هناك طريقة لإضافة نماذج مخصصة و man xrandr
يؤكد ذلك.
مع هذه الخلفية إذا كان الهدف هو مشاركة جلسة VNC بين جهاز كمبيوتر مع القرارات المذكورة أعلاه وافتراض أن خادم VNC هو الكمبيوتر مع دقة "1600 × 900":
ابدأ جلسة VNC بشكل هندسي مطابق للعرض الفعلي:
$ vncserver -geometry 1600x900 :1
على جهاز الكمبيوتر "2560x1600" ، ابدأ عارض VNC (أفضل Remmina) واتصل بجلسة VNC عن بُعد:
host:5901
بمجرد الدخول إلى جلسة VNC، قم بتشغيل نافذة طرفية.
تأكد من أن الشكل الهندسي الجديد متاح في جلسة 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
وستلاحظ أن الشاشة صغيرة جدًا.
اذكر طراز 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
أضف النموذج الجديد إلى جلسة VNC الحالية:
$ xrandr --newmode "2560x1600_60.00" 348.16 2560 2752 3032 3504 1600 1601 1604 1656 -HSync +Vsync
في ما سبق
xrandr
ابحث عن اسم العرض على السطر الثاني:VNC-0 connected 1600x900+0+0 0mm x 0mm
قم بربط النموذج الجديد بالشاشة الافتراضية VNC الحالية:
$ xrandr --addmode VNC-0 "2560x1600_60.00"
استخدمه:
$ 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 على ويكيبيديا محاولة، قد تعطيك نظرة عامة تقريبية.