質問

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

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

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

役に立ちましたか?

解決

Real VNC サーバー 4.4 には、VNC のサイズを変更できる Xrandr のサポートが含まれています。次のコマンドでサーバーを起動します。

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

次に、次のようにしてサイズを変更します。

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

他のヒント

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

次のように、複数の「ジオメトリ」インスタンスを使用してサーバーを起動します。

vnc4server -geometry 1280x1024 -geometry 800x600

vncviewer の端末から (以下を使用)「動的デスクトップのサイズ変更を許可」が有効になっている場合)、xrandr を使用して利用可能なモードを表示します。

xrandr

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

xrandr -s 800x600

それでおしまい。

私は走っています タイガーVNC 私の Linux サーバーには基本的な機能があります。 ランドル サポート。-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 ビューアをクライアントとして使用していますが、新しい解像度に自動的に適応します。

最善の方法は、別のポート上の別のジオメトリで VNC サーバーを実行することだと思います。に基づいて試してみます マニュアルページ

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

そうすれば、職場からあるポートに接続したり、自宅から別のポートに接続したりできます。

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

興味深いことに、これには誰も答えませんでした。TigerVNC で、セッションにログインしているとき。に行く System > Preference > Display 上部のメニューバーから(私はCent OSをリモートサーバーとして使用していました)。解像度ドロップダウンをクリックすると、1080p を含むさまざまな設定が利用可能になります。好きなものを選択してください。それはその場で変わります。

enter image description here

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

この質問は Google で最初に表示されるため、最近のデフォルトである 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"
    

皆さん、これは本当に簡単です。

経由でログイン 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サーバーから別の窓に移動する方法がある場合、それは問題を解決するかもしれません。

使えると思います xmove 2 つの別個の X サーバー間でウィンドウを移動します。したがって、それが機能すれば、解像度を変更するほど簡単ではありませんが、少なくとも必要なことを行う方法が提供されるはずです。

おそらく私が投稿した中で最も無知な回答ですが、次のとおりです。TigerVNCクライアント/ビューアを使用して確認してください 'Resize remote session to local window' オプションの「画面」タブの下にあります。

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

私のセットアップ:

  • CentOS 6 上で動作する Tiger VNC サーバー。GNOME デスクトップのホスティング。(RHEL 6.6 でも動作します)
  • Tiger VNC クライアントを備えた Windows の一部のバージョン。

これにより、解像度はクライアント ウィンドウのサイズに関係なく、そのサイズに合わせて変更されます。 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関数に凝縮しました vncsize x y. 。次のように使用します。 vncサイズ 1400 1000. 。それは次のことを前提としています エクスランドル 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 は理論的には、異なる 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-Clients」で接続できる Linux マシン (少なくとも VNC の興味深いターゲットとなる可能性のあるマシン) 上で実行されていますか?

VNC は、画面上のすべてのものを取得し、「ネットワーク経由でトンネリング」します。私が完全に間違っていなければ、「X」プロトコルを使用すると、クライアントのデスクトップ解像度を使用できるようになります。

与える エックスサーバー Wikipedia を試してみると、大まかな概要がわかるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top