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

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日)

Systemd におけるサービス例 (/etc/systemd/system/guacd-custom.service)

 guacd を root で実行するのは色々と好ましく無いと思われるので、存在する標準ユーザをUser=に指定する。私は現時点では、通常メインで使っている管理用ユーザを指定している。また動的ライブラリの問題に対応するために、Environment="LD_LIBRARY_PATH=/usr/local/lib"が必要である。

[Unit]
Description="Guacd backend for the Guacamole frontend on localhost:4822(TCP)."
# After=

[Service]
Type=simple
User=[userNameOnTheHost]
Environment="LD_LIBRARY_PATH=/usr/local/lib"
ExecStart=/usr/local/sbin/guacd -f
Restart=on-failure

[Install]
WantedBy=multi-user.target

コンフィグ周りについて

RDP接続設定の記述例 (/etc/guacamole/user-mapping.xml)

<user-mapping>
    <authorize username="share" password="46494649">
        <connection name="aRDPconnection">
            <protocol>rdp</protocol>
            <param name="hostname">192.168.x.x</param>
            <param name="port">3389</param>
            <param name="username">[ユーザ名]</param>
            <param name="password">[パスワード]</param>
	    <param name="ignore-cert">true</param>
        </connection>
	    <connection name="aVNCconnection">
            <protocol>vnc</protocol>
            <param name="hostname">192.168.x.x</param>
            <param name="port">5900</param>
            <param name="username">[ユーザ名]</param>
            <param name="password">[パスワード]</param>
	        <param name="ignore-cert">true</param>
        </connection>
    </authorize>
</user-mapping>

tomcat9 で動作する Guacamole フロントエンドの設定 (/etc/guacamole/guacamole.properties)

  • guacd バックエンド接続先
  • ユーザ認証方式についての指定
guacd-hostname: localhost
guacd-port: 4822

lib-directory: /etc/guacamole/extensions
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
user-mapping: /etc/guacamole/user-mapping.xml

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

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

 自然に設定された接続先が一つしか存在しない場合、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のデフォルトで使われるもののバージョンがいまいち合わないということがあるっぽく、私の環境では手動でその項目について修正する必要があることが分かった。

guacd が正しく動作せず、コンパイルが通らない (2026/4/1)

問題の説明と導入

 久しぶりに、Guacamole の放置していたことをなんとかしようと思ったところ、guacd のバックエンドにおいて新たな問題が発生し、前動いてたやり方で動かないということに直面したため、それについて起こったことややったことを記録する。

 具体的には、guacd-が必要な動的ライブラリを読み込めていないの動的ライブラリを探索するパスをあらかじめ明示する手順を踏んでもSupport for protocol "rdp" is not installedと言われて動かなかったり、guacdのバックエンド自体が良くないのかなと思い、Apache Guacamole® 公式からソースコードをダウンロードしてguacdを新たにコンパイルしようとすると以下のようなエラーに見舞われたりして、にっちもさっちも行かなくなったということがある。

コンパイルの様子
wget https://apache.org/dyn/closer.lua/guacamole/1.6.0/source/guacamole-server-1.6.0.tar.gz?action=download -O guacamole-server-1.6.0.tar.gz
ls
# -rw-r--r--⠀userName⠀1252749⠀Jun 20 06:50:32⠀⠀guacamole-server-1.6.0.tar.gz

tar xfv guacamole-server-1.6.0.tar.gz
cd guacamole-server-1.6.0
ls
# -rw-r--r--⠀userName ⠀Jun 20 06:46:07⠀⠀aclocal.m4  
# drwxr-xr-x⠀userName  ⠀Jun 20 06:48:29⠀⠀bin/        
# drwxr-xr-x⠀userName  ⠀Jun 20 06:48:29⠀⠀build-aux/  
# -rw-r--r--⠀userName  ⠀Jun 20 06:46:08⠀⠀config.h.in 
# -rwxr-xr-x⠀userName 20 06:46:08⠀⠀configure*  
# -rw-r--r--⠀userName ⠀Jun 17 07:52:47⠀⠀configure.ac
# -rw-r--r--⠀userName  ⠀May 11 13:21:40⠀⠀CONTRIBUTING
# drwxr-xr-x⠀userName  ⠀Jun 20 06:48:29⠀⠀doc/        
# -rw-r--r--⠀userName  ⠀Jun 17 07:52:47⠀⠀Dockerfile  
# -rw-r--r--⠀userName ⠀May 11 13:21:40⠀⠀LICENSE     
# drwxr-xr-x⠀userName  ⠀Jun 20 06:48:29⠀⠀m4/         
# -rw-r--r--⠀userName  ⠀Dec  6 13:04:36⠀⠀Makefile.am 
# -rw-r--r--⠀userName ⠀Jun 20 06:46:08⠀⠀Makefile.in 
# -rw-r--r--⠀userName   ⠀May 11 13:21:40⠀⠀NOTICE      
# -rw-r--r--⠀userName  ⠀Dec  4 12:58:44⠀⠀README      
# drwxr-xr-x⠀userName  ⠀Jun 20 06:48:29⠀⠀src/        
# drwxr-xr-x⠀userName  ⠀Jun 20 06:48:29⠀⠀util/    

