arch linux 常用するための環境構築メモ

途中からメモしてるのもあるので、わりとカジュアルに抜けていそうだが、まあ大体情報転がってるだろう :yoshi:
同様の状況になってた方いればコメントくださいくれ

基本姿勢として、ほぼ ArchWiki に書いてあることをやっているだけである。
とくに意識して入れたものとハマったところを記述しているだけなので、真似する場合はこんな記事見ずに ArchWiki 見て、どうぞ

https://wiki.archlinux.jp/index.php/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89

# ArchLinux の install

installをメモるのを忘れた :atamanowaruihito:
こんどMacにでも入れるときに書き残したい

## pacstrap 

インストールの中で、pacstrapコマンドでlinuxカーネルやら開発用のコマンドやらを一気に入れるところがある。
bootするisoはshellも機能豊富、コマンドもある程度入っているのだが、
インストール後に立ち上げたArchにはほぼ何も入っていない状態になる。
なので、先にインストールしておいたほうがいいものもそこそこあるので記載。

```
# pacstrap /mnt base base-devel linux linux-firmware ...この先好きなものいれる
```
例えば以下

linux: カーネル。LTSがいい場合は `linux-lts` に置き換え。~~そもそもカーネルにLTS使いたがる人がArchLinuxを使うとは微塵も思えんのだが~~
neovim: なんかしらのエディタを入れるべき。vimでも可。emacsでも可。

dialog: CUIでwifiつなぐために入れておく。GUIでNetworkManager使うまでor緊急時のコマンド。

## AUR
AUR helper YAY
pacman公式リポジトリ以外から入れたいとき、ビルドからやってくれるパッケージマネージャ。
よくYaourtで入れてる記事があるが、YaourtはOUTDATEになったので、更新されている `yay` をオススメ。

## debtap
debianの.debをarchで使いたいときに。
基本、debしかないときぐらいしか使わないかも

## Network
dhcpcd
(dhcpdはDHCPサーバーのdaemon。dhcpcdはclient daemon)
`# systemctl enable dhcpcd@ここにインタフェース名.service`
で有効化

現在は諸般の都合(このみ)でdhclientを使用

### VPN
これまた記事を書いているタイミングで社会情勢からリモート化がすすみ、会社もリモートになった。

L2TP/IPsec の接続が恐ろしく面倒なので、なんとかして楽をしたい。

UbuntuならGNOME版のl2tpプラグインで行けそう
https://blog.komeho.info/2018/06/03/2102/

Archでも設定として入れれば、行けそうな気がする。定かではない。

## bluetooth

Archwikiの通りやっていくが、
bluetooth のヘッドセット (イヤホンマイクなやつ) のためにpulseaudio-bluetoothもいれる

```
# pacman -S bluez bluez-utils pulseaudio-bluetooth
```

あと、bluetoothctl のペアリングは癖があった。
対話シェルでCUIな感じで操作するが、 `pair MACアドレス` を叩いてペアリング中も、他の操作ができてしまったりする。
ココらへん非同期でやってくれているみたいだが、いつプロセスが完了したか、みたいなのが非常に分かりづらい。
だいたいペアリングって思ってるより時間かかるということを忘れていて、ペアリングがSuccessしたか確認せず、すぐ connect して Failed になってしまう...みたいなのが起きがち。

## その他環境

### ターミナルエミュレータ

- Alacritty
- Konsole

上のが使いたいが、ちょっとArch+i3+lightDMだと不安定かも？i3がよくなさそうか？

### 解凍

unarchive
WinからのCP932のzipを解凍できる
はやく ShiftJIS is DEAD って言いたい

### キーボード

Xorgでのキー設定
https://wiki.archlinux.jp/index.php/Xorg_%E3%81%A7%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E8%A8%AD%E5%AE%9A#typematic_delay_.E3.81.A8_rate_.E3.81.AE.E8.AA.BF.E6.95.B4

としていたが、CtrlとCapsのswapが面倒だったので、今はsetxkbmapのオプション指定で切り替えている。

