LinuxでのVNCセッションの解像度の変更[終了]


153

私はVNCを使用して、職場のLinuxワークステーションに接続しています。職場では1600x1200で動作する20インチモニターを使用していますが、自宅では1440x900の解像度のノートパソコンを使用しています。vncserverを1440x900で実行するように設定すると、モニターの多くのスペースを見逃してしまいます。 1600x1200で実行するように設定すると、ラップトップの画面に収まりません。常にスクロールする必要があります。

オンザフライでVNCセッションのサイズを変更する良い方法はありますか?

私のVNCサーバーは、SuSE64で実行されているRealVNC E4.x(正確なバージョンは覚えていません)です。


最近出くわしたことについてお話しますが、まだテストすることはできません。FreeNCと呼ばれる新しいプログラムがあり、VNCの代替となる予定です。これがリンクです:freenx.berlios.de
andho

@andho-そのリンクは壊れているようです。
ArtOfWarfare 2014

@ArtOfWarfareがこれがhelp.ubuntu.com/community/FreeNXに役立つことを願っています。今ではかなり安定しているはずです。時間が許す限り、すぐに試してみるつもりです。
andho '19

回答:


159

実際のVNCサーバー4.4は、Xrandrのサポートを含み、VNCのサイズ変更を可能にします。次のコマンドでサーバーを起動します。

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

次に、サイズを変更します:

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

1
Nathanに感謝します。realvncの人々でさえ、xrandr機能を強調していないようです... randrの解像度を循環できるようにするには、以下のbash関数も参照してください。
11

7
これらのオプションをすべて.vnc/configファイルに入れると便利です。例えば、私の設定の最初の行は次のとおりです。-randr 800x600,1024x768,1280x800,1280x960,1280x1024,1680x1050,1920x1080,3360x1050,1024x700,1200x740,1600x1000,3200x1000
bfroehle

@ネイサン私はあなたが与えたソリューションを使用しようとしましたが、成功しませんでした。私のこの質問
オタク

3
これは動作しtightvncserverますか?
Dimitry K

4
@DimitryK私はtightvncserverを持っていてそれを動かしません。私はそれをパージし、実際のVNCをインストールしました。私はそれをお勧めします。すべての横長の解像度:320x240,480x320,482x320,560x360,576x360,640x480,640x482,648x486,720x480,720x486,720x540,720x576,768x576,800x480,800x600,1024x600,1024x768,1280x720,1280x800,1280x1024,1366x768,1400x900,440 1600x900、1600x1024、1600x1200、1680x1050、1920x1080、1920x1200、2048x1024、2048x1152、2048x1536、2560x1080、2560x1440、2560x1600、2560x2048、3072x1536、3072x1728、3840x2160、4096x2048、4096x4096、4096x2304、192x40
barwnikk 2015

68

Ubuntu(10.04)に同梱されているvnc4server(4.1.1)にパッチが適用され、xrandrによるオンザフライでの解像度の変更もサポートされることがわかりました。残念ながら、この機能は文書化されていないため、見つけるのが困難でした。だからここに...

次のような複数の「geometry」インスタンスでサーバーを起動します。

vnc4server -geometry 1280x1024 -geometry 800x600

vncviewerの端末から( 'dymanicデスクトップのサイズ変更を許可する'を有効にして)、xrandrを使用して使用可能なモードを表示します。

xrandr

resulutionを変更するには、たとえば次のように使用します。

xrandr -s 800x600

それでおしまい。


私はネイサンによって提案されたものと同様にあなたのアプローチを使おうとしたが成功しなかった。ここ
Geek

完璧に働きました。ありがとう!
Roney Michael

27

LinuxサーバーでTigerVNCを実行しています。これには、基本的なrandrサポートがあります。-randrや複数の-geometryオプションなしでvncserverを起動するだけです。

端末で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ビューアをクライアントとして使用しており、新しい解像度に自動的に適応します。


野生のガチョウを追いかけないように、TigerVncのバージョンとLinuxサーバーのディストリビューション+バージョンの両方をリストしてください。おかげで
-nhed

TiverVnc 1.1.0(Linuxサーバー、Linuxクライアント)で問題なく動作することを確認できます
Benedikt Waldvogel

1
私はvncviewerを使用していますが、毎回ウィンドウが閉じる気分を変えようとしています。
AWE

これはどのxrandrバージョンですか。鉱山:xrandrプログラムバージョン1.3.5サーバーレポートRandRバージョン1.3は完全に異なるようです。たとえば、最初の列がない
短歌

これを追加するだけで、クライアントとしてReal VNCでも機能します。バージョン6.0.3でテスト済み
Vivek VK

25

最善の方法は、異なるポートで異なるジオメトリを使用してVNCサーバーを実行することです。manページに基づいて試してみます

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

次に、職場から1つのポートに、自宅から別のポートに接続できます。

編集:次に、xmoveを使用して、2つのxサーバー間でウィンドウを移動します。