./configure
# ...
# configure: WARNING:
#   --------------------------------------------
#    Unable to find libwebsockets.
#    Support for Kubernetes will be disabled.
#   --------------------------------------------
# ...
# ------------------------------------------------
# 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: no
# 
# Type "make" to compile guacamole-server.
# 

make
# make  all-recursive
# make[1]: ディレクトリ '/home/userName/work/test1/guacamole-server-1.6.0' に入ります
# Making all in src/libguac
# make[2]: ディレクトリ '/home/userName/work/test1/guacamole-server-1.6.0/src/libguac' に入ります
# Making all in .
# make[3]: ディレクトリ '/home/userName/work/test1/guacamole-server-1.6.0/src/libguac' に入ります
#   CC       libguac_la-argv.lo
#   CC       libguac_la-audio.lo
# In file included from raw_encoder.h:23,
#                  from audio.c:28:
# ../../config.h:290:9: error: '_XOPEN_SOURCE' redefined [-Werror]
#   290 | #define _XOPEN_SOURCE 700
#       |         ^~~~~~~~~~~~~
# In file included from /usr/include/unistd.h:25,
#                  from guacamole/socket-fntypes.h:31,
#                  from guacamole/socket.h:31,
#                  from guacamole/client-fntypes.h:33,
#                  from guacamole/client.h:29,
#                  from audio.c:24:
# /usr/include/features.h:234:10: note: this is the location of the previous definition
#   234 | # define _XOPEN_SOURCE  800
#       |          ^~~~~~~~~~~~~
# cc1: all warnings being treated as errors
# make[3]: *** [Makefile:824: libguac_la-audio.lo] エラー 1
# make[3]: ディレクトリ '/home/userName/work/test1/guacamole-server-1.6.0/src/libguac' から出ます
# make[2]: *** [Makefile:1214: all-recursive] エラー 1
# make[2]: ディレクトリ '/home/userName/work/test1/guacamole-server-1.6.0/src/libguac' から出ます
# make[1]: *** [Makefile:551: all-recursive] エラー 1
# make[1]: ディレクトリ '/home/userName/work/test1/guacamole-server-1.6.0' から出ます
# make: *** [Makefile:471: all] エラー 2

今回試したこと

 今回試したことには、以下の項目がある。最終的に強硬コンパイル案が動く結果となった。

詳細な説明

 guacamole/guacd - Docker Imageの docker イメージを使う案では、最新のイメージでは、事前に環境構築された物を使っているはずにもかかわらず、動的ライブラリの配置がおかしくSupport for protocol "rdp" is not installedと出てきて、正しい動的ライブラリをLD_LIBRARY_PATH=/opt/guacamole/libとして明示するまで正しく動作しなかった。具体的には以下のようにして、guacdを再起動するような形態を取って無理やり動かした。

# ログを出したいだけなら、guacamole/guacd を起動したあと、一旦 guacd を kill して一定時間ポートが利用可能になるまで待ち、guacd がバックグランドで実行されないよう -f を指定することで実現できる。
# docker ps
# docker exec [コンテナID] pkill guacd; sleep 20; guacd -f

# これはコンテナが即座に終了してしまい、うまく動かない
# docker ps 
# docker exec -it [コンテナID] sh -c "pkill guacd; sleep 20; env LD_LIBRARY_PATH=/opt/guacamole/lib guacd -f -L debug"

# 以下は "pkill guacd; sleep 20; env LD_LIBRARY_PATH=/opt/guacamole/lib guacd -f -L debug" を参考として Gemini fast 3 にコマンドを吐かせた例。
docker run -it --rm \
  -e LD_LIBRARY_PATH=/opt/guacamole/lib \
  guacamole/guacd:1.6.0 \
  /bin/sh -c "/opt/guacamole/sbin/guacd -f -L debug"

 ちなみに、docker コンテナ版guacdバックエンドはどうあがいても動きそうで動かないって感じで、どんなセキュリティタイプを試しても、RDP server closed/refused connection: Server refused connection (wrong security type?)と言われ結局今回は動かなかった。バージョンを 1.5.x をランダムに試しても似たような症状が見受けられ、古いバージョンと新しいバージョンの違いは、古いバージョンの docker guacd コンテナは動的ライブラリパスを細工しなくてもとりあえず Support for protocol "rdp" is not installed と言われずにその点については動くということでしかなかった。