### フォント
https://wiki.archlinux.jp/index.php/%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88

/etc/fonts/local.conf に設定をぶっこむ
なるべく英語優先でフォントを当てたい構え

- Sans-serif ゴシック
  - Helvetica Neue
    - 手元にあったので手動でいれた
  - 源ノ角ゴシック Source Han Sans
    - `# pacman -S adobe-source-han-sans-jp-fonts`
- Serif 明朝
  - あまり興味ないので初期設定のまま
- Monospace
  - Cica
    - `$ yay -S ttf-cica`

絵文字を使うために
(noto-color-emoji)
ttf-joypixels

### 日本語IM

https://wiki.archlinux.jp/index.php/Fcitx

```
# pacman -S fcitx fcitx-mozc fcitx-configtool fcitx-im
```

- Mozcでそこそこ使うための暫定設定
  - ステータスバーのキーボードマークを右クリックし、 Configure
  - keyboard-Japanese (日本語入力ではなく、JISキーボードということ)
  - mozc (こちらで日本語入力をする)

- 英数/かな 設定
macと同じような設定にするには、
fcitx側のadvance設定からimeのactive/inactiveいじる

- WIP:日本語入力できないアプリがある

いじってたら一応動作した？とおもう
ただリアルタイムの反映ではない。確定時に文字が一気に入る感じ。
https://qiita.com/aki-s/items/809db571465bb041cc48
このあたりの記事でも言及されていたが、gtk3のGUIがなかった説は今のとこ有力。

```
# pacman -S fcitx-frontend-gtk3
# pacman -S fcitx-gtk2 fcitx-gtk3 fcitx-qt5
```

もうやたらめったらである。
この、gtk3入れて再起動したあたりで動いた感あった。
ただchromeでは使えてたのがよくわからず。
~~chromeはgtk+だったから動いていたとか？~~
https://mag.osdn.jp/14/03/13/150000
この時点でgtk+からAuraに変わってる。今もAuraだろうか。だからmozcは使えてたんかな

あと、記述中、ウィンドウ内にリアルタイムで表示がされない(確定しないと出てこない)ものがあったので、
とりあえず、以下の記事見ながら、Fcitx XIM Frontend を有効にし、追加の Configure のチェックいれて(Use On The Spot Style for XIM)、fcitxをrestartしたら動いた
http://fedoranize.seesaa.net/article/448609682.html

一応、今度時間とって fcitx-diagnose の診断みながらいじってみるべきか。

200723追記:
KonsoleとかKDEについては `~/.xprofile` の設定が必要そう。
今の所下記で動作した
KonsoleはQT_IM_MODULEを書いたら動作したのでもうこれわかんねぇな

```conf:~/.xprofile
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
```

### ショートカット

画面lock
⌘+L (winに揃えた)

- WindowManager系  
Application から Window Managerを選択すると、設定がひらく。  
`Super + ←,→` を ワークスペースの切り替えにあててみる。  
winだと、 `Win+Ctrl+左右` なので、Ctrl間違っておしそう  

### マルチディスプレイ
https://wiki.archlinux.jp/index.php/DisplayLink

linux-headersがカーネルに合ったただしいのが入っていなかったらしい。
https://savoisn.github.io/post/displaylink_on_arch/
参考

USB3.0-DVI でマルチディスプレイをしたいので、DisplayLink で接続する

Debianはこのあたりいれてる dkms libdrm-dev
https://qiita.com/menphim/items/ff0a708a917d2b8256b5

Using Displaylink on Arch Linux.
https://savoisn.github.io/post/displaylink_on_arch/

```
$ yay -S core/linux-headers
```

Screen Layout Editor (ARandR)
xrandrのGUI設定できるやつ

ちょっとディスプレイの繋ぎ変えが多く、CUIだと煩雑になったので、
最近はほぼ ArandR を使用

### スクリーンショット

~~gnomeのスクショ機能を流用。~~

```
# pacman -S gnome-screenshot
```

