このページは、まだ未完成です。。。

nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日)

この記事を作った動機

 最近 Microsoft 社のネイティブの RDP クライアントや MS Store で配布されている純正 RDP クライアントや Windows に標準搭載されている RDP クライアントプログラムに不満があるというのがあった。

 ちょっと前までは、Windows 環境では標準搭載されている RDP クライアントプログラムを使っていた。Windows に対してのRDP接続では自動的にクライアントとRDP接続先が、画面の解像度やスケーリング情報をやり取りしていたため 問題なしとしていたし、 RDP 接続先としての Linux 環境側も X11 の設定を使い、手動で解像度を変えることで対応していて、それでいったん良しとしていた。

 しかし、Linux 環境に RDP 接続する場合において、GNOME 49 の本格的な X11 環境が廃止があり、簡単に画面の解像度を変更できなくなったため、そうとは行かなくなった。

WindowsネイティブRDPクライアント

 それで、私の環境でも NVIDIA 製 GPU を使っていても、Wayland にしないと、更新後 gdm サービスが立ち上がらないということになってしまったため、NVIDIA が提供する X11 上で動作する設定画面が使えなくなった。EDID という、ディスプレイの情報をローレベルで強引に書き換えるなどしなければ、自由な解像度で RDP 接続先としての Linux 環境が使えなくなってしまった。

 こうして、いろんな我慢が積み重なり、そろそろいい加減何とかしようと思って、 Guacamole を見つけ、試していたというのがあった。私の今の理解だと、Guacamole とは、apache から出ている Tomcat 上で動作し、ブラウザでアクセスすることで使うことができる RDP VNC その他もろもろのクライアントとして使うことができる Web アプリという認識である。

 とりあえず現状ではすべてについて記録を一気にとるのは現実的ではなかったので、とりあえず、書きやすいところや、記録に残しておきたいところを優先的に先に記録を残してみることにした。

Guacamoleが動作している様子

ログイン画面

ログイン画面

接続先選択画面

接続先選択画面

動いている様子

実際に動かしている様子
実際に動かしている様子1

設定方法

 ここはまだ、というかまだとりあえず動いただけで、安定的な稼働までには至っていないってのがある。

このページは、まだ未完成です。。。

nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日)

気づいたことや躓いたこと

接続先の設定が一つしかないとき

 自然に設定された接続先が一つしか存在しない場合、XMLでコンフィグ設置をする方法では、ログイン後直接自動的に接続され、選択画面は表示されなかった。

どんなアプリなのか勘違いしていた

 最初は、なんかRDPとかを完全に置き換えるようなバックエンドも包括した Web ベースの何かかと思ったが、実際には画面を共有するために実際に画面をキャプチャしたり、接続先の制御をおこなうバックエンドは RDP VNC SSH などのメジャーなものが対応し、GNOME内臓の RDP バックエンドなどを使うことが分かった。

 いろいろ試しているうちに、Guacamole はあくまで Web ベースのリモートデスクトップ、リモートシェルのクライアントであることが分かった。

guacd が必要な動的ライブラリを読み込めていない

 なんか少なくとも私の Linux 環境では、ライブラリの標準の読み込みパスと、guacd が読み込むことを想定している動的ライブラリの配置場所が違うことが、エラーメッセージをたどったりしてたどり着いた、Apache Guacamole でVNCつないでみたの #guacamole - Qiita という記事を読んでわかり、実際に動かすところまで持っていくことができた。

 具体的には、LD_LIBRARY_PATH の環境変数として、Guacamole のバックエンドが必要とするライブラリが実際に存在するパスを指定しないといけないようである。以下の動的ライブラリが読み込めない場合、RDP に接続できなかったりする。

