X環境におけるキーボードのCapsLockキーを無効化する
ども、BobbyQuineです。新しくelecomのむっちゃ安いキーボードを二つ購入し、肩こりになりづらい環境を手に入れました。若干キー配置が違うのでまだ使いこなせていませんがw。で、です。それのせいでTabキーとCapsLockキーを押し間違えることが多々あり、むちゃくちゃ鬱陶しいのでとりまCapsLockキーをCtrlに変えてしまおうと思います。コンソール環境では以前こちらでやっております。
http://bobbyquine.hatenablog.com/entry/2018/03/19/205808
/etc/X11/xorg.conf.d/00-keyboard.confの編集
$ sudo vim /etc/X11/xorg.conf.d/00-keyboard.conf
Option "XkbOptions" "ctrl:nocaps"
とセクション内に加える。以上。
なお、ただ無効化するだけやその他色々な設定種類は以下のコマンドで確認できる。
$ grep -E "(ctrl|caps):" /usr/share/X11/xkb/rules/base.lst
参考ページ
Raspberry Pi 2 Model B (+Arch)でhttpサーバー組んでみた件
ども、BobbyQuineです。今回はApacheを使って例のRaspberry Piをhttpサーバーにしてみました。ただ、ローカルネットワークのみでの実験用です。グローバル固定IP 持ってないし。
やるなら事故責任で。
まぁ、ぶっちゃけArch Wikiに書いてあるまんまです。
https://wiki.archlinux.jp/index.php/Apache_HTTP_Server
Apacheのインストール
アクセス制限を行います。今回外からのアクセスはなしで自室の有線で組まれているPCからのアクセスのみにします。
$ sudo vim /etc/httpd/conf/httpd.conf
もともと " Listen 80 " となってる箇所を探し以下のように書き換える。
Listen 127.0.0.1:80
Listen 10.0.0.1:80
これは私の環境の場合である。127.0.0.1はループバック、10.0.0.1はこのラズパイで同時に実行されているDHCPサーバーのヤツである。
あとはどうせ自分でしか見ないページなのであんま意味ないけど一応後学のために " ServerAdmin " の項目を書き換えたり(メルアド)。
あとこれはコメントアウトしとく。ユーザー領域にアクセスさせないため。
Include conf/extra/httpd-userdir.conf
あとこの後でSSLを使うようにもするので
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
Include conf/extra/httpd-ssl.conf
のコメントアウトを外しておく。
/etc/httpd/conf/extra/httpd-userdir.confの編集
$ sudo vim /etc/httpd/conf/extra/httpd-userdir.conf
サーバー署名を非表示
ServerSignature Off
サーバー情報非表示
ServerTokens Prod
DocumentRootディレクトリの権限変更
$ sudo chmod o+x /srv/http
OpenSSLをインストールする。
$ sudo pacman -S openssl
自己署名証明書を作成
$ cd /etc/httpd/conf
$ sudo openssl req -new -x509 -nodes -newkey rsa:4096 -keyout server.key -out server.crt -days 1095
$ sudo chmod 400 server.key
$ sudo chmod 444 server.crt
httpdの起動
$ sudo systemctl start httpd
起動時に自動的にDaemonが起動するようにするには
$ sudo systemctl enable httpd
vimでの小技備忘録
完全個人的な備忘録
すべての行の最初に文字列を追加 (追加する文字列はexample)
:1,$s/^/example
すべての最後の行に文字列追加
:1,$s/$/example
とある文字列のある行を削除
:g/example/d
とある文字列のない行を削除
:v/example/d
vim内で検索
/example
ddは削除ではなく切り取りっぽい
Raspberry Pi 2 Model BにArch Linuxを入れてみた話(その他DHCPサーバー、ネットワークスピーカー等)
ども、BobbyQuineです。最近は気温が暖かくなってきており、DHCPサーバーとかSSHサーバーを運用している自室は暑いぐらいになってきています。さすがにこのままでは夏まで持たないのでDHCPサーバーをRaspberry Piに変えてしまおう、と言うお話。
とりま、やるなら自己責任で。
参考ページ
https://itdecoboconikki.com/2017/03/18/raspberry-pi-3-arch-linux-arm-v7-2017-03-01-install/
インストール
SDカードを用意する。そしてそれをPCにつないで/devを確認し、どんなデバイス名なのかを確認する。ここではmmblk0とする。今回このインストール作業はArch Linuxで行っていく。また、どうやらsudo では実行できない箇所があるようなので一時的にrootアカウントのロックを解除している。
# parted /dev/mmblk0
(parted) mklabel msdos
(parted) mkpart primary fat32 1MiB 128MiB
(parted) mkpart primary ext4 128MiB 100%
(parted) q
# mkfs.vfat /dev/mmblk0p1
なお、ここでmkfs.vfatがないと怒られたら
# pacman -S dosfstools
# mkfs.ext4 /dev/mmblk0p2
# cd /home/username/
# mkdir RaspberryPi
# cd RaspberryPi
# mkdir root
# mkdir boot
# mount /dev/mmblk0p1 boot
# mount /dev/mmblk0p2 root
# wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz
なお、ここでRaspberry Pi 3の人は
# wget http://os.archlinuxarm.org/os/ArchLinuxARM-rpi-3-latest.tar.gz
これより先も適宜対応のこと。
# bsdtar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C ./root
# sync
# mv ./root/boot/* ./boot/
# umount root boot
起動及び設定
これでインストールが終わったのでmicroSDをPCから取り出してRaspberry Pi 2にさす。であとはディスプレイとかキーボードとかLANとか適当に刺して最後にmicroUSB のケーブルさして起動。初期状態でアカウントはrootしかなく、そのパスワードはrootである。こっからは細々した設定をやっていく。
ロケール関係
とりまvimを入れる
また、キーボードをjp106に変えておく。
# loadkeys jp106
# vim /etc/locale.gen
必要な奴のコメントアウトを外す。下記URL参照。
http://bobbyquine.hatenablog.com/entry/2018/01/13/235220
# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# echo KEYMAP=jp106 > /etc/vconsole.conf
hostname関係
# echo myhostname > /etc/hostname
同じ名前を/etc/hostsにも追加
#vi /etc/hosts
127.0.0.1 localhost.localdomain localhost
::1 localhost.localdomain localhost
127.0.1.1 myhostname.localdomain myhostname
ネット関係
wi-fiをつかう予定なので
# pacman -S iw wpa_supplicant dialog
rootパスワードの変更
# passwd root
新規ユーザー作成
# useradd -m -g users -G wheel -s /bin/bash newusername
# passwd newusername
sudoの追加
# pacman -S sudo
#visudo
username ALL=(ALL) ALL
まぁ、とりあえずこの辺までやっときゃ使えないこともないでしょう。なお、RasPiだからなのか最初からOpenSSHは入ってたし、sshd.serviceも有効化されていた。そしてちゃんと設定ファイルを覗いたわけではないので未確認だがrootへのリモートログインはできないようになってる臭い。
ここから先はこれまでデスクトップPCにやらせていたことをRasPiでやるために入れる。
オーディオ関係
$ sudo pacman -S alsa-utils pulseaudio paprefs
$ sudo vim /etc/pulse/default.pa
load-module module-native-protocol-tcp auth-anonymous=1
Wi-Fi設定
適当なUSBタイプのWi-fiモジュールをつないで
$ sudo wifi-menu
でプロファイル作って
$ sudo netctl enable profilename
で自動的にwifiにつながるようにしておく。なお、これは自宅のみで使う予定なのでこれでいいのだが、複数のWi-fiを自動切替するにはこちらを参照。
https://wiki.archlinux.jp/index.php/Netctl
DHCPの導入
今回こいつはDHCPサーバーとしても使うので。別記事。
http://bobbyquine.hatenablog.com/entry/2018/04/10/192927
自動的にDHCPサーバーが起動するようにする(systemdにおけるプログラムの自動起動)
ども、BobbyQuineです。今回はRaspberry pi 2(Arch Linux ARM) でdhcpサーバ組んだんでその方法をメモ書きとして残しておきます。なお、綺麗なやり方ではありません。(だってShellスクリプトの中にiptablesコマンド含まれてるし、起動時に固定IPをnetctl使って割り当てる設定方法がいまいち分からなくてip コマンドで何とかしてるし)
2018/04/11 追記:netctlを使ってのIP固定方法が分かったので追記。Unit作成の方法は個人的に忘れないために文章を取っておく。
毎度お馴染み、やるなら事故責任で
環境
先述のように今回はRaspberry Pi 2にArch Linux(公式が出してるわけではないので正式の記述ではない)を導入してそいつでDHCPサーバーを組みます。Wi-Fiドングルからインターネット回線を確保して、そいつをNATで有線の方にまわします。ここで無線インターフェース名はwlan0、有線インターフェース名はeth0であるものとします。もしこの記事を参考にする場合は ' $ ip link ' 等で自分のネットワークインターフェース名を調べて置き換えてください。また、wifiの起動時自動接続設定なんかはすでに済ませてます。
http://bobbyquine.hatenablog.com/entry/2018/04/10/192935
とりまdhcpdの導入
$ sudo vim /etc/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
INTERFACES="eth0";
option domain-name "";
log-facility local7;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.10 10.0.0.20;
option routers 10.0.0.1;
option domain-name-servers 1.1.1.1;
}
#systemctl enable dhcpd4.service
本来よく使われるDNSは8.8.8.8のgoogleのDNSサーバーだと思うのですが、つい最近1.1.1.1が話題になっていたので。
IPフォワーディング
$ sudo vim /etc/sysctl.d/30-ipforward.conf
net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1
ここから先はやり方を変えたので取り消し線が終わるとこまで飛んでください。
eth0に固定IPを割り振る作業とiptablesでチェインを追加するコマンドをまとめてシェルスクリプトに書く
今回一番ダメな箇所です。Arch Wikiのdhcpdのページを見ると自動で割り振るのにnetctlを使うとか書いてあるのですがいまいち使い方が分からなかったので「もういいもん、適当にシェルスクリプト書いてUnit化してやる」とヤケになってこんな風にしちゃいました。なお、ファイル名は当時ToughBookにネット共有するために書いたことによるものです。
$ vim toTOUGH.sh
#!/bin/bash
ip link set up dev eth0
ip addr add 10.0.0.1/24 dev eth0
iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o wlan0 -j MASQUERADE
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
Systemdの起動時実行ファイル(Unitファイル)の作成
まぁsystemdの特性とかUnitファイルの書き方とかについての情報はググりゃ結構出てくるので他の人に任せるとしましょう。この辺が参考になりました。
https://qiita.com/tkato/items/6a227e7c2c2bde19521c
https://wiki.archlinux.jp/index.php/Systemd
まずはさっき作ったシェルスクリプトを/opt下に移動させます。/opt下に適当な(ただし他のサービス名とは被らない) ディレクトリ作って(ry
# mkdir /opt/RasPiNet
# mkdir /opt/RasPiNet/bin
# mv toTOUGH.sh /opt/RasPiNet/bin/
では今渡こそUnitファイルを作っていきます。完全に理解しているわけではないのであれですけど動いてはいるのでOK と言うことで。AfterとかBeforeとか抑えてるからいいよね。
# cd /etc/systemd/system/
# vim raspinet.service
Description = NAT from RasPi
After = sys-subsystem-net-devices-eth0.device sys-subsystem-net-devices-eth0.device
Before = dhcpd4.service
ConditionPathExists=/opt/RasPiNet/bin
[Service]
ExecStart=/opt/RasPiNet/bin/toTOUGH.sh
Restart=no
Type=simple
[Install]
WantedBy=multi-user.target
systemdに追加Unitがあることを認識させる
# systemctl daemon-reload
作ったサービスとdhcpd4.serviceが自動起動するようにする
# systemctl enable raspinet.service
# systemctl enable dhcpd4.service
systemd-networkdをdisableにする
# systemctl disable systemd-networkd
netctlを用いてeth0に固定IPを割り振る
# vim /etc/netctl/ethernet-static
Description='for dhcpd'
Interface=eth0
Connection=ethernet
IP=static
Address=('10.0.0.1/24')
SkipNoCarrier=yes
# netctl enable ethernet-static
iptablesでNAT関係の設定
# iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o wlan0 -j MASQUERADE
# iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
# iptables-save > /etc/iptables/iptables.rules
# systemctl enable iptables
まぁ、こんな感じですかね。あとは再起動してみれば動くか分かる。わざわざUnitファイルを書いて新しいサービスを作らなくても使えるようになった。
独自コマンド作成の方法(個人的備忘録)
ども、BobbyQuineです。今回は個人的コマンドの作成方法を記録として残しときます。ググるといろいろと方法が出てくるのですが(例えばaliasでなんちゃらしたり)、とりあえず自分で設定した方法をメモっとく。ってか完全に参考文献そのまま。
参考文献
https://qiita.com/yoshiken/items/2b8e6c24d6b95e65b625
やり方
まぁ、ざっと、作ったスクリプトのあるディレクトリにPATHを通してやればいいだけ。
まずは作ったスクリプトを置いとく場所を作る。これは各自好きなところへ。僕はこのPCには一つしかアカウントを作っていないのでこれでいいやってことで
$ mkdir ~/Command
で、あとは/etc/profileの末尾に以下の二行を加えてやるだけ
# vim /etc/profile
PATH=$PATH:/home/username/Command
export
追記:これだと他のユーザーとかにも影響してくるので~/.bashrcの末尾に
PATH=$PATH:/home/username/Command
って追加する方がいいと思う
以上。これで後はこの作った~/Commandディレクトリに作ったスクリプトを入れてやるだけ。
独自コマンドを設定する利点
例えばmplayerでvideoの出力をフレームバッファに直接描画する場合、
$ mplayer -quiet -framedrop -vo fbdev2 filename
だとかvideoサイズが大きい場合は
$ mplayer -quiet -framedrop -vo fbdev2 -xy 500 -zoom filename
と、コマンドをうつわけですが長ったらしくて面倒くさい。でもだからと言ってシェルスクリプトを組んでも別のディレクトリにあるファイルを再生する場合絶対パス何かをうたなあかんわけでそれもだるい。なので適当にシェルスクリプトっぽいのを作ってそれにPATHを通すことでどこからでもちゃちゃっとスクリプトを実行出きるようにする。って感じで。
とりあえずそのスクリプトものっけときますか。あ、echo文の中の英文は適当に自分で分かりゃいいやって酔っ払いながら書いたので文法的には間違ってると思います。
#!/bin/bash
if [ $1 = --help ]; then
echo "it means mplayer -quiet -framedrop -vo fbdev2"
echo "if you have to set framesize, you have to write x pixel size to 1st argument."
echo "if you do not have to set the x-size, 1st argument=0"
else
if [ $1 = 0 ]; then
mplayer -quiet -framedrop -vo fbdev2 $2
else
mplayer -quiet -framedrop -vo fbdev2 -xy $1 -zoom $2
fi
fi
uim + Anthyのカスタマイズ (Arch Linux)
ども、BobbyQuineです。今回は前回あたりにCLIで日本語使うために入れたuimとAnthyのカスタマイズをしていきます。実はあの記事を書き終わったあと再起動を行ったところ、xfce上でもuimが起動してしまいfcitx+mozcが使えなくなってしまいました。xfceを起動するときにuimを機動しないようにすればいいはずなのですがどうにもやり方を見つけることができておらず、とりあえずはuim+Anthyで生活しなければならなくなったわけです。そこでAnthyやuimをカスタムしようということで。
uimのカスタム
前回、少し書きましたが~/.uimでuimの設定が記述できる。どうやらこの設定ファイルはSchemeというプログラミング言語で書かれているようである。正直Schemeについての知識はないのでぼんやりとしか分からないが結構おもしろそうな言語である。さてとりあえずこのuimは余計な子音が排除されるように設定されている。個人的にはこれは好ましくない。そこでまずはここのコードを丸コピして~/.uimに追加した。
これで子音は残るようになったが、たとえば「あrch」と打った場合にcとhが残ってくれない。どうにも2つの子音+母音を使ってひらがなを入力するパターン(たとえば子の場合はc+h+iで「ち」となるような)の子音二つはその後に子音が着てしまうと消えてしまうようである。この辺どうしようかと考えていたところ、こんな記事を見つけた。
http://d.hatena.ne.jp/mkotha/20100913/1284387994
ここにあるコードをさらに追加してみたところ、子音は打てるようになったが先ほどの例のような箇所だけ全角英字となってしまった。何か気持ち悪いのに加えて個人的に全角英字は嫌いなのでこれを半角のものに変えたいと考えた。Schemeについての知識はほぼないに等しかったので適当に同じようなことやろうとしているサイトなんかをみてちょっと分かった気になりながら弄るべき該当箇所を探したところここっぽい
以下上記サイトにあるコードから引用-------------------------------------------------------------------
(define (fullwidth str)
(let ((w-str (ja-wide str)))
(list w-str w-str str)))
-------------------------------------------------------------------------------------------------------------------------
これの三行目"(list w-str w-str str)))"を弄ればとりあえずは動くものが作れそうだということでここを
(list str str str)))
と変えてみた。すると期待通りの動きになったのでこれでよし。ただ一ヶ所、なぜか「thy」という文字列は変な挙動をするのでそのうち何とかしたい。まぁ、あんまし使う時ないし放置で。気が向いたらやる。
Anthyに個人的辞書を追加する
ざっとググってみるとどうやらkasumiというGUIツールがあるらしい。そこでとりまそれをいれてみたがやっぱわざわざカーソルを移動させるのが面倒くさい。で、だ。kasumiについてもうちょいと調べてみると " ~/.anthy/private_words_default " というファイルに平文で辞書が追加されて行っているようである。さらにAnthyの辞書はこの中身が50音順に並んでいなければならないようである。それをふまえて適当にシェルスクリプトを書いた。
anthydictionary.sh ----------------------------------------------------------------------------------------------
#!/bin/bash
export LANG=ja_JP.utf8
echo -n "spelling: "
read spel
echo -n "sound: "
read sou
echo "$sou #T35*500 $spel" >> ~/.anthy/private_words_default
mkdir /tmp/foranthy
sort ~/.anthy/private_words_default >> /tmp/foranthy/private_words_default
mv /tmp/foranthy/private_words_default ~/.anthy/
rm -r /tmp/foranthy
-------------------------------------------------------------------------------------------------------------------------
ここでわざわざexport LANG=ja_JP.utf8としているのは環境がこれじゃないとsortコマンドでの処理が適切に行われないためである。あとはまぁ自分で文章打ってて変換につまった箇所があったらその都度このスクリプトで追加している。なおkasumiについての解説はどっかで適当に読んでください。
以上、ざっと備忘録でした。