試験運用中なLinux備忘録・旧記事スマートフォン用の表示で見る試験運用中なLinux備忘録・旧記事はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。この広告は、90日以上更新していないブログに表示しています。2015-03-09『試験運用中なLinux備忘録』のBloggerへの移行とタイトル一部変更に関するお知らせお知らせウェブログ運営上の事情により、この『試験運用中なLinux備忘録』はこれまで利用してきたはてなダイアリーからBloggerへと移行することになりました。*1移行先のウェブログは『kakurasanのLinux備忘録』です。最初の記事が公開されているので、ぜひご覧ください。2015年3月時点ではページレイアウトや一部外観の調整が今後頻繁に行われる可能性があります。今後の新規記事の追加先について新しい記事は今後はてなダイアリーで公開されることはありません。Bloggerの新ウェブログ上でのみ公開されます。過去の記事について過去の記事をすぐに削除する予定はありませんが、記事によっては段階的に新ウェブログ側へ移す計画です。諸事情により、現時点では2015/9/27(日)頃までには、はてなダイアリーからは記事を全て無くす*2方向で考えています。新ウェブログの状況によってはこの時期が延期される可能性があります。(2015/8/22)はてなダイアリーからの記事の削除は延期します。削除時期の予定は未定です。過去にアップロードした画像について過去にはてなフォトライフへアップロードしたスクリーンショットなどの画像についてはそのまま残します。はてなフォトライフのサービスが継続している限りはこれらの画像は今後も参照可能で、削除予定はありません。*1:ポジティブな移行理由はなく、特にリニューアル要素もありません。不本意な移転理由によるものですが、ここで詳細を述べることには意味を見出せないため、それには触れません。2.10作品が3Dモード時に文字化けする問題と対処」へ移動した。エディターのバージョン2.10で作成された作品をWineで3Dモードで動かしたときに文字描画が崩れる現象について(2014年2月末時点)」のその後として、3Dモード時に発生する文字化けの対処についてを扱う。エディターのバージョン2.10で作成された作品をWineで3Dモードで動かしたときに文字描画が崩れる現象について(2014年2月末時点)」でも書いたような、レジストリ設定によって切り替え可能(他のプログラムの実行に影響しない形)な回避策がWine側の変更によって実現できないか試してみたところ、最終的にそのような形で動作するものが作成できた。修正の要領としては以下のようになる。Wineのバージョンが変わって一部の修正の仕方が変わることがあっても考え方は同じ。IDirect3DTexture9::LockRect()のWine実装からはテクスチャのサブリソースであるサーフェイス*3の処理としてIDirect3DSurface9::LockRect()のWine実装が中で呼ばれるが、この中において、ロックされた領域を示すRECT構造体(左/上/右/下の4つの座標の値から成る)を、サーフェイスの構造体内に別途追加した別のRECT型のメンバにコピーしておくIDirect3DDevice9::UpdateTexture()*4のWine実装からはサブリソースの処理としてIDirect3DDevice9::UpdateSurface()のWine実装が中で呼ばれるが、2Dテクスチャを扱う場合の呼び出しについて、転送元サーフェイスの構造体のメンバを参照して、過去にロックされたことのあるものについては先ほどコピーした座標情報を利用して、その範囲のみが転送先サーフェイスの同一座標(左上基準・つまりコピー先のRECT構造体の左と上の座標値をPOINT構造体で用いる)へコピーされるように引数を指定する常にこの挙動で動作するようにすると他のプログラムで意図しない動作をする恐れがあるため、Wineにあるレジストリ設定の仕組みを利用して設定項目を追加(設定保持用構造体のメンバ追加と初期値指定,レジストリ設定取得処理の追加)*5し、上2つの動作はこの独自動作(以下hack)の有効時にのみ行われるようにするというものとなった。本来はサーフェイスの構造体内にダーティ領域を示す構造体のメンバを用意して、ダーティ領域を変化させる操作(ロック以外に複数存在する)それぞれについて扱いを正しく記述してIDirect3DDevice9::UpdateTexture()側でそれを用いてコピー範囲を決める必要がある*6のだが、WineのDirect3Dでダーティ領域の情報が内部的にどのように管理されているのかがよく分からず、処理によっては関数から関数へと指定領域が引数で渡されているにも関わらず関数内でそれが一切使われていないところもあったため、結局は該当するバージョンのDXライブラリで正しく動くことだけを優先して「レジストリにより切り替え可能なhack」という形で実装した。将来のバージョンでこのあたりの動作が改善されて特に何もせずに正しく動作するようになる可能性もなくはないが、あまり期待はできない。パッチパブリックドメインとして公開する。手動でビルド*8する場合、ソースとバージョンが同一な(32bitの)ディストリのバイナリパッケージがあれば、dlls/wined3d/内のビルドが終わった後はビルドを中止して(32bitの)wined3d.dll.soのみを既存のファイル([32bitライブラリのディレクトリ]/wine/wined3d.dll.so)に対して管理者権限で上書きするだけで済む。バージョンは安定版系統の1.6.2のみ用意した。PPAリポジトリの追加手順については以前AMDのlegacy版グラフィックドライバのインストールに関して書いた記事(内容自体は古いので注意)を参照。パッケージ情報の再読み込み後は「wine1.6」パッケージをインストール(インストール済みの場合はアップグレード)する。け回避のモードで動かす(hackを有効にする)にはレジストリの設定が必要。全てのプログラムに対してこのhackを有効にする場合はレジストリのキー(フォルダ)「HKEY_CURRENT_USER\Software\Wine\Direct3D」の中に「DxLibFontHack」という名前の文字列を作成して値を「enabled」とする。下はレジストリファイルとして取り込む場合の内容。enable-dxlib-font-hack.regREGEDIT4[HKEY_CURRENT_USER\Software\Wine\Direct3D]"DxLibFontHack"="enabled"無効化するファイルは「enabled」部分を他の「disabled」などの文字列に変更して別名で保存すると作れる。特定のファイル名のプログラムに対してこのhackを有効にする*9場合は「HKEY_CURRENT_USER\Software\Wine\AppDefaults\[ファイル名]\Direct3D」の中に同様の項目を作成する。下はGame.exeというファイル名でのみ有効になるような設定。エディター作品だけを自動的にhackの対象にするには上記設定のファイル名部分と実際のファイル名の両方をWolfRpgGame.exeなど他とかぶりにくい名前にして使うとよい。下は設定を自動で有効化するスクリプト例。環境に応じて一部変更して用いる。これはGame.exeをWolfRpgGame.exeに名前変更して使う場合の例で、他のプログラムを動かす際にレジストリ設定の切り替えを行う場面はほとんどなくなる。無効化するスクリプトは「enabled」部分を他の「disabled」などの文字列に変更して別名で保存すると作れる。エディターのバージョン2.10で作成された作品をWineで3Dモードで動かしたときに文字描画が崩れる現象について(2014年2月末時点)*1:仕様上はここで同領域が「ダーティ領域」として記録される*2:1.7.35については実際の動作は未確認だが、ソースの該当箇所を見る限りは同様*3:少なくともWineのDirect3Dではテクスチャという型はサーフェイス(画像データを保持するメモリ領域)という型を中に含む形になり、テクスチャからサーフェイスはサブリソースとして参照する・IDirect3DDevice9::UpdateTexture()についても、中でサブリソースのサーフェイスに対するIDirect3DDevice9::UpdateSurface()に相当する内部処理が呼ばれる形の実装になっている*4:説明として「テクスチャのダーティー部分を更新する。」とあり、「転送元テクスチャにダーティー領域がある場合は、コピーをその領域だけに限定することで、コピー処理を最適化できる。」とも書かれているが「ダーティーとしてマークされているバイトだけがコピーされるという保証はない。Nineとその使い方」へ移動した。以下、以前の内容となる。nine」と呼ばれるソフトウェアが一部で注目されている。9を利用するプログラムから利用できるようにするもの。9を描画APIとして用いることを可能にする。9の機能を提供する共有オブジェクト(d3dadapter9.so.[数字])*2から成る。9cを実装しているが、Direct3DについてはOpenGLを用いて実装されており、Direct3Dの描画命令を実行するためには処理コストが余計にかかる。9(OpenGLを用いた実装)と比べるとOpenGLを経由しない分処理コストが少ない関係で高速に動作する場合が多い。どの程度高速化されるかはグラフィックドライバ(Galliumのドライバ部分,libdrm,カーネルのDRMモジュールといったプログラム)やGPUによるが、特に、高性能なGPUの使用時には大きな差が出るようだ。Windows上より速くなるかどうかはそれぞれのOSのグラフィックドライバなどによる。動作速度があまり向上しないケースでもCPUの処理量が減るのは間違いないため、CPU使用率が減ってわずかに省電力になる場合もある。9の描画処理の大まかな流れを比較した図。Infrastructure)と呼ばれる抽象化された表現に変換されてから(各GPU向けのGalliumドライバを経由して)実行される。nineからシェーダを用いる際には上記のいずれかを経由せずに直接TGSIへ変換されるため、それよりも処理コストが削減される。最初に話題になったのは2013年夏、Mesaのメーリングリストへの投稿のときだった。2014年春まではこのときの開発リポジトリで開発が続いていたが、その後は新しい派生リポジトリに移って活発に開発が行われるようになった。開発リポジトリプロジェクトサイト更に、Mesaの公式のソースツリーに取り込んでもらうよう働きかける動きも進んで、バージョン10.4では初めて公式のリリースの中に含まれることになった。nineは無効(既定値)のままとなっていて利用できない。10.4が出た後の修正についても公式のソースツリーに取り込んでもらう動きが続いており、2015/1/23(GMT表記では22日となる時刻)には50ものパッチが新しく取り込まれた。10.5ではその改善も入る見通し。*5Wineへの修正については、公式のソースツリーへの取り込みはまだ行われておらず、見通しについても不明*6。導入プロジェクトサイトのインストールに関するページでディストリごとの導入について書かれている。詳しくはここでは扱わない。fallback」という機能)。*72015年1月時点では、X11で「xf86-video-ati」ドライバ*8を使用している場合、DRI3を用いるには同プロジェクトが提供する「xf86-video-ati」パッケージが必要。nineの動作テストと不具合報告を行う目的で使う場合は、これは用いずにDRI2環境を用いたほうがよい(不具合原因の切り分けの都合)。nineが使われる(チェックを外すと従来のOpenGLを用いた実装で動作する)。診断ツール(dxdiag)が便利で、winetricksの「dxdiag」パッケージをインストールするのが楽。インストールしたら、Wine内の「dxdiag」コマンドを実行する。9が使われているときには端末には色の付いたメッセージが表示される(プログラム起動時など、描画処理以外で表示される場面もある)。ここまでに問題がなければ導入に成功していることになる。multithreading)*9」と呼ばれる手法(OpenGL命令の実行の別スレッド化)によりWineのDirect3D(Wineが対応する全てのバージョン)やDirectDrawの動作が高速化する場合があり、プロプライエタリドライバでも恩恵が受けられる。Staging」プロジェクト(www.wine-staging.com)*12が提供しているパッケージを導入することで試すことができる。CSMTの有効/無効の切り替えについてもwinecfgで可能となっており、バージョン1.7.34の時点では「Staging」タブのCSMTに関する設定項目にチェックを入れることで有効にできる。古い内容(2018/10/12)本記事は「ゆっくりボイスAquesTalk2のLinux用CCライセンス版とサンプル」へ移動した。「Luaコード例#7:Luaで数値を用いたfor文でループ処理を行う」では数値を用いたfor文を扱ったが、ここでは汎用のfor文を用いて配列(としてのテーブル)の各要素に対するループ処理を行う。処理...end「for」の後ろには2つの変数名をコンマ区切りで記述し1つ目の名前の変数は要素の番号(1から始まり1ずつ増える)2つ目の名前の変数は要素の内容として「do」と「end」の間で参照できる。scale*1による)とその指数表記,生の値の「0」と「,」を用いた表記を並べて表示する。Shellというデスクトップシェルが導入され、GNOMEのセッションにログインした際の使い方が大きく変化したのと同時にGPUのアクセラレーションが実質必須になった。Environment」と名前を変えて開発を継続することになった。2とは異なり、独自のバージョンの付き方となる。2014年11月末時点の最新バージョンは1.8で、次はバージョン1.10となる。公式サイトによると、「MATE」の名前は「イェルバ・マテ」という木の名前から、とされている。ここからマテ茶というお茶の原料が得られる。Shellがまともに動作しないような古いハードウェアでの選択肢になるようにする*4といった部分は約束されており、今後変わる予定はない。新しいソフトウェア構成やライブラリAPIに合わせた色々な修正*5といった変更が行われる。3とWayland関係の対応はバージョン1.12系で予定されている(2014年10月下旬時点のロードマップによる)。LinuxSalixとなっており、Ubuntuについては、過去にPPAリポジトリが提供されていたが、14.10(Utopic)からは標準で利用可能となっている。Debian/Ubuntuではパッケージ名「mate-desktop-environment」で最低限のパッケージがインストールされ、「mate-desktop-environment-extras」を入れると更に幾つかのパッケージが追加インストールされる。2の各アプリケーションの名前が変更されたもので構成される。VTEライブラリを用いた端末エミュレータ(端末ソフトウェア)電卓のgalculator、ダイアログを扱うコマンド群Zenity(関連記事)といったプログラムは当初はMATE版が提供されていたが、派生バージョンを開発・公開する理由がなくなって廃止となった。3に対応するまでは、使用している外観テーマによってはGTK+のバージョン系統の関係で外観が異なることがある)。将来、別のMATE版のソフトウェアが同様に廃止されていく可能性もある。Environment)についてのメモTweet広告を非表示にするもっと読むコメントを書く2014-11-21Luaコード例#7:Luaで数値を用いたfor文でループ処理を行う跡地(2019/6/8)本記事は「Luaで数値を用いたfor文でループ処理を行う」へ移動した。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。