2022/07/31(日) [n年前の日記]
#1 [ruby] ruby-gtk2がWindows10上で動かない
ruby-gtk2 (Ruby-GNOME2?) がWindows10 x64 21H2上で動かなくて悩んでいるところ。環境は、RubyInstaller版の Ruby 2.3.3 x86、Ruby 2.6.10 x86、Ruby 3.0.4 x86。
_RubyInstaller for Windows
_RubyGems.org
結論を先に書くと、上記の環境では ruby-gtk2 をインストールすることができなかった。ただ、Ruby 1.8.7 x86 + gtk2 なら、かろうじてインストールできた。
_RubyInstaller for Windows
_RubyGems.org
結論を先に書くと、上記の環境では ruby-gtk2 をインストールすることができなかった。ただ、Ruby 1.8.7 x86 + gtk2 なら、かろうじてインストールできた。
◎ ruby-gtk2を動かしたい理由。 :
どうして ruby-gtk2 を動かそうとしているのかというと、ruby-gtk2 を使えば xscreensaver用のスクリーンセーバを書けそうだなと思いついたから。
ここ数日、Python を使って xscreensaver用のスクリーンセーバを書けないものかと試行錯誤していたのだけど、Python + PyGTK で書かれた雛形ソースは存在するものの、Python + PyGObject で書かれたものは見当たらなくて手詰まりになっていて。
_A Python screensaver for xscreensaver (Linux) | alvinalexander.com
今時の Linux は、Python から GTK2 を制御するモジュール、PyGTK を本気で殺しにかかっていて、各ディストリの公式リポジトリにパッケージが用意されてない上に、「PyGTK を使っているPythonスクリプトは GTK3 を制御する PyGObject で書き直せ」という風潮にもなっている。しかし、自分の知識では、前述のスクリプトを PyGObject を使った形に書き直すことができず…。
何かヒントが無いかとググっていたら、ruby-gtk2 を使って xscreensaver用のスクリーンセーバを書いてる事例を見かけたわけで。
_zhum/rubysaver: Xscreensaver module, displaying weather, forecast, clock and now playing song title and author.
「そうか。Python がダメなら Ruby と GTK2 を使えばいいんじゃん」と気づいたわけで。できればメジャーな Python を使って書きたかったけれど、マイナーな Ruby を使ったとしても C/C++ で書くより随分と楽になるはずだよなと。
しかし…。まずは Windows10 上で ruby-gtk2 を勉強すべく環境を整えようとしたところ、そもそも ruby-gtk2 のインストールすらできない状態になっていることに気づいたという…。
ここ数日、Python を使って xscreensaver用のスクリーンセーバを書けないものかと試行錯誤していたのだけど、Python + PyGTK で書かれた雛形ソースは存在するものの、Python + PyGObject で書かれたものは見当たらなくて手詰まりになっていて。
_A Python screensaver for xscreensaver (Linux) | alvinalexander.com
今時の Linux は、Python から GTK2 を制御するモジュール、PyGTK を本気で殺しにかかっていて、各ディストリの公式リポジトリにパッケージが用意されてない上に、「PyGTK を使っているPythonスクリプトは GTK3 を制御する PyGObject で書き直せ」という風潮にもなっている。しかし、自分の知識では、前述のスクリプトを PyGObject を使った形に書き直すことができず…。
何かヒントが無いかとググっていたら、ruby-gtk2 を使って xscreensaver用のスクリーンセーバを書いてる事例を見かけたわけで。
_zhum/rubysaver: Xscreensaver module, displaying weather, forecast, clock and now playing song title and author.
「そうか。Python がダメなら Ruby と GTK2 を使えばいいんじゃん」と気づいたわけで。できればメジャーな Python を使って書きたかったけれど、マイナーな Ruby を使ったとしても C/C++ で書くより随分と楽になるはずだよなと。
しかし…。まずは Windows10 上で ruby-gtk2 を勉強すべく環境を整えようとしたところ、そもそも ruby-gtk2 のインストールすらできない状態になっていることに気づいたという…。
◎ ruby-gtk2のインストールができない。 :
再度書くけど、環境は Windows10 x64 21H2 + Ruby 2.3.3、2.6.10、3.0.4 x86。
_gtk2 | RubyGems.org
ただ、日記を検索したら、昔は Windowsでも ruby-gtk2 のインストールができて、かつ、動作していたようでもあり…。
_2018/02/27 Ruby-GNOME2を試用
_2019/04/20 green_shoes を動かせないか試したり
2018年、2019年頃なら、Ruby 2.3.3 p222 x86 上で、gtk2 3.2.1、glib2 3.2.1、cairo 1.15.11 x86-mingw32版をインストールできていた模様。x86-mingw32 の記述があるパッケージはバイナリ(.soファイル)も含まれているから、msys2 でビルドしなくて済むし、インストール時にエラーも出なかったのだろう。たぶん。
であれば、バージョンと platform を指定すればインストールできるのではないかと、Ruby 2.3.3 p222 x86上で試してみたのだけど。
何故か、最後の3つ、cairo-gobject、pango、gtk2 のインストール時に、cairo 1.17.6 をビルド + インストールしようとしてエラーが出てしまう。既に cairo 1.15.11 をインストールしてあるから、cairo 1.17.6 のビルドはしなくてもよさそうなものだけど…。
であればと、rubygems から、バージョン 3.2.1 の 各 .gem をWebブラウザ経由でダウンロードして、ローカルでインストールしてみたところ、そのやり方ならインストールはできた。
しかし、動作確認してみたら別の問題が発生。require "cairo" をすると、「LoadError: cannot load such file -- cairo.so」とエラーが出る…。
cairo-1.15.11-x86-mingw32/lib/ 以下に、2.3/cairo.so はあるのだけどな…。何にせよ、require "gtk2" をした時も「cairo.so が読み込めない」とエラーが出てしまうので、これでは ruby-gtk2 が使えない。
Ruby本体がおかしくなっているのかと疑って、Ruby 2.3.3 p222 x86 をアンインストール・再インストールして、その後、ローカルに保存した .gem を順々にインストールして再度動作確認してみたけれど、やはり cairo.so が読み込めないと言ってくる。うーん。
ちなみに、Ruby 2.3.3 のインストールは以前のメモを参考にして作業した。
_Windows10上で Ruby 2.3.3 をインストールしようとして少しハマった
余談。Ruby 2.6.10 x86 上で gem install cairo をしたところ、cairo 1.17.6 のビルドに成功してインストールできたように見えた。require "cairo" もできている。ただ、Ruby 2.6.10 は gtk2 のビルドでエラーを出してインストールできないのだけど…。
Debian Linux の ruby-gtk2 パッケージを確認したら 3.4.3 を配布しているように見えた。ひょっとすると 3.4.3 ならインストールできるのではないかと思えてきた。そこで、Ruby 2.6.10 x86 上で、glib2 や gtk2 に対して -v 3.4.3 を指定してインストールを試みてみた。
しかし、最後の最後、gtk2 3.4.3 のビルドでエラーが大量に出てしまう。やはり Windows10 上で ruby-gtk2 のインストールはできない模様。
_gtk2 | RubyGems.org
- Ruby 2.6.10 p210 i386-minge32 で gem install gtk2 をしたら msys2利用のビルド時にエラーが出る。
- Ruby 3.0.4 p208 i386-mingw32 でも同様。
- Ruby 2.3.3 p222 i386-mingw32 でも同様。最新版はビルド時にエラーが出る。
ただ、日記を検索したら、昔は Windowsでも ruby-gtk2 のインストールができて、かつ、動作していたようでもあり…。
_2018/02/27 Ruby-GNOME2を試用
_2019/04/20 green_shoes を動かせないか試したり
2018年、2019年頃なら、Ruby 2.3.3 p222 x86 上で、gtk2 3.2.1、glib2 3.2.1、cairo 1.15.11 x86-mingw32版をインストールできていた模様。x86-mingw32 の記述があるパッケージはバイナリ(.soファイル)も含まれているから、msys2 でビルドしなくて済むし、インストール時にエラーも出なかったのだろう。たぶん。
であれば、バージョンと platform を指定すればインストールできるのではないかと、Ruby 2.3.3 p222 x86上で試してみたのだけど。
gem install pkg-config -v 1.2.9 gem install native-package-installer -v 1.0.6 gem install cairo -v 1.15.11 --platform=x86-mingw32 gem install glib2 -v 3.2.1 --platform=x86-mingw32 gem install atk -v 3.2.1 --platform=x86-mingw32 gem install gobject-introspection -v 3.2.1 --platform=x86-mingw32 gem install gio2 -v 3.2.1 --platform=x86-mingw32 gem install gdk_pixbuf2 -v 3.2.1 --platform=x86-mingw32 gem install cairo-gobject -v 3.2.1 --platform=x86-mingw32 gem install pango -v 3.2.1 --platform=x86-mingw32 gem install gtk2 -v 3.2.1 --platform=x86-mingw32
何故か、最後の3つ、cairo-gobject、pango、gtk2 のインストール時に、cairo 1.17.6 をビルド + インストールしようとしてエラーが出てしまう。既に cairo 1.15.11 をインストールしてあるから、cairo 1.17.6 のビルドはしなくてもよさそうなものだけど…。
> gem list | grep cairo cairo (1.15.11 x86-mingw32) > gem install cairo-gobject -v 3.2.1 --platform=x86-mingw32 Temporarily enhancing PATH to include DevKit... Building native extensions. This could take a while... ERROR: Error installing cairo-gobject: ERROR: Failed to build gem native extension. current directory: C:/Ruby/Ruby23-x86/lib/ruby/gems/2.3.0/gems/cairo-1.17.6/ext/cairo C:/Ruby/Ruby23-x86/bin/ruby.exe -I C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0 -r ./siteconf20220731-10340-gvbbgt.rb extconf.rb checking for GCC... yes checking for Homebrew... no checking for cairo version (>= 1.2.0)... no *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=C:/Ruby/Ruby23-x86/bin/$(RUBY_BASE_NAME) --with-pkg-config --without-pkg-config --with-override-variables --without-override-variables To see why this extension failed to compile, please check the mkmf.log which can be found here: C:/Ruby/Ruby23-x86/lib/ruby/gems/2.3.0/extensions/x86-mingw32/2.3.0/cairo-1.17.6/mkmf.log extconf failed, exit code 1 Gem files will remain installed in C:/Ruby/Ruby23-x86/lib/ruby/gems/2.3.0/gems/cairo-1.17.6 for inspection. Results logged to C:/Ruby/Ruby23-x86/lib/ruby/gems/2.3.0/extensions/x86-mingw32/2.3.0/cairo-1.17.6/gem_make.out
であればと、rubygems から、バージョン 3.2.1 の 各 .gem をWebブラウザ経由でダウンロードして、ローカルでインストールしてみたところ、そのやり方ならインストールはできた。
gem install cairo-gobject-3.2.1-x86-mingw32.gem gem install pango-3.2.1-x86-mingw32.gem gem install gtk2-3.2.1-x86-mingw32.gem
しかし、動作確認してみたら別の問題が発生。require "cairo" をすると、「LoadError: cannot load such file -- cairo.so」とエラーが出る…。
> irb irb(main):001:0> require "cairo" LoadError: cannot load such file -- cairo.so from C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:85:in `require' from C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:85:in `require' from C:/Ruby/Ruby23-x86/lib/ruby/gems/2.3.0/gems/cairo-1.15.11-x86-mingw32/lib/cairo.rb:54:in `rescue in <top (required)>' from C:/Ruby/Ruby23-x86/lib/ruby/gems/2.3.0/gems/cairo-1.15.11-x86-mingw32/lib/cairo.rb:50:in `<top (required)>' from C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:160:in `require' from C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:160:in `rescue in require' from C:/Ruby/Ruby23-x86/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb:170:in `require' from (irb):1 from C:/Ruby/Ruby23-x86/bin/irb.cmd:19:in `<main>'
cairo-1.15.11-x86-mingw32/lib/ 以下に、2.3/cairo.so はあるのだけどな…。何にせよ、require "gtk2" をした時も「cairo.so が読み込めない」とエラーが出てしまうので、これでは ruby-gtk2 が使えない。
Ruby本体がおかしくなっているのかと疑って、Ruby 2.3.3 p222 x86 をアンインストール・再インストールして、その後、ローカルに保存した .gem を順々にインストールして再度動作確認してみたけれど、やはり cairo.so が読み込めないと言ってくる。うーん。
ちなみに、Ruby 2.3.3 のインストールは以前のメモを参考にして作業した。
_Windows10上で Ruby 2.3.3 をインストールしようとして少しハマった
余談。Ruby 2.6.10 x86 上で gem install cairo をしたところ、cairo 1.17.6 のビルドに成功してインストールできたように見えた。require "cairo" もできている。ただ、Ruby 2.6.10 は gtk2 のビルドでエラーを出してインストールできないのだけど…。
Debian Linux の ruby-gtk2 パッケージを確認したら 3.4.3 を配布しているように見えた。ひょっとすると 3.4.3 ならインストールできるのではないかと思えてきた。そこで、Ruby 2.6.10 x86 上で、glib2 や gtk2 に対して -v 3.4.3 を指定してインストールを試みてみた。
gem install cairo gem install glib2 -v 3.4.3 gem install atk -v 3.4.3 gem install gobject-introspection -v 3.4.3 gem install gio2 -v 3.4.3 gem install gdk_pixbuf2 -v 3.4.3 gem install cairo-gobject -v 3.4.3 gem install pango -v 3.4.3 gem install gtk2 -v 3.4.3
しかし、最後の最後、gtk2 3.4.3 のビルドでエラーが大量に出てしまう。やはり Windows10 上で ruby-gtk2 のインストールはできない模様。
◎ 何が何でもruby-gtk2を動かす。 :
glib2 や gtk2 のバージョンを色々変えて何度試してもエラーが出てインストールできないので、もはや意地になってきた。何が何でも Windows10上で ruby-gtk2 を動かしてみたい。
もしかすると、Ruby 1.8 + ruby-gtk2 なら動かせるかもしれない…。Ruby 1.8 の時代なら、GTK2のランタイムバイナリも含めた形のセットアップファイルが配布されていたらしいので…。
そんなわけで、Windows10 x64 21H2 + Ruby 1.8.7 mswin32 版上で利用できるか試してみた。Ruby 1.8.7 mswin32 がインストールされている環境で、以下から、ruby-gnome2-0.16.0-1-i386-mswin32.exe を入手する。
_Ruby-GNOME 2 - Browse /ruby-gnome2/ruby-gnome2-0.16.0 at SourceForge.net
ちなみに、この ruby-gnome2-0.16.0-1-i386-mswin32.exe は Ruby 1.8 のみに対応。Ruby 1.9 や 2.x では動かない。Ruby 1.8 用のバイナリしか同梱されてない状態なので…。
一応、ruby-gnome2-0.16.0-1-i386-mswin32.exe を実行した際の、セットアップ画面のスクリーンショットも載せておく。
インストール後、以下を実行できれば gtk2 のインストールは成功している。
Rubyのコマンドラインオプションについては以下が参考になる。
_Rubyの起動 - Rubyリファレンスマニュアル
もしかすると、Ruby 1.8 + ruby-gtk2 なら動かせるかもしれない…。Ruby 1.8 の時代なら、GTK2のランタイムバイナリも含めた形のセットアップファイルが配布されていたらしいので…。
そんなわけで、Windows10 x64 21H2 + Ruby 1.8.7 mswin32 版上で利用できるか試してみた。Ruby 1.8.7 mswin32 がインストールされている環境で、以下から、ruby-gnome2-0.16.0-1-i386-mswin32.exe を入手する。
_Ruby-GNOME 2 - Browse /ruby-gnome2/ruby-gnome2-0.16.0 at SourceForge.net
ちなみに、この ruby-gnome2-0.16.0-1-i386-mswin32.exe は Ruby 1.8 のみに対応。Ruby 1.9 や 2.x では動かない。Ruby 1.8 用のバイナリしか同梱されてない状態なので…。
- 実行すると、GUIでインストールウイザード画面が開く。
- Choose Components 画面では、Ruby-GNOME2 と GTK2 Runtime にチェックを入れて、Register Environment Variables はチェックを外した状態に。
- インストールフォルダは、Ruby 1.8.7 インストールフォルダを指定。(例 : C:\Ruby187 , C:\Ruby\Ruby187p330mswin32 等々)
- 先に進んで、Installボタンをクリックすればインストールされる。
一応、ruby-gnome2-0.16.0-1-i386-mswin32.exe を実行した際の、セットアップ画面のスクリーンショットも載せておく。
インストール後、以下を実行できれば gtk2 のインストールは成功している。
> ruby -r gtk2 -e "p Gtk::VERSION" [2, 10, 6]
Rubyのコマンドラインオプションについては以下が参考になる。
_Rubyの起動 - Rubyリファレンスマニュアル
[ ツッコむ ]
以上です。