ls    /usr/local/lib/libguac-client*
# -rw-r--r--⠀root⠀5339894⠀Oct 28 05:25:26⠀⠀libguac-client-rdp.a
# -rwxr-xr-x⠀root⠀1170   ⠀Oct 28 05:25:26⠀⠀libguac-client-rdp.la*
# -rwxr-xr-x⠀root⠀2784128⠀Oct 28 05:25:26⠀⠀libguac-client-rdp.so*
# -rwxr-xr-x⠀root⠀2784128⠀Oct 28 05:25:26⠀⠀libguac-client-rdp.so.0*
# -rwxr-xr-x⠀root⠀2784128⠀Oct 28 05:25:26⠀⠀libguac-client-rdp.so.0.0.0*
# -rw-r--r--⠀root⠀641330 ⠀Oct 28 05:25:27⠀⠀libguac-client-ssh.a
# -rwxr-xr-x⠀root⠀1245   ⠀Oct 28 05:25:27⠀⠀libguac-client-ssh.la*
# -rwxr-xr-x⠀root⠀388056 ⠀Oct 28 05:25:27⠀⠀libguac-client-ssh.so*
# -rwxr-xr-x⠀root⠀388056 ⠀Oct 28 05:25:27⠀⠀libguac-client-ssh.so.0*
# -rwxr-xr-x⠀root⠀388056 ⠀Oct 28 05:25:27⠀⠀libguac-client-ssh.so.0.0.0*
# -rw-r--r--⠀root⠀860494 ⠀Oct 28 05:25:28⠀⠀libguac-client-vnc.a
# -rwxr-xr-x⠀root⠀1152   ⠀Oct 28 05:25:28⠀⠀libguac-client-vnc.la*
# -rwxr-xr-x⠀root⠀505152 ⠀Oct 28 05:25:28⠀⠀libguac-client-vnc.so*
# -rwxr-xr-x⠀root⠀505152 ⠀Oct 28 05:25:28⠀⠀libguac-client-vnc.so.0*
# -rwxr-xr-x⠀root⠀505152 ⠀Oct 28 05:25:28⠀⠀libguac-client-vnc.so.0.0.0*

 私の環境の場合は、/usr/local/lib/配下に必要なライブラリが配置されていたので、以下のようにしてみたところ、直接起動としてはとりあえず動いた。

LD_LIBRARY_PATH=/usr/local/lib
/usr/local/sbin/guacd -f -b 127.0.0.1 -l 4822 -L debug

# guacd[87930]: INFO:     Guacamole proxy daemon (guacd) version 1.6.0 started
# guacd[87930]: DEBUG:    Successfully bound AF_INET socket to host 127.0.0.1, port 4822
# guacd[87930]: INFO:     Listening on host 127.0.0.1, port 4822
# guacd[87930]: INFO:     Creating new client for protocol "rdp"
# guacd[87930]: INFO:     Connection ID is "$7cd3298c-b86f-4162-9f81-c0d38c6a1ad8"
# guacd[87988]: DEBUG:    Processing instruction: size
# guacd[87988]: DEBUG:    Processing instruction: audio
# guacd[87988]: DEBUG:    Processing instruction: video
# guacd[87988]: DEBUG:    Processing instruction: image
# guacd[87988]: DEBUG:    Processing instruction: timezone
# guacd[87988]: DEBUG:    Processing instruction: name
# guacd[87988]: DEBUG:    Parameter "console" omitted. Using default value of 0.

./configure 時の様子

 RDP サポートが RDP ........... yes になっている。

./configure --with-systemd-dir=/usr/local/lib/systemd/system

