試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

FirefoxのIrvine用コンテキストメニュー拡張をGNU/Linux上で使用

Windows上でFirefoxから外部ダウンローダIrvineコンテキストメニューからダウンロード登録などを行うことのできる「Irvineコンテキストメニュー拡張」という拡張がある。もちろん、IrvineWindows用アプリケーションなのでIrvine自体もこの拡張もGNU/Linux上では基本的には使えないのだが、これをWine上のIrvineに対して(Wine上の)Win32版FirefoxGNU/Linuxネイティブ版Firefoxのそれぞれから試してみた。

  1. Windows版Firefoxから使用
    1. 準備作業メモ
    2. 拡張の設定
    3. 結果
  2. GNU/Linuxネイティブ版のFirefoxから使用
    1. 準備
    2. 拡張のダウンロード/インストール
    3. ircom.exeのラッパースクリプトを用意
    4. 挙動について

WindowsFirefoxから使用

Irvine専用のWine環境[ホームディレクトリ]/.wine-irvineを用意してその中にWin32版FirefoxIrvineをインストールして試してみた。

準備作業メモ

(Wine環境の作成と設定)
$ WINEPREFIX=~/.wine-irvine regedit [好みの初期設定向けレジストリ...]
(Firefoxのインストール)
$ WINEPREFIX=~/.wine-irvine wine "[Firefox Setup [バージョン].exeの場所]"
(Irvineのインストール)
$ cd ~/.wine-irvine/dosdevices/c:/Program\ Files/
$ unzip [irvine1_3_0.zipの場所]
(Irvineの設定・一度起動して設定用データ保存場所やダウンロード先などを設定後閉じる)
$ WINEPREFIX=~/.wine-irvine wine "C:\Program Files\irvine1_3_0\irvine.exe"
(Firefoxの起動)
$ WINEPREFIX=~/.wine-irvine wine "C:\Program Files\Mozilla Firefox\firefox.exe" &

今回指定したレジストリinfファイルを使用せずに非対話的にレジストリの操作を行うに貼り付けたfont-replace-ipamona-msgothic_msmincho.regWine 1.1.12におけるフォントのサブピクセルレンダリングについてに貼り付けたsubpixel.regの2つ。

拡張の設定
拡張の設定には「ircom.exeのパス」という入力欄があり、ここでIrvineディレクトリにあるircom.exeの場所を指定する。上の準備作業の流れでは

C:\Program Files\irvine1_3_0\ircom.exe

という場所となった。

結果
Firefoxで「Irvine」以下のコンテキストメニュー項目を選択すると

  • そのときにIrvineが動作していない場合: 下のメッセージとダイアログが出つつIrvineが起動する
  • そのときにIrvineが動作している場合: 選択された項目によっては正常に処理される

という挙動となった。下は項目選択時にIrvineが動いていないときの端末へのメッセージ。

(Firefox起動時)
fixme:system:SetProcessDPIAware stub!                                 
fixme:iphlpapi:NotifyAddrChange (Handle 0xdfe94c, overlapped 0xdfe928): stub
fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
err:ole:CoGetClassObject class {591209c7-767b-42b2-9fba-44ee4615f2c7} not registered
err:ole:CoGetClassObject class {591209c7-767b-42b2-9fba-44ee4615f2c7} not registered
err:ole:CoGetClassObject no class object {591209c7-767b-42b2-9fba-44ee4615f2c7} could be created for context 0x3
fixme:resource:GetGuiResources (0xffffffff,0): stub
fixme:font:ExtTextOutW flags ETO_NUMERICSLOCAL | ETO_NUMERICSLATIN | ETO_PDY unimplemented
fixme:imm:ImmReleaseContext (0x3003a, 0x13d0e0): stub
err:ole:CoGetClassObject class {4125dd96-e03a-4103-8f70-e0597d803b9c} not registered
err:ole:CoGetClassObject class {4125dd96-e03a-4103-8f70-e0597d803b9c} not registered
err:ole:CoGetClassObject no class object {4125dd96-e03a-4103-8f70-e0597d803b9c} could be created for context 0x3