3
@パット、あなたの解決策の問題は、あるVNCセッションから別のVNCセッションにウィンドウを簡単に移動できないことです。デバッグの途中で終了する必要がある場合、中断したところから再開できるようにしたいと思います(サイズ変更のためにウィンドウが少し移動した可能性があります)。2つの別々のセッションがある場合、1つのセッションからウィンドウを閉じて別のセッションで再び開く必要があるため、以前と同じように続けることができません。一方、既存のウィンドウをあるXサーバーから別のXサーバーに移動する方法がある場合は、問題を解決できる可能性があります。
Nathan Fellman、

1
xmoveは現在のUbuntuリポジトリにはありません。xpraは、同じことを行います(Xプロキシとして機能します)。
サムHartsfield

20

この質問が最初にグーグルで出てくるので、私は最近デフォルトであるTigerVNCを使用してソリューションを共有すると思いました。

xrandrディスプレイモード(解像度)を選択できますが、モードラインがハードコーディングされているため 、「2560x1600」や「1600x900」などの追加のモードラインをコードに追加する必要があります。コードを書いた開発者ははるかに賢く、ハードコードされたリストは値のサンプルにすぎないと思います。これは、カスタムモードラインを追加してman xrandr確認する方法が必要であるという結論につながります。

その背景で、目標が上記の解像度を持つ2台のコンピューター間でVNCセッションを共有することであり、VNCサーバーが「1600x900」の解像度を持つコンピューターであると想定します。

  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. "2560x1600"解像度のモードライン(ArchLinux wikiのxrandrの記事を参照)をリストします。

    $ 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出力で、2行目の表示名を探します。

    VNC-0 connected 1600x900+0+0 0mm x 0mm
    
  8. 新しいモードラインを現在のVNC仮想モニターにバインドします。

    $ xrandr --addmode VNC-0 "2560x1600_60.00"
    
  9. これを使って:

    $ xrandr -s "2560x1600_60.00"
    

tigervncとmwmを使用してより大きなワークスペースを作成するために使用し、画面サイズを増やすように機能しましたが、ワークスペースはvncで使用される初期サイズに制限されています。
user2019716 2017年

これは、mwmが原因です
。mwmを

素晴らしい、レシピに感謝します、それは本当に役に立ちました。
エイドリアンRosoga

おかげで、時間を大幅に節約できました。
Ben Davis

17

興味深いことに、誰もこれに答えていません。TigerVNCで、セッションにログインしたとき。System > Preference > Displayトップメニューバーからに移動します(リモートサーバーとしてCent OSを使用していました)。解像度のドロップダウンをクリックして、1080pを含むさまざまな設定を利用できます。好きなものを選択してください。オンザフライで変更されます。

ここに画像の説明を入力してください

ダイアログが表示されたら、必ず新しい設定を適用してください。それ以外の場合は、Windowsと同じように以前の設定に戻ります


1
これはTigerVNC、CentOS、またはウィンドウマネージャーの設定ですか?
Nathan Fellman、2014年

これは、あなたがログインしているとき、「TigerVNC視聴者からもアクセスすることができますCentOS.Youの設定です。
Hammadカーン

2
これが私の安全な生活
Yu Jiaao

9

みんなこれは本当に簡単です。

sshあなたのパイにログインする

実行する

vncserver -geometry 1200x1600

これにより、新しいセッションが生成されます :1

でvncクライアントに接続します ipaddress:1

それでおしまい。


7
既存のセッションの解像度を変更せず、新しいセッションを作成するだけなので、これは間違った答えです。
Nathan Fellman 2017年

6

ネイサンの(受け入れられた)答えに追加:

解決策のリストを循環させたいのですが、何も表示されませんでした。

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
}

3

Xvnc TigerVNC 1.1.0では@omidayによる解決策が機能したため、1つのbash関数vncsize xyに圧縮しました。次のように使用します:vncsize 1400 1000。「デフォルト」または「VNC-0」の任意の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_]/ } )
            local screen=$(xrandr -q|grep connected|cut -d' ' -f1)
            xrandr --newmode $newMode
            xrandr --addmode "$sscreen" "$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
}

2

おそらく私が投稿した最も無知な答えですが、ここに行きます:TigerVNCクライアント/ビューアーを使用して'Resize remote session to local window'、オプションの[画面]タブで確認してください。

$%#@ TigerVNCクライアントがリモートのvncserver、xrandr、Xvnc、gnomeなどに何を伝えるかわかりませんが、TigerVNCクライアントウィンドウを変更するとサイズが変更されます。