~~ちょっと使いづらくてgtkのスクショ機能を使用中~~

Macでいう Skitch のように、スクショして簡単に矢印とか囲いとか文字つけて保存できるようなドローイングツール？キャプションツール？も物色
↑スクショ機能もあったのでこれに集約

```
$ yay -S shutter
```

ただ、起動するといろいろないと言われるので、追加で入れる必要がある

```
WARNING: gnome-web-photo is missing --> screenshots of websites will be disabled!

WARNING: Goo::Canvas/libgoo-canvas-perl is missing --> drawing tool will be disabled!

WARNING: Image::ExifTool is missing --> writing Exif information will be disabled!

WARNING: Gtk2::AppIndicator is missing --> there will be no icon showing up in the status bar when running Unity!

...
```

左様か。

### プルーライトカット

Redshift

```
# pacman -S redshift
```

だいたい以下で使える

```
$ redshift -O 4300K #色温度指定
$ redshift -x #設定のリセット
```

### ランチャ

~~エラー。うごかせず。~~
Qtのインストールができてなかった。
pacmanってこういう依存性を解決してくれてると思ったんだが違うのか...

```
# pacman -S albert
```

Qtのversionがないとかでエラー。

```
$ albert
albert: /usr/lib/libQt5Core.so.5: version `Qt_5.14' not found (required by /usr/lib/libQt5Charts.so.5)
albert: /usr/lib/libQt5Core.so.5: version `Qt_5.14' not found (required by /usr/lib/libQt5X11Extras.so.5)
```

上記の通りqt5-baseを入れて解消

```
# pacman -S qt5-base
```

### アプリケーション

ランチャーついでに、手動で認識してもらう方法
Linux側に認めてもらう場合、各 `applications` と指定されているディレクトリに `hoge.desktop` みたいなファイルでリンクを張ることで、アプリとして使えるようになる

### Wine

フォント設定がうんこなので
https://htlsne.hatenablog.com/entry/2017/01/17/120802

https://mongonta.com/f273-howto-install-wine-to-ubuntu/

### 電源管理

ACPI という単語が出てきた。後で詳細調査。
とりあえずcbatticonをいれてみる

### キーボードバックライト

/etcを直でいじろうとしたら、いいのがあった

```
$ yay -S kbdlight
```

### 配信 (OBS)

```
$ yay -S obs-studio-git
```

## 開発

### PHP
仕事柄いろいろVersionが動くので、手元もIDEのために合わせておく
phpenvをつかってみている

総合的にはanyenvでいれてる

```
yay -S anyenv
```

anyenvの細かい設定などは公式リポジトリ参照。


phpenvから 7.3.8 ビルド中、なんかエラー出た

```
-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
configure: error: Cannot find libtidy
-----------------------------------------
```

re2cとlibtidyというものが要るのか。
pacmanでみると、re2cとphp-tidyがあるのでそれぞれ導入。

```
# pacman -S re2c php-tidy
```

はい動いた

#### anyenv以下のphpenv以下にcomposer

通常、composerを入れるとホーム以下に入ってしまうので、
anyenvで管理ができなくなる

https://ngyuki.hatenablog.com/entry/2014/03/09/054239

### GAS

gasを手元で編集する用にclaspをいれた
https://qiita.com/zaki-lknr/items/b4954c222c1c1db92caf

### Docker

Linuxではsudo権限なしでdockerを起動することができない。
Arch公式でdockerグループにユーザを追加する解決策が示唆されているが、
dockerグループに一般ユーザを所属させるのは、su権限を与えるのと同義だ、とセキュリティ上の注意喚起がなされている。
https://wiki.archlinux.jp/index.php/Docker

わけのわからないdockerfileを起動しないように気をつけよう。というやつである。
以下参考に追加
https://motomichi-works.hatenablog.com/entry/2019/07/19/200154

### Android

開発まではいかないかもしれないが、MTPぐらい入れてみたい

https://wiki.archlinux.org/index.php/Media_Transfer_Protocol