(「Irvineでダウンロード」選択時)
fixme:time:GetCalendarInfoW Unimplemented caltype 4
fixme:time:GetCalendarInfoW Unimplemented caltype 3
fixme:time:GetCalendarInfoW Unimplemented caltype 4
fixme:time:GetCalendarInfoW Unimplemented caltype 3
fixme:ole:CoResumeClassObjects stub
fixme:time:GetCalendarInfoW Unimplemented caltype 4
fixme:time:GetCalendarInfoW Unimplemented caltype 3
fixme:ras:RasEnumEntriesA ((nil),(null),0x8e96fc,0x8efe24,0x8efe20),stub!
fixme:win:LockWindowUpdate (0x10020), partial stub!
fixme:win:LockWindowUpdate ((nil)), partial stub!
fixme:win:LockWindowUpdate (0x10020), partial stub!
fixme:win:LockWindowUpdate ((nil)), partial stub!
fixme:win:LockWindowUpdate (0x10020), partial stub!
fixme:win:LockWindowUpdate ((nil)), partial stub!
err:ole:ITypeInfo_fnInvoke failed to convert param 1 to VT_I4 from VT_BSTR
err:ole:ITypeInfo_fnInvoke did not find member id 16, flags 0xc!

下はダイアログの文字。

EOleSysError
OLE エラー 80020003
Irvine.Api
[操作に応じた「Download」などの文字列]

Irvineを一度起動しておいてからシステムトレイに入れっぱなしにしておけばそれほど問題ではない気もする。*1
動作しなかった項目は「IrvineへすべてのURLを送る」で、「IMGを含む」付きも同様。

GNU/Linuxネイティブ版のFirefoxから使用

上でWin32版Firefoxから試している内に偶然「コマンドライン引数でFirefoxからURLなどを渡しているだけ」ということが分かったので、うまくWine上のIrvineと「つなぐ」ことができればGNU/Linuxネイティブ版のFirefoxからもこの拡張が使用できるのではないかと思い、試してみた。

準備
専用のWine環境[ホームディレクトリ]/.wine-irvneを用意してその中にIrvineを展開する。Win32版Firefoxを入れない点を除いて上と同様(具体的な作業は略)。今回は上で作成したWine環境をそのまま使用した。

拡張のダウンロード/インストール
拡張のダウンロードとインストールは

https://addons.mozilla.org/ja/firefox/addon/irvine-contextmenu/versions/

から行う。このページではGNU/LinuxFirefoxでのインストールも行える。

ircom.exeのラッパースクリプトを用意
上でも少し触れたが、「Irvineコンテキストメニュー拡張」は、指定した外部プロセスを幾つかの引数を付けて実行し処理をIrvineに丸投げしているだけなので、直接FirefoxとWin32固有なやりとりをしているわけではない。そこで、Wine環境のIrvineディレクトリにあるircom.exeに処理を渡すためのラッパースクリプトを作成することにした。
[任意]ファイル名: ~/bin/ircom.sh

#! /bin/sh
WINEPREFIX=~/.wine-irvine wine "C:\Program Files\irvine1_3_0\ircom.exe" ${@}

このスクリプトの属性を実行可能にした後でこのスクリプトの場所(パス)を拡張の設定にある「ircom.exeのパス」に入力する。[ホームディレクトリ]/bin/ircom.shとして保存した場合は

~/bin/ircom.sh

となる。ホームディレクトリは「~」でOK。
「参照」ボタンから開いて設定したいのであればスクリプトのファイル名をircom.exeにすることもできるが、おすすめはしない。

挙動について
予想通り、この場合の挙動も上のWin32版Firefoxを使用した場合と同一となった。つまり、GNU/LinuxFirefoxからWine上のIrvineにURLを渡す処理は(条件や操作によってOLEエラーが出るので完全とは言えないが)大部分が正常に行われる。Windowsでこの拡張を使用していたユーザがGNU/Linuxを使う際に役に立つかもしれない。

使用したバージョン:

*1:ただし、システムトレイアイコンのメニューを出してから他のところをクリックするとメニューが残ってしまうことがある