私のセットアップ:

  • CentOS 6で動作するTiger VNCサーバー。ホスティングGNOMEデスクトップ。(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.

クライアント/サーバーに使用しているTigerVNCのバージョンは何ですか?今日これを試しましたが、自動的にサイズ変更されません。サーバーとvncviewer-1.4.3.exeクライアントでXvnc TigerVNC 1.1.0を実行しているRHEL 6.2を使用しています
cdwilson

@cdwilsonフルスクリーンモードのクライアントで試してみてください。追加されたバージョン。HTH
Kashyap

1.1.0は、私たちの作業マシンで実行されているものとはうまくいっていないことがわかりました。$HOMEディレクトリから最新の1.4.3を実行すると、期待どおりに動作しますgithub.com/TigerVNC/tigervnc/issues/155
cdwilson

確認済み:openSuse 15.1、GDM、KDEプラズマ、TigerVNCクライアント1.9.0。私のリモートデスクトップの解像度は、クライアントウィンドウのサイズ、クレイジーなアドホックな解像度、アスペクト比に従います。GDMまたはKDE。そのまま使用すると、クライアントやサーバーのどこにも何も設定する必要はありません。
エスピノサ

1

Linuxについてはよくわかりませんが、Windowsでは、tightvncがサーバー上の解像度の変更を検出して適応します。

したがって、ワークステーションにVNCを実行し、デスクトップを右クリックしてプロパティと同等の操作を行い、解像度を何にでも設定し、それに応じてクライアントのvncウィンドウのサイズを変更できるようにする必要があります。


1

一方、既存のウィンドウをあるXサーバーから別のXサーバーに移動する方法がある場合は、問題を解決できる可能性があります。

xmoveを使用して、2つの別々のxサーバー間でウィンドウを移動できると思います。したがって、それが機能する場合、これにより、少なくとも解像度を変更するほど簡単ではありませんが、やりたいことを実行できるようになります。


xmoveがSuSE Linuxで他の名前で使われているかどうか知っていますか?
Nathan Fellman、

@NathanFellman xpraを見ましたか?これは最近のアプリケーションですが、同様のツールen.wikipedia.org/wiki/Xpraおよびsoftware.opensuse.org/package/xpraです。
DDay

ITがリモートアクセスツールを選択する大企業で働いているため、私はこれをあまり制御できません
Nathan Fellman

0

私が知る限り、VNCを使用するだけでクライアントの解像度を変更する方法はありません。これは、単に「モニターミラーリング」アプリケーションであるためです。

ただし、TightVNC(VNCクライアントおよびサーバーアプリケーション)は、クライアント側で画面のサイズを変更できます。つまり、すべてを少し小さくします(グラフィックプログラムの画像サイズ変更手法と同様)。フォントサイズが小さすぎない場合は、これでうまくいくはずです。VNCは、理論的には異なるVNCアプリケーション間で互換性がある必要があります。


質問は厳密にLinuxの質問です。このWindowsの回答はここでは適用されません。WindowsではVNCは単なるモニターですが、Linuxでは最初に仮想デスクトップでしたが、後になって初めていくつかのバージョンで「ディスプレイ0」のサポート(つまりモニター)が追加されました。VNCスケーリングは、ユーザーエクスペリエンスがかなり悪いです。
2011

0

私は次のような簡単なアイデアを持っています:

#!/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と同様のSOの下ですべてのディスプレイデバイスのためのより良いソリューションを必要としています


-3

それはウィンドウマネージャー次第だと思います。

私はWindowsユーザーなので、これは間違った推測かもしれませんが、Linuxマシン上で実行されているX-Serverと呼ばれるものはありませんか-少なくともVNCの興味深いターゲットである可能性があるもの-で接続できますXクライアント」?

VNCは、画面上にあるすべてのものを受け取り、「ネットワークを介してトンネリング」します。私が完全に間違っていなければ、「X」プロトコルはクライアントのデスクトップ解像度を使用する機会を与えるはずです。

与えるX-Serverのあなたにラフな概要を与えるかもしれない、ウィキペディア上で試して。


アイデアは良いですし、sshトンネルとローカルxサーバーを使用して行うことができます。マシンにxサーバーがあり、リモートクライアントにxサーバーへのアクセスを許可すると、リモートアプリのGUIがディスプレイに表示されます。
andho

@andhoいいえ、これはポスターが要求したものではありません-ここでの問題は、接続が失われたときにウィンドウを失うことです。トンネルを介してウィンドウを開くことは、デスクトップ(およびすべての開いているアプリ)をあるクライアントから別のクライアントに移動したい場合ではなく、短期間のアプリでのみ役立ちます...
nhed

@nhed、私はこれがまったく実用的かどうかはわかりませんが、それはアイデアです。長期的なアプリについては、おそらく「画面」プログラムを使用できますか?
andho

@andho画面は素晴らしいです。テキストのみのアプリの場合... OPがXアプリについて質問していました...同じものを探していて、xranrのようなものか、クローゼットでのxmove(xrandrはよりクリーンなオプションです)
nhed

@nhed、はい、これも私が抱えている問題です。そのアイデアを捨てるだけで、経験豊富な誰かがそれを打ち消すことができます。それが可能かどうかをテストする必要はありません。
andho
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.