docker ps
docker exec [コンテナID] pkill guacd; sleep 20; guacd -f
# guacd[1]: INFO:	Creating new client for protocol "rdp"
# guacd[1]: INFO:	Connection ID is "$1af0c6b9-bb78-4d92-b044-ffc94251fe4d"
# guacd[3934]: INFO:	Security mode: TLS
# guacd[3934]: INFO:	Resize method: none
# guacd[3934]: INFO:	No clipboard line-ending normalization specified. Defaulting to preserving the format of all line endings.
# guacd[3934]: INFO:	User "@d7a9fe67-cff0-4429-ae09-a62465e910c3" joined connection "$1af0c6b9-bb78-4d92-b044-ffc94251fe4d" (1 users now present)
# guacd[3934]: INFO:	Local system reports 32 processor(s) are available.
# guacd[3934]: INFO:	Graphical updates will be encoded using 32 worker thread(s).
# guacd[3934]: INFO:	Loading keymap "base"
# guacd[3934]: INFO:	Loading keymap "en-us-qwerty"
# guacd[3934]: INFO:	RDP server closed/refused connection: Server refused connection (wrong security type?)
# guacd[3934]: INFO:	User "@d7a9fe67-cff0-4429-ae09-a62465e910c3" disconnected (0 users remain)
# guacd[3934]: INFO:	Last user of connection "$1af0c6b9-bb78-4d92-b044-ffc94251fe4d" disconnected
# guacd[1]: INFO:	Connection "$1af0c6b9-bb78-4d92-b044-ffc94251fe4d" removed.

試したことや説明

 前提として以下のパッケージを明示的にインストールする。

yay -S openssl-1.1 freerdp2

 はっきりとこれらのパッケージが今回の問題の原因かわかっていないが、いくつか心当たりがある点がある。

心当たりがある点の説明

 openssl-1.1についてはこの記事を書いた初期においては、消していなかったが、つい最近アップグレード事にコンパイルに時間がかかっていて、邪魔そうだったからアップグレード時に片付けとして消したということがあった。それで、Google Gemini Fast 3 に色々今回の問題について具体的に何が起こっているか投げつけていると、Guacamole が新しい OpenSSL 3.0 を対応していないという説を出してきていて、確かに RDP では通信内容の暗号化関連で SSL 周りの問題は有り得そうなことから、インストールし直した経緯があった。

 freerdp2については、消したりインストールした自覚がないが、この記事を書き始めた当初においては、なにかのパッケージの依存関係として存在していた可能性があった。現在 AUR において、freerdp はメジャーバージョンが 3 以上になっている。(Arch Linux - freerdp 2:3.24.2-1 (x86_64)) この点についても、Google Gemini Fast 3 は Guacamole において互換性の問題があるとして、トラブルシュートの最中にインストールした。私的には、コンパイル時に共有されている/usr/include配下のパッケージマネージャによって管理されているであろう、ヘッダファイルがコンパイルエラーの理由として出てくるところも確かに、freerdp と Guacamole の相性問題が出ている事を示唆しているようにも見える。

make
# ...
# ../../config.h:290:9: error: '_XOPEN_SOURCE' redefined [-Werror]
#   290 | #define _XOPEN_SOURCE 700
#       |         ^~~~~~~~~~~~~
# In file included from /usr/include/unistd.h:25,
#                  from guacamole/socket-fntypes.h:31,
#                  from guacamole/socket.h:31,
#                  from guacamole/client-fntypes.h:33,
#                  from guacamole/client.h:29,
#                  from audio.c:24:
# /usr/include/features.h:234:10: note: this is the location of the previous definition
#   234 | # define _XOPEN_SOURCE  800
#       |          ^~~~~~~~~~~~~
# ...

 次に、コンパイルを行う。既に Guacamole-Server のソースコードについてダウンロードや展開を行い、展開されたフォルダ内に移動している事を想定する。

# 以下は Gemini Fast 3 の提案
export CPPFLAGS="-U_XOPEN_SOURCE -D_XOPEN_SOURCE=700"
./configure --with-rdp CFLAGS="-Wno-error"
make install

 これで、再びguacd-が必要な動的ライブラリを読み込めていないの手順に従うと、動くことが確認できた。試行錯誤の過程で存在する動作に影響を与えるような重要なポイントについていくつか書き漏らしている気もするが、思い出せる範囲だとこんなところであった。

おまけ

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

具体的な 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がその時には登場するのだろうか。。。

参考にしたサイトとか