ラベル Wine の投稿を表示しています。 すべての投稿を表示
ラベル Wine の投稿を表示しています。 すべての投稿を表示

2022-08-01

Linux 上で Windows アプリのインストーラ作成

Wine は、オープンソースの Windows API 実装を通じて、主として x86 アーキテクチャ上の Unix 系オペレーティングシステム(POSIX 準拠 OS)において Windows 用アプリケーションをネイティブ動作させることを目標とするプログラム群です。X Window System を利用して、16 / 32 / 64 ビット Windows 向け GUI アプリケーションを動作させることができるほか、MS-DOS 用アプリケーションも動作します

Wikipedia より引用、編集

インストーラ無しで配布されている、とある Windows アプリに対して、Inno Setup を利用してインストーラを作ろうとしたのですが、事情があってこのケースでは Windows PC 上に Inno Setup をインストールできません。やむなく Linux 上の Wine の環境で Inno Setup を動かして、Windows アプリのインストーラを作成しました。

なお Inno Setup は、Jordan Russell 氏によって開発されたフリーソフトウェアのスクリプト駆動型の Windows 向けインストーラ作成システムです [1]

インストーラを作成する際、Inno Setup で使用するスクリプト(.iss が拡張子のファイル。以降、iss ファイルと呼びます。)を用意する必要があるのですが、アプリのファイル数が膨大だったので、手作業ではとてもできません。もちろん *(アスタリスク)でワイルドカード指定はできますが、管理上、使用したくありません。

そこで、Inno Setup を Wine 上で動作させることを前提に、iss ファイルを作成する GUI プログラム (innosetup_utils) を Python/PySide6 で作りました。

下記の環境で動作確認をしています。

Fedora Linux 36 x86_64
wine 7.12-2.fc36.x86_64
Inno Setup 6.2.1 (innosetup-6.2.1.exe)
python3 3.10.5-2.fc36.x86_64
PySide6 6.3.1

このプログラム (innosetup_utils) は、Linux 上で動作するのですが、生成した iss ファイルを Wine で起動した Inno Setup で使用するので、ドライブ番号 Z にあるものとして処理し、さらにパスの区切りを / から \ に変更する必要があります。

Wine から見た Linux のファイルシステムのドライブ番号

Windows アプリのフォルダと必要事項を入力すれば、インストール作成に必要な iss ファイルを出力してくれます。

innosetup_utils の実行例

Inno Setup を起動、作成した iss ファイルを読み込んでコンパイルすれば、対象の Windows アプリのインストーラが出来上がります。

Inno Setup でインストーラ作成(コンパイル)例
Inno Setup 用の iss ファイルと作成してコンパイラ例

作成したインストーラは、Wine 上で動作確認をすることができます。ただし、対象の Windows アプリが Wine 上で動作するかどうかは別の話です。😅

作成したインストーラを Wine で起動した例

こんなマイナーな用途のプログラムですが、Github にレポジトリを作りました。

現在のところ、このプログラム (innosetup_utils) には最低限の機能しかありませんが、マイナーな用途とは言え、個人的にはニーズがあるので、すこしずつ使い勝手の良いものに改善していくつもりです。

参考サイト

  1. Inno Setup

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村
このエントリーをはてなブックマークに追加

2020-08-22

Vala と Meson とクロスコンパイル (2)

Meson /ˈmɛːsɒn/ は、ビルド自動化のためのソフトウェアです。Meson は直接ソフトウェアをビルドするのではなく、Linux では Ninja のビルドファイルを生成します。

今回は、Linux 上で Meson を使ってビルドするプログラムを、Windows 上でも使えるように Linux 上でクロスコンパイル、必要なランタイムライブラリ (DLL) などを抽出してパッケージにして、Windows 10 上で動作確認をした例を紹介します。

使用した OS 環境は下記の通りです。

Fedora Workstation 32 x86_64
Windows 10 Home (x64) 1909, 18363.1016

インストールの詳細は割愛しますが、プログラムのビルドには Meson, Vala, Wine が使えることに加えて、mingw-w64(以下、MinGW64)のクロスコンパイル環境が使えることを前提としています。

sudo dnf install mingw64-* で MinGW64 の関係パッケージを全部インストールして、約 3GB です。

Vala の電卓プログラム

いつも同じプログラムをサンプルにしていて申し訳ありませんが、今回も github にある下記の Vala の電卓プログラムをサンプルとして使用します。

