BobbyQuineのブログ(備忘録)

Linux関係の備忘録、その他タバコ、Vape関連なんかも。

youtubeを作業用BGMに使う時、広告鬱陶しくないですかと言うお話(解決策、シェル芸??)

ども、BobbyQuineです。タイトルにもある通り、YouTubeの広告、鬱陶しくないですか??普通に誰かの実況とか見ているぶんにはまぁいいですが、作業用BGMとして使っている最中に広告が流れてしまうと集中力も乱されますし広告スキップのために作業を中断しなければならなくなります。そこで今回は自分がYouTubeを作業用BGとして使うときにやっている方法をご紹介します。

 

やるなら自己責任で

 

今回使っていくのは基本的にはvlcです。Linuxユーザーにはある程度お馴染みなのではないでしょうか??Windowsのものも存在します。なお、後半ではBash向けのコマンドなんかを書いていくのでLinuxMac OSユーザーはそのまま使えます。Windowsコマンドについては詳しくないのでその辺はご了承ください。基本的にLinux向けに書いていきます。

 

VLCのインストール

実はVLCメディアプレイヤーにはストリーミング機能が備わっています。この機能では動画本編しか再生されません。つまり最初や途中の広告が再生されません。なのでこいつを使えば広告に作業を邪魔されることがありません。インストールは使っているディストリビューションの公式リポジトリからおそらくできると思います。とりあえず以下にはUbuntuの場合とArch Linux の場合を記載しておきます。

 

Ubuntu の場合

$ sudo apt-get install vlc

 

Arch Linux の場合

$ sudo pacman -S vlc

 

使いかた

基本的にはコマンドで何とかなります。適当に動画のURLを持ってきて

 

$ vlc https://www.youtube.com/watch?v=zXtsGAkyeIo

 

まぁ、これで再生できます。

 

これを使って作業用BGMの再生リストを作って置きます。

 

再生リストの作成

と堂々と書いたわけですが別に大層なものではなくただURLをテキストファイルに記述しただけものです。

 

$ cd ~

$ mkdir Video

$ mkdir ~/Video/List

$ cd ~/Video/List

$ vim list

 

以下ファイル内容--------------------------------------------------------------------

 

Carly Rae Jepsen - Call Me Maybe
https://www.youtube.com/watch?v=fWNaR-rxAic

t.A.T.u. - All The Things She Said
https://www.youtube.com/watch?v=8mGBaXPlri8

Selena Gomez, Marshmello - Wolves
https://www.youtube.com/watch?v=cH4E_t3m3xM

Selena Gomez - Come & Get It
https://www.youtube.com/watch?v=n-D1EB74Ckg

Avicii - Levels
https://www.youtube.com/watch?v=_ovdm2yX4MA

Егор Крид & MOLLY - Если ты меня не любишь (премьера клипа, 2017)
https://www.youtube.com/watch?v=RI4ALqHtGrs

t.A.T.u. - All About Us (Uncensored)
https://www.youtube.com/watch?v=6yP4Nm86yk0

以上----------------------------------------------------------------------------------------

 

リストの再生コマンド(シェル芸??)

まぁ、こっからは再生コマンドです。とりあえずそのものを記します。

 

$ vlc $(cat list | grep http | tr '\n' ' ')

何だかシェル芸っぽいことをやってます。これについて一応一つずつ解説していきます。

 

まず外側のvlcコマンドは置いといて括弧で囲われた区間の処理について、catコマンドでlistファイルの中身を読み出します。そしてそれをパイプでつないだgrepコマンドに渡します。grepコマンドでは " http " と言う文字列のある行だけに絞ります。で、それをtr コマンドにパイプで渡します。最後のtrコマンドでは改行をスペースに変換しています。これで出来上がる文字列はいかの様になります。

 

https://www.youtube.com/watch?v=fWNaR-rxAic https://www.youtube.com/watch?v=8mGBaXPlri8 https://www.youtube.com/watch?v=cH4E_t3m3xM https://www.youtube.com/watch?v=n-D1EB74Ckg https://www.youtube.com/watch?v=_ovdm2yX4MA https://www.youtube.com/watch?v=RI4ALqHtGrs https://www.youtube.com/watch?v=6yP4Nm86yk0

 

見事にURL同士の間にスペースの入った一行が出力されているのがわかります。で、上のコマンドではこれをvlcの引数しているわけです。

 

ここで、「毎回同じ順番に再生されては飽きてしまう」と言う僕のような人は以下の様に途中にsortコマンドを挿入し、URLをランダムに入れ替えるといいでしょう。

 

$ vlc $(cat list | grep http | sort -R | tr '\n' ' ')

 

以上、作業用BGMにYouTubeを使うための豆知識でした。

 

追記(2018/05/01) : 今日になって気になってやって見たところ上記コマンドのtrコマンド部分はなくても動作することが分かりました(何か悔しい)。なのでコマンドは以下のものでもオッケーです。

 

$ vlc $(cat list | grep http | sort -R )

 

ここから先は蛇足の個人的な最近のこと。

最近twitterのシェル芸botと言うものを知りまして、それとともにシェル芸という存在を知ったのですよ。ちゃんとは分かっていないのですがコマンドをパイプでつなぎまくることで複雑な処理を一発で終わらせることの様で、これまたすごい人たちがいろんなことをやっている様なのですよ。それに興味を持ってしまったが故に、今回紹介したコマンドは若干シェル芸っぽいことが行われているわけです。これをシェル芸と読んでいいのかわ分かりませんが今回の件で結構おもしろい世界だな、と思いました。

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

 

参考ページ

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

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のインストール

$ sudo pacman -S apache

 

/etc/httpd/conf/httpd.confの変更

アクセス制限を行います。今回外からのアクセスはなしで自室の有線で組まれている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

 

SSL

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

 

以上。httpやhttpsで見たいデータは " /srv/http/ " に置いておく。

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を入れる

 

# pacman -S 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 pacman -S dhcp

 

$ 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のgoogleDNSサーバーだと思うのですが、つい最近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