Inkscapeでデザインをする時に、システムにインストールされているフォントが邪魔だなーと思ったので見えないようにしました。
Inkscapeのオプションでフォントサーチパスを切り替えたり、ということはできなさそうなのでちょっと頑張りましょう。
実験環境は Ubuntu 16.04 です。他のLinuxでできるかはわかりませんが、もしやるならユーザ用のフォントインストールパスなどは適宜読み替えてください。
キーワード
fc-list
- ACL
sudo -g
大まかな手順
- inkscapeという名前のグループを作る。
- 隠したいフォントディレクトリに、inkscapeグループからアクセス出来ないようにACLをセットする。
-
sudo -g inkscape inkscape
でパスワードを聞かれないように、sudoersファイルに追記する。 - デザインに使いたいフォントを $HOME/.fonts に配置したりコピーする。
- パスの通ったところに inkscape という名前のスクリプトを配置する。
では始めます。
しばらくは管理者権限が必要です。
グループを作る
# addgroup inkscape
このグループにはユーザを追加しないでくださいね。
このグループに追加されたユーザはUIフォントすらもが制限されてしまうので。
ACLの設定
まずは、システムが認識しているフォントがどこにあるか調査しましょう。
fc-list
コマンドで認識しているフォントを一覧表示できますが、今回は大体の場所が分かればいいのでこんな感じで。
$ fc-list | sed 's/fonts.*/fonts/' | sort -u
ACLというのはパーミッションより細かくアクセス制御を行うための仕組みです。
今回はACLを使って、inkscapeグループにいらないフォントが多いディレクトリを見せないようにします。
# setfacl -m g:inkscape:--- %隠したいフォントが多いディレクトリ%
パイプで繋いで一撃で仕留めてしまうこともできますが、シェル芸人だけでいいでしょう。
ここまで設定すれば、 sudo -g inkscape inkscape
とすると、フォント制限版のinkscapeが起動できることでしょう。
sudo -g %グループ名%
で、そのグループのユーザとしてコマンドを叩く事ができます。
sudoersへの追記
しかし、 sudo
を使うため、Inkscapeの実行のたびにパスワードを聞かれることになります。
sudoersファイルを編集すると聞くとセキュリティ的に怖い感じがしますが、今回の設定でパスワードなしでroot権限を取れるようにはならないのでご安心を。
sudoersの編集はお行儀よく visudo
で。
# visudo
エディタが立ち上がるので、一番下の行あたりに以下を追記します。
ALL ALL=(:inkscape) NOPASSWD: /usr/bin/inkscape
「任意のユーザが、任意のマシンの上で、inkscapeグループのユーザとして、パスワード無しで /usr/bin/inkscape の実行を許可する」と読むらしいですね。
これにより、 sudo -g inkscape inkscape
がパスワードなしで実行できるようになります。(sudo inkscape
や sudo -u root -g inkscape inkscape
はパスワードを要求されます。)
フォントの配置
inkscapeグループのユーザがフォントを認識できるところ(僕は $HOME/.fonts/inkscape というディレクトリを作りました)に必要なフォントを配置します。
僕は TimesNewRoman をデザイン用途でたまに使うので、 /usr/share/fonts/truetype/msttcorefonts からコピーしてきました。
スクリプトを配置する
以下のスクリプトを /usr/bin/inkscape より優先されるパスの通ったところに配置すると、スタートメニューやコマンドから起動されるInkscapeがフォント制限版に置き換えられます。(通常のInkscapeを使う場合は /usr/bin/inkscape を指定してください。)
# ! /bin/bash
sudo -g inkscape /usr/bin/inkscape ${@+"$@"}
終わりに
このページの手順のせいで被った損害を保証することはできませんが、まずいところにお気づきの際はコメント等でご連絡ください。
また、記事内のコマンド列及びファイル片に関しては権利放棄しますのでご自由にお使いくださいませ。
参考資料
-
Man page of SUDOERS
にはsudoersの書式が載ってます。 - アクセス制御リスト - ArchWiki にはACLのより詳しい情報が載っています。
- [シェルスクリプト] シェルスクリプトの引数をそのまま別のコマンドにわたす command ${@+"$@"} は「スクリプトを配置する」の項で触れたスクリプトの引数部分のソースになっています。