具体的には次のようにしてクローンし、クローンしたディレクトリ vala-calculator で作業をすることにします。

[bitwalk@fedora-pc Projects]$ git clone https://github.com/bitwalk123/vala-calculator.git
Cloning into 'vala-calculator'...
remote: Enumerating objects: 88, done.
remote: Counting objects: 100% (88/88), done.
remote: Compressing objects: 100% (67/67), done.
remote: Total 88 (delta 39), reused 66 (delta 17), pack-reused 0
Receiving objects: 100% (88/88), 93.16 KiB | 307.00 KiB/s, done.
Resolving deltas: 100% (39/39), done.
[bitwalk@fedora-pc Projects]$ cd vala-calculator
[bitwalk@fedora-pc vala-calculator]$ ls
LICENSE  README.md  calc.ico  calc.rc  data  meson.build  mingw64.ini  vala-calculator.vala
[bitwalk@fedora-pc vala-calculator]$ 

Meson でクロスビルド

クロスビルドとインストール

次のようにビルドして、ユーザーアカウント内の $HOME/Builds へインストールします。

[bitwalk@fedora-pc vala-calculator]$ meson --cross-file mingw64.ini builddir
The Meson build system
Version: 0.55.0
Source dir: /home/bitwalk/Projects/vala-calculator
Build dir: /home/bitwalk/Projects/vala-calculator/builddir
Build type: cross build
Project name: Vala Calculator
Project version: 0.1.1
C compiler for the build machine: ccache cc (gcc 10.2.1 "cc (GCC) 10.2.1 20200723 (Red Hat 10.2.1-1)")
C linker for the build machine: cc ld.bfd 2.34-4
Vala compiler for the build machine: valac (valac 0.48.9)
002c:fixme:winediag:__wine_start_process Wine Staging 5.15 is a testing version containing experimental patches.
002c:fixme:winediag:__wine_start_process Please mention your exact version when filing bug reports on winehq.org.
C compiler for the host machine: x86_64-w64-mingw32-gcc (gcc 9.2.1 "x86_64-w64-mingw32-gcc (GCC) 9.2.1 20190827 (Fedora MinGW 9.2.1-6.fc32)")
C linker for the host machine: x86_64-w64-mingw32-gcc ld.bfd 2.32
Vala compiler for the host machine: valac (valac 0.48.9)
Build machine cpu family: x86_64
Build machine cpu: x86_64
Host machine cpu family: x86_64
Host machine cpu: x86_64
Target machine cpu family: x86_64
Target machine cpu: x86_64
Found pkg-config: /bin/x86_64-w64-mingw32-pkg-config (0.28)
Run-time dependency glib-2.0 found: YES 2.63.5
Run-time dependency gobject-2.0 found: YES 2.63.5
Run-time dependency gtk+-3.0 found: YES 3.24.13
Library m found: YES
Windows resource compiler: GNU windres version 2.32-%{release}
Build targets in project: 3

