brother製プリンタ(DCP-J757N)をArch Linuxで使う

# はじめに
最近、開発環境をarchLinuxにしてみました。

Ubuntu歴2年位なのでLinux経験はありましたが、archはなかなか面白いOSです。
これまた面白いデスクトップ環境のEnlightenmentを入れて遊んでいます。

そんな中プリンタを使用する必要が出てきたのでセットアップしましたが、なかなか手こずったので、備忘録です。

# TL;DR
multilibリポジトリの有効化、更新
依存パッケージ等のインストール（cups, lib32-libstdc++5）
cupsの起動、有効化（**サービス名が変わってるから注意**）
公式配布のrpm形式のドライバを展開し、**ドライバの中身を書き換え**（サービス名が変わってるため）
ドライバを手動でインストールする
ブラウザからプリンタの追加（テストプリントができない！？）
プリンタは正常に認識されているのに印刷されない→プリンタの登録後、**再度プリンタを選択**

# 前提
AURにドライバがない。（あったらそっちの方が楽）
→brotherはあまり無かったけれどCanonのは意外とありそうです。

型番が完全一致していなくても、ドライバに互換性がある場合もあります。

今回プリンタはLANで接続していますがUSB接続でも同じ方法で出来るはず。

# 手順

## 依存パッケージ等の準備
archLinuxは64bitで動いていますね。
brother製プリンタは32bitでしか動かないので、32bitアプリケーション用の設定をします。

まず、Multilibリポジトリを有効にします。
`/etc/pacman.conf`から、以下の部分をアンコメントします。

```
[multilib]
Include = /etc/pacman.d/mirrorlist
```
書き換えたら、

```
$ pacman -Syy
```
を実行して有効化完了です。

次に、各種パッケージをインストールしましょう。

```
$ pacman -S lib32-libstdc++5 cups a2ps
```
を実行してください。

今インストールしたcupsは、印刷時に必要なデーモンなので、起動＆有効化しておきます。

```
$ systemctl start org.cups.cupsd.service
$ systemctl enable org.cups.cupsd.service
```
ちなみにこの**cups**、サービス名が数年前に変わっており、古いサイトだと違う起動方法が記載されていますので注意してください。


## ドライバのダウンロードとインストール
brotherに限らずほとんどのメーカーは、Linux用のプリンタドライバを提供してくれています。
ですが残念ながらrpm形式かdeb形式なので、そのままarchにインストールすることはできません。

今回はひと手間かけてrpm形式のドライバをインストールします。

まず、rpmを展開するパッケージをインストールしましょう。

```
$ pacman -S rpmextract
```

<br>
次に公式からドライバをダウンロードしましょう。

`ソフトウェアダウンロード(brother公式サイト) `
https://www.brother.co.jp/download/software/index.aspx#inkjet

使いたいプリンタを選択します。（以降DCP-J757Nの場合。適宜読み替えてください。）

OSを選んでください → Linux
OSのバージョンを選んでください → Linux(rpm)

を選択し、**LPRプリンタドライバ**と**CUPSwrapperプリンタドライバ**をダウンロードします。

これで一通りダウンロードは完了です。インストールしていきましょう。

まず、作業用ディレクトリを作って、ダウンロードしたドライバを入れておきましょう。

```
例：
~/temp/
　├ dcpj752nlpr-3.0.0-1.i386.rpm
　└ dcpj752ncupswrapper-3.0.0-1.i386.rpm
```

ディレクトリに移動して、rpmファイルを展開します。
**usrディレクトリ**と**optディレクトリ**が生成されることを確認します。

```
$ cd ~/temp

//rpmxtractのスクリプトで2つを展開
$ rpmextract.sh dcpj752nlpr-3.0.0-1.i386.rpm
$ rpmextract.sh dcpj752ncupswrapper-3.0.0-1.i386.rpm

//optとusrディレクトリが生成されていることを確認
$ ls

opt usr dcpj752nlpr・・・.rpm dcpj752ncups・・・.rpm
↑   ↑
```

<br>
次に、ファイルの修正をします。

`opt/brother/Printers/dcpj752n/cupswrapper/`の中に、`cupswrapperdcpj752n`というファイルがあるので、エディタで開きましょう。

僕の場合は、50行目と60行目と299行目あたりですが、

```
if [  -e /etc/init.d/cups ]; then
    /etc/init.d/cups restart
elif [  -e /etc/init.d/cupsys ]; then
    /etc/init.d/cupsys restart
fi
```
という記述があります。

この記述部分を3箇所とも消して、その3箇所に以下の1行を追加してください。

```
systemctl restart org.cups.cupsd.service
```
保存したらOKです。

<br>
最後に、ドライバのインストールをしましょう。
下のコマンドを実行して、ドライバを配置します。

```
//作業用ディレクトリに移動しておく
$ sudo cp -r temp/opt/* /opt/
$ sudo cp -r temp/usr/bin/* /usr/bin/
```
次にこのコマンドでドライバのインストールをします。

```
//プリンタ名は読み替えてください
$ sudo /opt/brother/Printers/dcpj752n/cupswrapper/cupswrapperdcpj752n
```

以上でドライバ等のインストールは完了です。

## プリンタの設定

さて、プリンタの設定をしていきましょう。
以下のURLにアクセスしてください。
http://localhost:631/

CUPSの操作画面が開きます。便利ですね。
**管理**タブを選択し、**プリンタの追加**を選択しましょう。

ユーザー名（root）とパスを聞かれるので入力。
**プリンタの追加画面**が開きます。

僕の場合は、プリンタをLANに接続しているので`発見されたネットワークプリンタ`に表示されているプリンタを選択して、`続ける`を選択。

次の画面で、空欄になっている**プリンタの場所**を適当に入力して、`続ける`→`プリンタの追加`を選択で、追加が完了します。

<br>
追加が完了したら、上部の**プリンタ**タブを選択し、追加したプリンタ名を選択します。
初期状態で、`メンテナンス`になっているプルダウンリストがあるので、そこを`テストページの印刷`に変えると、テストページが印刷されます。

<br>
これで動かない場合は、もうひと手間必要です。(おそらくLAN接続の場合は100％動かないと思います。)

**プリンタ**タブを選択した状態で、プルダウンメニューが`メンテナンス`になっていることを確認してください。
右のもう一つのリストが`管理`になっていると思いますが、ここを`プリンタの変更`に変えてください。

するとプリンタの変更画面が開くので、`発見されたネットワークプリンタ`を選択します。
あとは`続ける`を押していって変更を完了しましょう。

変更ができたら、もう一度テストプリントを行ってみてください。
うまく行くはずです。


# メモ
* brotherのプリンタは32bitライブラリを入れないと動かない
* cupsの名前が変更されていたので、起動できない
* 最後の、プリンタ再選択

の所でつまづきました。
最後のは原因がわからなかったので戸惑いましたが、brother公式が解説してたので、バグかな？