# ...
# 
# ------------------------------------------------
# guacamole-server version 1.6.0
# ------------------------------------------------
# 
#    Library status:
# 
#      freerdp ............. yes (2.x)
#      pango ............... yes
#      libavcodec .......... yes
#      libavformat ......... yes
#      libavutil ........... yes
#      libssh2 ............. yes
#      libssl .............. yes
#      libswscale .......... yes
#      libtelnet ........... no
#      libVNCServer ........ yes
#      libvorbis ........... yes
#      libpulse ............ yes
#      libwebsockets ....... no
#      libwebp ............. yes
#      wsock32 ............. no
# 
#    Protocol support:
# 
#       Kubernetes .... no
#       RDP ........... yes
#       SSH ........... yes
#       Telnet ........ no
#       VNC ........... yes
# 
#    Services / tools:
# 
#       guacd ...... yes
#       guacenc .... yes
#       guaclog .... yes
# 
#    FreeRDP plugins: /usr/lib/freerdp2
#    Init scripts: no
#    Systemd units: /usr/local/lib/systemd/system

make install 時の様子

 /usr/local/lib にライブラリが配置されていると言われる。

sudo make install

# ...
# ----------------------------------------------------------------------
# Libraries have been installed in:
#    /usr/local/lib
# 
# If you ever happen to want to link against installed libraries
# in a given directory, LIBDIR, you must either use libtool, and
# specify the full pathname of the library, or use the '-LLIBDIR'
# flag during linking and do at least one of the following:
#    - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
#      during execution
#    - add LIBDIR to the 'LD_RUN_PATH' environment variable
#      during linking
#    - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
#    - have your system administrator add LIBDIR to '/etc/ld.so.conf'
# 
# See any operating system documentation about shared libraries for
# more information, such as the ld(1) and ld.so(8) manual pages.
# --------------------------------------------------------------------
# ...

何も設定なしに、guacd を直接起動し、RDP接続を試す様子

 ライブラリが欠損しているというエラーが直接出るのではなく、単にサポートされていませんと言われて、接続が失敗する。

/usr/local/sbin/guacd -f -b 127.0.0.1 -l 4822
# guacd[67624]: INFO:     Guacamole proxy daemon (guacd) version 1.6.0 started
# guacd[67624]: INFO:     Listening on host 127.0.0.1, port 4822
# guacd[67624]: INFO:     Creating new client for protocol "rdp"
# guacd[67624]: INFO:     Connection ID is "$ffb6b3e5-ec2c-45af-b11e-5d4dcbd25f19"
# guacd[67627]: WARNING:  Support for protocol "rdp" is not installed
# guacd[67624]: INFO:     Connection "$ffb6b3e5-ec2c-45af-b11e-5d4dcbd25f19" removed.
# guacd[67624]: INFO:     Creating new client for protocol "rdp"
# guacd[67624]: INFO:     Connection ID is "$78959ca6-d616-4193-814d-19bb046a109b"
# guacd[67633]: WARNING:  Support for protocol "rdp" is not installed
# guacd[67624]: INFO:     Connection "$78959ca6-d616-4193-814d-19bb046a109b" removed.
...

AUR に guacd っぽいものがあるが。。。

 AURguacamole-server という名前で、guacd らしきものが存在しているが、これは正常にインストールできなかった。具体的には以下のコンパイルエラーが出てこけてしまう。

 guacamole 公式からソースコードをダウンロードしてきて、コンパイルする分にはエラーにならなかったので、多分 AUR にあるそのリポジトリ自体の何かがおかしいのだろうとは思うが、とりあえず動かないということでこのことについては置いている。

CCLD     libguac.la
In function 'inet_pton',
    inlined from '__guac_wol_send_packet' at wol.c:104:18,
    inlined from 'guac_wol_wake' at wol.c:192:22:
/usr/include/bits/inet-fortified.h:56:10: error: call to '__inet_pton_chk_warn' declared with attribute warning: inet_pton called with a destination buffer size too small [-Werror=attribute-warning]
   56 |   return __glibc_fortify (inet_pton, __sz, sizeof (char),
      |          ^
lto1: all warnings being treated as errors
make[4]: *** [/tmp/ccVyGcaM.mk:4: /tmp/ccuZSjG4.ltrans1.ltrans.o] Error 1
make[4]: *** Waiting for unfinished jobs....
lto-wrapper: fatal error: make returned 2 exit status
compilation terminated.
/usr/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
make[3]: *** [Makefile:728: libguac.la] エラー 1
make[3]: ディレクトリ '/home/username/.cache/yay/guacamole-server/src/guacamole-server-1.6.0/src/libguac' から出ます
make[2]: *** [Makefile:1214: all-recursive] エラー 1
make[2]: ディレクトリ '/home/username/.cache/yay/guacamole-server/src/guacamole-server-1.6.0/src/libguac' から出ます
make[1]: *** [Makefile:551: all-recursive] エラー 1
make[1]: ディレクトリ '/home/username/.cache/yay/guacamole-server/src/guacamole-server-1.6.0' から出ます
make: *** [Makefile:471: all] エラー 2
==> エラー: build() で問題が発生しました。
    中止...
 -> ビルド時にエラー: guacamole-server-exit status 4

...

-> Failed to install the following packages. Manual intervention is required:
guacamole-server - exit status 4

細かいクライアント設定

 私の環境では、Alt + Ctrl + Shift キーの同時押して以下の画面が出てきた。

実際に動かしている様子1

Tomcat と JAVA バージョン

このページは、まだ未完成です。。。

nicotalk&キャラ素材配布所 http://www.nicotalk.com/charasozai_kt.html (2024年5月16日)
 Tomcat は Java を使って動作しているとのことだが、Javaのデフォルトで使われるもののバージョンがいまいち合わないということがあるっぽく、私の環境では手動でその項目について修正する必要があることが分かった。

おまけ

 おまけというか、せっかく自前のブログなので、自由にしたいというのもあり、私の主観で、自由に気持ちを吐き出すって感じで、ここから先は不満について書いています。人によっては気分を害したりするかもしれませんから、ここで一応注意書きはしておきます。

具体的な Microsoft の提供するRDP クライアントの不満

ネイティブクライアントについて

 私がネイティブクライアントと呼んでいるのは、Windows XP 時代からあるような Win32 なプログラムのことについてである。MS Store にあるようなものではない。

WindowsネイティブRDPクライアント

 私がこの RDP クライアントについて不満な点は以下の通りである。

RDP 接続先との解像度が合わないときのスケーリングが微妙

 一応スケーリングできるが、決まった倍率にしかスケーリングできず、使っているクライアントの画面の解像度次第では、全然サイズが合わない。しかも解像度が合わないときの挙動が、なんか最初から全画面表示を指定したときと、後からRDP接続した後や一度全画面表示を解除した後に、ウィンドウを操作する方法して全画面表示にしようとしたときに、異なる挙動となっているところも不満点かもしれない。

  • 何もスケーリングしていないとき

    4kディスプレイに対し、1600x900のRDPホストの画面のRDPの様子

  • 最初から全画面の指定にしたとき

    全画面表示の時

  • あとから全画面表示にしようとしたとき

    RDPを開いてら全画面表示にしようとしたとき

  • スケーリングが合わず小さすぎる例

    中途半端にしかスケールしない例 小さすぎ

  • スケーリングが合わず大きすぎる例

    中途半端にしかスケールしない例 大きすぎ

とにかく Windows 以外の接続先と相性が悪い 

 以下は、GNOME RDP 環境に接続しようとしてエラーが出ている様子であるが、ユーザ名やパスワードを間違えても、それ以外の何かしらの障害だったとしても、More data is available しか出てきたためしがない。GNOME デスクトップ自体が障害時に、うわっ、何かがおかしいみたいです!みたいなエラー文を全画面表示で出すように、具体的に何が問題なのか説明があまりに欠けていて、これだけではわからないということがある。

 現状どうなっているかとか、ログをいろいろ怪しいところを漁るとか、すぐには解決を期待できない時間のかかる地獄のようなデバック作業になる。それは、今回説明するやつも同じといえばそうかもしれないが。。。

非常にわかりにくいエラーが出る様子

Windows でしか使えない

 そもそも RDP エコスステム全体が MS の Windows のための産物って感じで、一応 RDP についての PDF のドキュメント があるけど暗号みたいなわかりづらいのしかないし、Androidとか、Linux環境とか、MACとかその他いろいろあるプラットフォームに対して優しくないという点がある。Linux 環境には、Remmina がありそれが使えるが、いちいち専用クライアントソフトを入れないと使えないというところがやはり手軽とはいいがたいところ。

 RDP 的なものは、手軽に頻繁に使いたいものの一つなので、ブラウザ一つでアクセスして利用できるというのはありがたいと思う。

MS Store にある RDP アプリについて

 ちょっと前の Win10 時代には、スケーリングも画面に合わせてできて、自前の環境に接続可能なモートデスクトップアプリが MS Store に存在していたが、今は少なくとも正攻法では利用不可能なようである。

 今は、Windows App なる「絶対課金させるぞ!ベンダーロックインするぞ!」って気満々のアカウントログイン必須、サブスク前提のアプリに置き換えられており、MS のクラウドを意地でも強引に使わせようと躍起になっているところがうかがえ、私にとっては最悪である。

 多分ターゲットは iPhoneを使っているとかモバイルな世界で、公式ストアにある審査に通ったアプリしか使いませんという、浅く使いお金は落とすが、その行動が将来的にどうなるか影響については考えられておらず、言われるがままに正しいとされる存在に従い、技術的にやられてしまったらそのことも分からないような以下に示すような人たちであると思われる。

  • 過労など、強烈な苦しみに毎日さいなまれているなど、考えられないような状況下にある
  • 自分の本意と他人の意図の区別がついていないなど何かしら自覚のない状態であり、従っていることのないように疑問を持つ習慣がない
  • 自分の本意が分かっていない、自分が分からない人
  • 自らの意図したとおりに物事が進んでいない、最終的に到達されていないが、それに自覚がない人

 私としては、どうしてもこういうやりかたは、搾取や弱いものいじめっていう印象を受ける。

問題児

 ちなみにちょっと前評価を見たときにはコメントがあって、「前のリモートデスクトップアプリから移行しろと指示があったので移行したところ、ログインしないと使えない仕様だった。最悪!」みたいなコメントにあふれていた。今(2025/10/25)、そのコメントについて確認しようとしたところ、NX domain となり、MS Store サイト自体が吹き飛んでいてカオスな予感だった。なんか今まで見聞きした中で感じることとしては、 Win Vista 時代の Windows Live っぽい雰囲気である。

MS Storeのサイトが落ちている様子

 結局単に RDP アプリとして見るならば、旧来のオプションを強制的に封じて、商業的、政治的な理由を社会的大義の建前やあたりさわりの良いマーケティングの言葉で包む(新しいことを強調する、”完全なセキュリティー”などと言い現実的ではない理想を実現したかのように謳う)をして新規ユーザを既存のブランドと相まって説得し強引に取り込もうとしながら、昔から使っていたユーザーには反感を買うようなことをするのは結構マイナスなことであると思われるが、MS的にはそれはどうでもいいのだろうとも思える。

 私としては、新しいものを出すのはいいが、旧来のものを使い続けることを否定し、新しいものを強制されるのはいただけないと思うところである。もちろん現状では、MS Store ではなく、Windows 標準で入っている RDP クライアントに関しては、利用可能だし、暫定的な利用としては機能は使えるほどにはある。しかし、知ってる人は知っているが、知らない人は知らないって感じな気がして、これから初めましての人にとってはあってないような選択肢だと思われる。

 まあ、Internet explorer の話といい、Windows 10 強制アップグレードの話といい、これからも Microsoft は同じことを繰り返すのだろうとは思う。また、EUがその時には登場するのだろうか。。。

参考にしたサイトとか