Found ninja-1.10.0 at /bin/ninja
[bitwalk@fedora-pc vala-calculator]$ DESTDIR=$HOME/Builds/vala-calculator ninja -C builddir install
ninja: Entering directory `builddir'
[7/8] Installing files.
Installing libcalculator.dll to /home/bitwalk/Builds/vala-calculator/usr/local/bin
Installing libcalculator.dll.a to /home/bitwalk/Builds/vala-calculator/usr/local/lib
Installing calculator.h to /home/bitwalk/Builds/vala-calculator/usr/local/include
Installing calculator-1.0.vapi to /home/bitwalk/Builds/vala-calculator/usr/local/share/vala/vapi
Installing calculator.exe to /home/bitwalk/Builds/vala-calculator/usr/local/bin
[bitwalk@fedora-pc vala-calculator]$ 

ランタイムライブラリなどのファイル抽出

関連する DLL ファイル、RPM ファイルなどの確認方法

objdump を使えば、ビルドしたプログラム calculator.exe に関連している DLL ファイル(ランタイム)を調べることができます。DLL ファイルのフルパスが判れば、どの RPM パッケージに含まれているかを調べることができます。RPM パッケージ名が判れば、パッケージに含まれるファイルのリストを取得できます。このようにして、Windows 上で動作させるにはどのファイルをコピーすれば良いかを探索することができます。

[bitwalk@fedora-pc bin]$ objdump -p calculator.exe | grep DLL
 vma:            Hint    Time      Forward  DLL       First
 DLL Name: KERNEL32.dll
 DLL Name: msvcrt.dll
 DLL Name: libglib-2.0-0.dll
 DLL Name: libgobject-2.0-0.dll
 DLL Name: libgtk-3-0.dll
[bitwalk@fedora-pc bin]$ ls /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libglib-2.0-0.dll
/usr/x86_64-w64-mingw32/sys-root/mingw/bin/libglib-2.0-0.dll
[bitwalk@fedora-pc bin]$ rpm -qf /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libglib-2.0-0.dll
mingw64-glib2-2.63.5-2.fc32.noarch
[bitwalk@fedora-pc bin]$ rpm -ql mingw64-glib2-2.63.5-2.fc32.noarch
/usr/share/licenses/mingw64-glib2
/usr/share/licenses/mingw64-glib2/COPYING
/usr/x86_64-w64-mingw32/sys-root/mingw/bin/gdbus.exe
/usr/x86_64-w64-mingw32/sys-root/mingw/bin/gio-querymodules.exe
/usr/x86_64-w64-mingw32/sys-root/mingw/bin/gio.exe
...
(以下省略)
...

DLL Explorer の使用

実際には、DLL ファイルが更に他の DLL を参照していることが多いので、再帰的に調べる必要があります。これを手作業でおこなうと、途方もない時間がかかりそうですので、Python / GObject で簡単な GUI プログラムを作って処理を自動化しました。

作ったばかりのプログラムで、例外処理などに全然対応できていませんが、ひととおりの動作はしますので、これを使って Windows 上で動作させるパッケージの作成を紹介します。

次のようにクローンして起動します。Python では GObject が使えることを前提としています。

[bitwalk@fedora-pc Projects]$ git clone https://github.com/bitwalk123/dllexplorer.git
Cloning into 'dllexplorer'...
remote: Enumerating objects: 80, done.
remote: Counting objects: 100% (80/80), done.
remote: Compressing objects: 100% (61/61), done.
remote: Total 80 (delta 34), reused 58 (delta 16), pack-reused 0
Receiving objects: 100% (80/80), 44.04 KiB | 256.00 KiB/s, done.
Resolving deltas: 100% (34/34), done.
[bitwalk@fedora-pc Projects]$ cd dllexplorer
[bitwalk@fedora-pc dllexplorer]$ ls
LICENSE  README.md  dllexplorer.css  dllexplorer.py  img  module
[bitwalk@fedora-pc dllexplorer]$ python dllexplorer.py

dllexplorer.py を起動して、Application root (source) に、さきほどインストールした vala-calculator のディレクトリ (/home/bitwalk/Builds/vala-calculator) を指定、Package root (destination) に、パッケージ作成するディレクトリ (/home/bitwalk/Packages) を指定します。パッケージ作成先のルートは、インストールしたディレクトリと同じ vala-calculator が設定されます。

dllexplorer を起動して、必要な情報を設定

「スタート」ボタンをクリックすると、情報を収集して、/home/bitwalk/Packages/vala-calculator 内にコピーし、ツリー構造を GUI に表示します。

dllexplorer が、関連するファイルを指定先にコピー

Windows 上で動作確認

出来上がった /home/bitwalk/Packages/vala-calculator を圧縮するなりして Windows へコピーします。

Windows 上へコピーした圧縮ファイル vala-calculator.zip

簡単なプログラムなのに、ランタイムなどを含めると、圧縮した vala-calculator.zip で 35MB、解凍すると 100MB 程度にもなります。もうすこしコンパクトにまとめられないかは、今後の検討課題とします。

解凍後の vala-calculator/bin フォルダは下記のようになっています。

vala-calculator/bin フォルダ内

calculator.exe をダブルクリックして実行できることを確認します。

calculator.exe の実行例

まとめ

Meson はまだまだ勉強中

Meson の情報は、英文ですが、それなりに充実しており、まじめに読んで、先人が公開している meson.build の内容を github などを参考にさせていただいて、なんとか Windows のリソースファイルを windres でコンパイルしてバイナリに組み込むことができました。情報を整理して別の機会にまとめる予定です。

次はインストーラの作成

クロスコンパイル関連で目標としていることは、あとは Linux 上で wine を使ってインストーラまで作ることです。パッケージを作成するのに使用した DLL Explorer にインストーラ作成用のファイルを生成する機能を実装する予定です。

参考サイト

  1. bitWalk's: Vala と Meson とクロスコンパイル [2020-08-17]
  2. Cross compilation

ブログランキング・にほんブログ村へ
にほんブログ村

2016-11-28

PlayOnLinux を試す

PlayOnLinux は Linux 上で Wine を使って Windows のゲームなどのインストールを簡単にするためのアプリケーションです [1]

Wine は、Windows 向けのアプリケーションを Linux 上で動作させるため、オープンソースで Windows API を実装した Windows 互換レイヤーです [2]

Linux 上で Windows のゲームをしたいとか、どうしても Windows のアプリケーションを Linux 上で動作させたいといった強い動機がなかったので、Wine に触れることが無くなってしまっていたのですが、Fedora でも PlayOnLinux のパッケージを利用できることを知ったので試してみました。なお PlayOnLinux については、参考サイト [3] に詳しい紹介がされています。

使用環境は以下のとおりです。

  • OS: Fedora 25 (x86_64)
  • Wine: wine-1.9.22-1.fc25.x86_64 と関連パッケージ
  • PlayOnLinux: playonlinux-4.2.10-9.fc25.x86_64

PlayOnLinux のインストール

端末エミュレータを起動して、root 権限で次のようにタイプしてインストールします。私の環境の場合、既にインストールされているパッケージのせいでインストールできなかったので、パッケージの依存性を解決するため、--allowerasing オプションを付加しました。

$ su
パスワード:
# dnf install --allowerasing playonlinux
Failed to synchronize cache for repo 'Dropbox', 無効化。
メタデータの期限切れの確認は、1:27:39 時間前の Sun Nov 27 18:01:50 2016 に実施しました。
依存性が解決されました。
================================================================================
 Package                  アーキテクチャ
                                  バージョン                     リポジトリ
                                                                           容量
================================================================================
インストール:
 ImageMagick              x86_64  6.9.3.0-3.fc25                 fedora   170 k
 ImageMagick-libs         x86_64  6.9.3.0-3.fc25                 fedora   2.2 M
 bzip2-libs               i686    1.0.6-20.fc24                  fedora    46 k
  ...
  ...
 playonlinux              x86_64  4.2.10-9.fc25                  fedora   2.3 M
  ...
  ...
(途中省略)
  ...
  ...
ダウングレード済み:
  gnutls.x86_64 3.5.5-2.fc25             gnutls-c++.x86_64 3.5.5-2.fc25        
  gnutls-dane.x86_64 3.5.5-2.fc25        gnutls-devel.x86_64 3.5.5-2.fc25      
  gnutls-utils.x86_64 3.5.5-2.fc25      

完了しました!
#

PlayOnLinux の起動

GNOME のアクティビティ メニューから「アプリケーションを表示する」を選んで、PlayOnLinux のアイコンをクリックして起動できますが、悲しいかな UTF−8 化されていてもやっぱり日本語環境には優しくなくて、インストール可能なアプリケーションの一覧の画面までたどり着けませんでした。

そこで、端末エミュレータ上で以下のようにデフォルトロケール export LANG=C を設定して PlayOnLinux を起動しました。

# exit
exit
$ export LANG=C;playonlinux
Looking for python... 2.7.12 - wxversion(s): 3.0-gtk3
selected
[main] Message: PlayOnLinux (4.2.10) is starting
[clean_tmp] Message: Cleaning temp directory
[Check_OpenGL] Message: 64bits direct rendering is enabled
[Check_OpenGL] Message: 64bits direct rendering is enabled
[POL_System_CheckFS] Message: Checking filesystem for /home/bitwalk/.PlayOnLinux/
[main] Message: Filesystem is compatible
[install_plugins] Message: Checking plugin: Capture...
[install_plugins] Message: Checking plugin: ScreenCap...
  ...
  ...
  ...

起動したら Install ボタンをクリックします。

しばらく待つと、インストール可能なアプリケーションの一覧が表示されます。

Windows アプリケーションのインストール

ここでは Development で Notepad Plus Plus (Notepad++) をインストールしてみます。Notepad Plus Plus を選択し、右下の Install ボタンをクリックします。

すると、PlayOnLinux Wizard なるダイアログ画面が表示されるので、Next ボタンを押して次へ進みます。

三番目のダイアログ画面で PlayOnLinux Installation Wizard になるのですが、画面上の文字列が溢れているためか、下の Next や Cancel のボタンが見えなくなってしまっています。

しかし、前のダイアログ画面で Next ボタンがあった辺りに、このダイアログ画面でもマウスのポインタを持っていってクリックすると次の画面に進みます。

次のダイアログ画面で Download the program を選択して Next ボタンをクリックすると、インストーラのダウンロードが始まります。

NotePad++ のインストーラが起動しますので、ダイアログに従ってインストールを進めます。

インストールが終了して(Plugin Manager の設定後)Notepad++ が起動します。

Windows のアプリケーションをインストールしてしまえば、アクティビティから「アプリケーションを表示する」を選んで、PlayOnLinux のアイコンをクリックして起動しても使い物になります。インストールした Windows のアプリケーションは PlayOnLinux の画面から起動することができるからです。

まとめ

マルチバイトの言語環境固有の問題なのでしょうか、PlayOnLinux を利用するにはちょっと工夫が必要になります。それでも Linux 上で利用したい Windows のアプリケーションがあり、PlayOnLinux のリストに収録されていれば、インストール/アンインストールの管理が簡単な PlayOnLinux を利用する価値はあるように思います。

参考サイト

  1. Home - PlayOnLinux - Run your Windows applications on Linux easily!
  2. WineHQ - Run Windows applications on Linux, BSD, Solaris and Mac OS X
  3. WindowsのゲームをLinuxで楽しむ PlayOnLinux | OSDN Magazine [2008-3-13]

ブログランキング・にほんブログ村へ
にほんブログ村

2008-11-17

wxWidgets でもクロスコンパイル

SourceForge.net Logo
回、FOX Toolkit について、Hello World! 的なプログラムを紹介しましたので、同じくクロスコンパイル用の RPM で公開している C++ 用 GUI ライブラリ wxWidgets についても同じように簡単なプログラムをコンパイルした例を紹介したいと思います。プログラムは以下のチュートリアル用ページをベースにしました。

Hello World - wxWidgets

表示される文字列を日本語にした他は、同じプログラムです。

// Hello World program with wxWidgets
#include "wx/wx.h"

class MyApp: public wxApp
{
virtual bool OnInit();
};

class MyFrame: public wxFrame
{
public:

MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);

void OnQuit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);

DECLARE_EVENT_TABLE()
};

enum
{
ID_Quit = 1,
ID_About,
};

BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Quit, MyFrame::OnQuit)
EVT_MENU(ID_About, MyFrame::OnAbout)
END_EVENT_TABLE()

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame(_T("こんにちは、世界!"),
wxPoint(50,50), wxSize(450,340));
frame->Show(TRUE);
SetTopWindow(frame);
return TRUE;
}

MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
: wxFrame((wxFrame *)NULL, -1, title, pos, size)
{
wxMenu *menuFile = new wxMenu;

menuFile->Append(ID_About, _T("このプログラムについて(&A)"));
menuFile->AppendSeparator();
menuFile->Append(ID_Quit, _T("終了(&x)"));

wxMenuBar *menuBar = new wxMenuBar;
menuBar->Append(menuFile, _T("ファイル(&F)"));

SetMenuBar(menuBar);

CreateStatusBar();
SetStatusText(_T("wxWidgets へようこそ!"));
}

void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
{
Close(TRUE);
}

void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
{
wxMessageBox(_T("はじめてのプログラム、こんにちは、世界!"),
_T("このプログラムについて"), wxOK | wxICON_INFORMATION, this);
}

コンパイルには、Linux の pkg-config を利用するので、MinGW のバイナリがインストールされている /usr/local/i386-mingw32/bin へパスを通しておきます。もし、Linux 側にも wxWidgets がインストールされている場合には、パスの順序を考慮する必要があります。

$ export PATH=$PATH:/usr/local/i386-mingw32/bin
$ echo $PATH
/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/mingw32ce/bin:/home/bi
twalk/bin:/usr/local/i386-mingw32/bin
$ i386-mingw32-g++ hello.cpp `wx-config --libs` `wx-config --cxxflags`
-o hello.exe

$ ./hello.exe




Windows 上での動作確認もしようと思ったのですが、必要なランタイム DLL が多そうだったので、それはまた別の機会に紹介します。

$ i386-mingw32-objdump -p hello.exe | grep DLL
vma: Hint Time Forward DLL First
DLL Name: KERNEL32.dll
DLL Name: mingwm10.dll
DLL Name: msvcrt.dll
DLL Name: msvcrt.dll
DLL Name: wxbase28u_gcc_custom.dll
DLL Name: wxmsw28u_core_gcc_custom.dll

ちなみに、必要なランタイム DLL は wbc を使って調べることができます。

2008-11-16

FOX Toolkit でクロスコンパイル

SourceForge.net Logo
FOX Toolkit は、C++で記述された GUI 用ライブラリです。UNIX 系 OS だけでなく、Windows にも対応しています。そのため、以前から MinGW クロスコンパイルで Windows 用ライブラリを作成しようとしてきましたが、なかなか DLL を作成できません。しかし、スタティックライブラリだけでも、それなりに利用価値があるだろうということで、RPM パッケージを公開することにしました。

[LIB] FOX

スタティックライブラリでコンパイルした場合、必要なルーチンがすべて取り込まれてしまうのでバイナリのサイズが大きくなりますが、その代わり、ファイル単体を他の Windows PC へ移して、DLL のランタイムライブラリなしに即実行することができます。

ここでは、FOX Toolkit を利用した、いわゆる Hello World! 的なプログラムのコンパイル例を紹介します。Hello World! のプログラム hello.cpp は以下のとおりです。このプログラムは、Wikipedia に掲載されていたプログラムをベースとしました。

// Hello World program with FOX toolkit
#include <fox/fx.h>

int main(int argc, char *argv[]) {
FXApp application("Hello", "FoxTest");
application.init(argc, argv);
FXMainWindow *main
= new FXMainWindow(&application, "Hello", NULL, NULL, DECOR_ALL);
new FXButton(main, "こんにちは、世界!(&w)", NULL,
&application, FXApp::ID_QUIT);

application.create();
main->show(PLACEMENT_SCREEN);
return application.run();
}

ファイルのコンパイルは、Makefile を作るほどではないので、次のようにしました。

$ i386-mingw32-g++ hello.cpp -s -o hello.exe -lFOX -lws2_32 -lgdi32 -lcomdlg32
-limm32 -lcomctl32 -lshell32 -mwindows

$ ls -l hello.exe
-rwxrwxr-x 1 bitwalk bitwalk 719360 2008-11-15 16:58 hello.exe
$ ./hello.exe

Wine での実行結果を以下に示します。ソースファイルは UTF-8 で記述されていますが、ボタンのフォントは正しく日本語で表示されています。Alt-w がアクセラレータキーになっています。

日本語フォント表示が心配だったので Windows Vista 上でも確認しました。

ちなみに FOX は Free Objects for X の略です。
 

2008-10-26

Wine のコンソール


回は Wine に関してずっと思い違いをしていた恥ずかしい話です。

Linux 上で Wine を利用して Windows のアプリケーションを動かすのはいいのだけれど、cmd.exe を簡単に動かせればいいのにと、ずっと思っていました。コンソールタイプのアプリケーションは wineconsole を使うものだとずっと思い込んでいて、cmd.exe も当然そうだと考えていたのでした。
あとで考えてみると愚かだったのですが、Linux 上で Windows 用にクロスコンパイルしたコンソールプログラムは、wineconsole を使わずに、直接 xxx.exe というようにファイル名をタイプして wine を起動していたんです。

で、wineconsolecmd.exe を実行しようとすると、次の様にエラーになって起動できないため、cmd.exe に代わるアプリケーションがないか、ずっと探していました。

$ wineconsole cmd.exe
err:wineconsole:WCUSER_SetFont wrong font
err:wineconsole:WCUSER_SetFont wrong font
err:wineconsole:WCUSER_SetFont wrong font
err:wineconsole:WCUSER_SetFont wrong font
err:wineconsole:WINECON_Fatal Couldn't find a decent font, aborting

結局、cmd.exe の方は、ひょんなことからようやく wine で起動すればよいことに気が付きました。

$ wine cmd
CMD Version 1.1.5

Z:\home\bitwalk>

しかし、探せば cmd.exe の代替プログラムってのもあるんですね。無料で利用できるものでこんなのを見つけました。Fedora 9 の wine-1.1.5-1 で動作しました。

CMD.exe replacement, FREE! - Indigo Rose Software Forums

今となっては、どうでも良くなってしまいましたが…。