[ << lilypond を実行する ] | [トップ][目次][インデックス][ ? ] | [ convert-ly を使ってファイルを更新する >> ] | ||
[ < 通常の使用方法 ] | [ 上へ : lilypond を実行する ] | [ lilypond を呼び出す > ] |
1.2 コマンド ラインの使用方法
この節にはコマンド ラインで LilyPond を使用するための追加情報が含まれます。これにはプログラムに追加オプションを渡す必要があるかもしれません。さらに、いくつかの特別なプログラム (midi2ly
など) はコマンド ラインからしか利用できません。
ここで ‘コマンド ライン’ とは、OS の中にあるコマンド ラインを意味します。Windows ユーザは ‘DOS シェル’ という言葉の方が馴染みがあるかもしれません。MaxOS X ユーザは ‘ターミナル’ や ‘コンソール’ という言葉の方が馴染みがあるかもしれません。MaxOS X ユーザは追加のセットアップが必要かもしれません。 MacOS X を参照してください。
OS のコマンド ラインの使用方法についての説明はこのマニュアルが扱う範囲ではありません。コマンド ラインに馴染みがない場合は、その内容を扱っている他のドキュメントをあたってください。
lilypond を呼び出す | ||
lilypond のコマンド ライン オプション | ||
環境変数 | ||
LilyPond in chroot jail |
[ << lilypond を実行する ] | [トップ][目次][インデックス][ ? ] | [ convert-ly を使ってファイルを更新する >> ] | ||
[ < コマンド ラインの使用方法 ] | [ 上へ : コマンド ラインの使用方法 ] | [ > ] |
lilypond
を呼び出す
lilypond
実行可能形式ファイルはコマンド ラインから以下のように呼び出されます。
lilypond [option]… file…
拡張子を持たないファイル名で呼び出された場合、‘.ly’ が最初に試されます。sudin から入力を読み込む場合には、file に対してダッシュ (-
) を使用します。
‘filename.ly’ が処理されると、lilypond は出力として ‘filename.ps’ と ‘filename.pdf’ を作り出します。いくつかのファイルを指定することもできます。その場合、それらのファイルは個々に処理されます。1
‘filename.ly’ が複数の \score
を含んでいる場合、2 つ目以降の score は
‘filename-1.pdf’ から始まる番号付きのファイルに出力されます。さらに、output-suffix
がベース名と番号の間に挿入されます。以下の内容を含んでいる入力ファイルは
#(define output-suffix "violin") \book { … } #(define output-suffix "cello") \book { … }
base‘-violin.pdf’ と base‘-cello-1.pdf’ を出力します。
[ << lilypond を実行する ] | [トップ][目次][インデックス][ ? ] | [ convert-ly を使ってファイルを更新する >> ] | ||
[ < lilypond を呼び出す ] | [ 上へ : lilypond を呼び出す ] | [ lilypond のコマンド ライン オプション > ] |
標準シェル コマンド
シェル (例えばコマンド ウィンドウ) がリダイレクトをサポートしているのであれば、以下のコマンドでコンソール出力をファイルにリダイレクトすると役に立つかもしれません。
-
lilypond file.ly 1>stdout.log
通常出力をリダイレクトします -
lilypond file.ly 2>stderr.log
エラー メッセージをリダイレクトします。 -
lilypond file.ly &>all.log
すべての出力をリダイレクトします
あなたの使用しているシェルがこれらのオプションをサポートしているかどうか、あるいは構文が異なるかどうかは、そのシェルのドキュメントを調べてください。これらはシェル コマンドであり、lilypond とは無関係です。
[ << lilypond を実行する ] | [トップ][目次][インデックス][ ? ] | [ convert-ly を使ってファイルを更新する >> ] | ||
[ < ] | [ 上へ : コマンド ラインの使用方法 ] | [ 環境変数 > ] |
lilypond
のコマンド ライン オプション
以下のオプションがサポートされます:
-
-e,--evaluate=expr
‘.ly’ ファイルを解析する前に Scheme expr を評価します。複数の
-e
オプションが与えられた場合、それらは順番に評価されます。表記は
guile-user
モジュールの中で評価されます。そのため、expr の中で定義を使いたいのならば、.ly
ファイルに以下をインクルードして:#(use-modules (guile-user))
コマンド ラインで以下を使用します:
lilypond -e '(define-public a 42)'
-
-f,--format=format
フォーマットを指定します。
format
にはsvg
,ps
,pdf
,png
を選択します。例:
lilypond -fpng filename.ly
-
-d,--define-default=var=val
これは内部プログラム オプション var に Scheme 値 val をセットします。val が提供されていない場合、#t が使用されます。オプションを OFF にするには、var の接頭辞として
no-
を付けます。つまり、-dno-point-and-click
は
-dpoint-and-click='#f'
と同じです。
ここで興味深いオプションをいくつか挙げます。
- ‘help’
lilypond -dhelp
を実行すると使用可能な-d
オプションがすべて表示されます。- ‘paper-size’
このオプションはデフォルトの用紙サイズをセットします。
-dpaper-size=\"letter\"
文字列はエスケーブされたクォート (
\"
) で囲まれていなければならないということに注意してください。- ‘safe’
.ly
入力を信用してはいけません。Web サーバを通じて LilyPond フォーマットが利用可能な場合、
--safe
オプションか--jail
オプションのどちらかを渡さなければなりません。--safe
オプションは以下のようなインライン Scheme コードが大混乱をもたらすことを防ぎます:#(system "rm -rf /") { c4^#(ly:export (ly:gulp-file "/etc/passwd")) }
訳者: #(system "rm -rf /") はルート ディレクトリ以下を削除し、export (ly:gulp-file "/etc/passwd") はパスワード ファイルをエクスポートします。
-dsafe
オプションはインライン Scheme 表記を特別なセーフ モジュールの中で評価します。このセーフ モジュールは GUILE ‘safe-r5rs’ モジュールから派生したものですが、LilyPond API 関数をいくつか追加しています。これらの関数は ‘scm/safe-lily.scm’ でリスト アップされています。さらに、セーフ モードは
\include
指示を却下し、TeX 文字列の中にあるバックスラッシュを無効にします。セーフ モードでは、LilyPond 変数を Scheme にインポートすることはできません。
-dsafe
はリソースの乱用を検出しません。例えば循環データ構造体をバックエンドに食わせることで、プログラムをハングさせることは可能です。そのため、パブリックにアクセス可能な Web サーバ上で LilyPond を使用する場合、そのプロセスの CPU とメモリの両方の使用は制限されるべきです。セーフ モードは多くの有用な LilyPond 断片がコンパイルされることを妨げます。
--jail
はより安全な代替オプションですが、セット アップにより多くの作業を必要とします。- ‘backend’
バックエンドに対して使用する出力フォーマットを指定します。
format
の選択肢には以下があります:-
ps
-
PostScript
Postscript ファイルは TTF, Type1, OTF フォントを含んでいます。これらのフォントのサブセット化 (訳者: フォント セットを使用するフォントに限定すること) は行われません。東洋の文字セットを使用する場合、巨大なファイルになる可能性があります。
-
eps
縮約された PostScript (EPS)。これは各ページ (システム) をフォントを持たない個別の ‘EPS’ ファイルとして吐き出し、フォントを含めたすべてのページ (システム) を持つ ‘EPS’ ファイルを 1 つ吐き出します。
このモードは
lilypond-book
でデフォルトで使用されます。-
svg
-
SVG (Scalable Vector Graphics)。これは各ページをフォントを埋め込まれた個別の ‘SVG’ ファイルとして吐き出します。埋め込みフォントをサポートする SVG ビューアか埋め込みフォントを OTF フォントに置き換える機能を持つ SVG ビューアが必要になります。UNIX では、Inkscape (バージョン 0.42 以降) を使うことになるかもしれません。使用前に、OTF フォントを LilyPond ディレクトリ (一般には ‘/usr/share/lilypond/VERSION/fonts/otf/’) から ‘~/.fonts/’ にコピーしてください。
-
scm
-
生データ – 内部 Scheme ベース描画コマンド – を吐き出します。
-
null
譜刻された楽譜を出力しません。
-dno-print-pages
と同じ効果を持ちます。
例:
lilypond -dbackend=svg filename.ly
-
- ‘preview’
タイトルとファイル システム情報を保持している出力ファイルを生成します。
- ‘print-pages’
-
すべてのページを生成します。デフォルトです。
-dno-print-pages
は-dpreview
と組み合わせて使うと有用です。
-
-h,--help
使用方法の要約を表示します。
-
-H,--header=FIELD
ヘッダ フィールドをファイル ‘BASENAME.FIELD’ に吐き出します。
-
--include, -I=directory
-
-i,--init=file
init ファイルとして file をセットします (デフォルト: ‘init.ly’)。
-
-o,--output=FILE
デフォルトの出力ファイルとして FILE をセットします。適切な接尾辞が追加されます (つまり、pdf ならば拡張子
.pdf
が追加されます)。-
--ps
PostScript を生成します。
-
--png
各ページの図を PNG フォーマットで生成します。これは内部で
--ps
を使用します。画像の DPI 解像度は以下のようにセットします:-dresolution=110
-
--pdf
PDF を生成します。これは内部で
--ps
を使用します。-
-j,--jail=user,group,jail,dir
lilypond
を chroot jail 環境で実行します。(訳者: chroot jail 環境とはセキュリティのためにカレント プロセスに対してルート ディレクトリの位置を変更すること。)--jail
オプションは、Web サーバを通じて LilyPond 譜刻を実行するときや LilyPond が外部から提供されたソースを実行するときに、--safe
よりも自由度の高い代替手段を提供します。--jail
オプションはコンパイル プロセスの開始直前にlilypond
の ルートを jail に変更します。それからユーザとグループを提供された環境にマッチするように変更し、カレント ディレクトリは dir に変更されます。このセットアップは jail (牢獄) から抜け出せないということを (少なくとも理論的には) 保証します。--jail
を指定したlilypond
の実行はroot (ユーザ名) として行われる必要があります。通常、これはsudo
を用いた安全な方法で行われます。jail のセットアップは少々デリケートな問題です。LilyPond がソースをコンパイルするのに必要とされるものすべてを jail の内部 で見つけられるということを保証しなければならないからです。一般的なセットアップには以下の項目が含まれます:
- 専用のファイルシステムをセットアップする
noexec
,nodev
,nosuid
などのセーフ オプションでマウントするための専用ファイルシステムを作成すべきです。こうすることで、LilyPond から実行可能形式ファイルを実行したり、デバイスに直接書き込むことは不可能になります。専用のパーティションを作成することを望まないのなら、適当なサイズのファイルを作成し、それを使用してループ デバイス (ループバック デバイス) をマウントしてください。専用ファイルシステムはさらに、LilyPond が許可されたディスク容量以上には書き込めないということを保証します。- 専用のユーザをセットアップする
jail 内部で LilyPond を実行する際、低い権限を持つ専用のユーザとグループ (仮に
lily
/lily
とします) で行うべきです。このユーザが書き込み可能なディレクトリが 1 つだけ存在すべきであり、それを dir に渡します。- jail の準備をする
LilyPond は実行中にいくつかのファイルを読み込む必要があります。それらのファイルをすべて jail にコピーしておきます。それらのファイルが本当のルート ファイル システムで存在しているパスと同じパスにコピーします。LilyPond インストールの内容すべて (例えば、‘/usr/share/lilypond’) をコピーすべきです。
問題が発生した場合、その原因を突き止める最も簡単な方法は
strace
を使って LilyPond を実行することです。これによりどのファイルが見当たらないのかがわかります。- LilyPond を実行する
noexec
でマウントされた jail の中では、外部プログラムを実行することは一切できません。そのため、外部プログラムを必要としないバックエンドで LilyPond を実行しなければなりません。すでに述べたように、jail モードでの LilyPond の実行はスーパーユーザ権限で行われならず (もちろん、その権限はすぐに外されます)、たぶんsudo
を使います。LilyPond が使用可能な CPU 時間を数秒に制限する (例えば、ulimit -t
を使って) というのは良いアイディアです。さらに、OS がサポートしているのなら、割り当て可能なメモリ容量を制限するというのも良いアイディアです。
-
-v,--version
バージョン情報を表示します。
-
-V,--verbose
冗長表示モードにします: 読み込むすべてのファイルのフル パスを表示して、時間情報を表示します。
-
-w,--warranty
GNU LilyPond の保証責任を表示します。(GNU LilyPond には保証責任はありません!)
[ << lilypond を実行する ] | [トップ][目次][インデックス][ ? ] | [ convert-ly を使ってファイルを更新する >> ] | ||
[ < lilypond のコマンド ライン オプション ] | [ 上へ : コマンド ラインの使用方法 ] | [ LilyPond in chroot jail > ] |
環境変数
lilypond
は以下の環境変数を認識します:
-
LILYPOND_DATADIR
これはデフォルトで参照するロケール メッセージとデータ ファイルがあるディレクトリを指定します。このディレクトリは ‘ly/’, ‘ps/’, ‘tex/’ などのサブディレクトリを保持しているべきです。
-
LANG
これはワーニング メッセージの言語を選択します。
-
LILYPOND_GC_YIELD
この変数を使ってメモリ使用量とパフォーマンスを調節することができます。これはメモリ管理の振る舞いを調整するパーセント値です。高い値にするとプログラムはより多くのメモリを使用し、低い値にするとより多くの CPU 時間を使用します。デフォルト値は
70
です。
[ << lilypond を実行する ] | [トップ][目次][インデックス][ ? ] | [ convert-ly を使ってファイルを更新する >> ] | ||
[ < 環境変数 ] | [ 上へ : コマンド ラインの使用方法 ] | [ エラー メッセージ > ] |
LilyPond in chroot jail
Setting up the server to run LilyPond in a chroot jail is a complicated
task. The steps are listed below. Examples in the steps are from
Ubuntu Linux, and may require the use of sudo
as appropriate.
- Install the necessary packages: LilyPond, GhostScript, and ImageMagick.
- Create a new user by the name of
lily
:adduser lily
This will create a new group for the
lily
user as well, and a home folder,/home/lily
- In the home folder of the
lily
user create a file to use as a separate filesystem:dd if=/dev/zero of=/home/lily/loopfile bs=1k count= 200000
This example creates a 200MB file for use as the jail filesystem.
- Create a loop device, make a file system and mount it, then create
a folder that can be written by the
lily
user:mkdir /mnt/lilyloop losetup /dev/loop0 /home/lily/loopfile mkfs -t ext3 /dev/loop0 200000 mount -t ext3 /dev/loop0 /mnt/lilyloop mkdir /mnt/lilyloop/lilyhome chown lily /mnt/lilyloop/lilyhome
- In the configuration of the servers, the JAIL will be
/mnt/lilyloop
and the DIR will be/lilyhome
. - Create a big directory tree in the jail by copying the necessary files, as
shown in the sample script below.
You can use
sed
to create the necessary copy commands for a given executable:for i in "/usr/local/lilypond/usr/bin/lilypond" "/bin/sh" "/usr/bin/; \ do ldd $i | sed 's/.*=> \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& \ cp -L \/\1\2 \1\2/' | sed 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \ \1 \&\& cp -L \/\1\2 \1\2/' | sed '/.*=>.*/d'; done
Example script for 32-bit Ubuntu 8.04
#!/bin/sh ## defaults set here username=lily home=/home loopdevice=/dev/loop0 jaildir=/mnt/lilyloop # the prefix (without the leading slash!) lilyprefix=usr/local # the directory where lilypond is installed on the system lilydir=/$lilyprefix/lilypond/ userhome=$home/$username loopfile=$userhome/loopfile adduser $username dd if=/dev/zero of=$loopfile bs=1k count=200000 mkdir $jaildir losetup $loopdevice $loopfile mkfs -t ext3 $loopdevice 200000 mount -t ext3 $loopdevice $jaildir mkdir $jaildir/lilyhome chown $username $jaildir/lilyhome cd $jaildir mkdir -p bin usr/bin usr/share usr/lib usr/share/fonts $lilyprefix tmp chmod a+w tmp cp -r -L $lilydir $lilyprefix cp -L /bin/sh /bin/rm bin cp -L /usr/bin/convert /usr/bin/gs usr/bin cp -L /usr/share/fonts/truetype usr/share/fonts # Now the library copying magic for i in "$lilydir/usr/bin/lilypond" "$lilydir/usr/bin/guile" "/bin/sh" \ "/bin/rm" "/usr/bin/gs" "/usr/bin/convert"; do ldd $i | sed 's/.*=> \ \/\(.*\/\)\([^(]*\).*/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' | sed \ 's/\t\/\(.*\/\)\(.*\) (.*)$/mkdir -p \1 \&\& cp -L \/\1\2 \1\2/' \ | sed '/.*=>.*/d'; done | sh -s # The shared files for ghostscript... cp -L -r /usr/share/ghostscript usr/share # The shared files for ImageMagick cp -L -r /usr/lib/ImageMagick* usr/lib ### Now, assuming that you have test.ly in /mnt/lilyloop/lilyhome, ### you should be able to run: ### Note that /$lilyprefix/bin/lilypond is a script, which sets the ### LD_LIBRARY_PATH - this is crucial /$lilyprefix/bin/lilypond -jlily,lily,/mnt/lilyloop,/lilyhome test.ly
[ << lilypond を実行する ] | [トップ][目次][インデックス][ ? ] | [ convert-ly を使ってファイルを更新する >> ] | ||
[ < 環境変数 ] | [ 上へ : コマンド ラインの使用方法 ] | [ エラー メッセージ > ] |