youtubeを作業用BGMに使う時、広告鬱陶しくないですかと言うお話(解決策、シェル芸??)
ども、BobbyQuineです。タイトルにもある通り、YouTubeの広告、鬱陶しくないですか??普通に誰かの実況とか見ているぶんにはまぁいいですが、作業用BGMとして使っている最中に広告が流れてしまうと集中力も乱されますし広告スキップのために作業を中断しなければならなくなります。そこで今回は自分がYouTubeを作業用BGとして使うときにやっている方法をご紹介します。
やるなら自己責任で
今回使っていくのは基本的にはvlcです。Linuxユーザーにはある程度お馴染みなのではないでしょうか??Windowsのものも存在します。なお、後半ではBash向けのコマンドなんかを書いていくのでLinuxかMac OSユーザーはそのまま使えます。Windowsコマンドについては詳しくないのでその辺はご了承ください。基本的にLinux向けに書いていきます。
VLCのインストール
実はVLCメディアプレイヤーにはストリーミング機能が備わっています。この機能では動画本編しか再生されません。つまり最初や途中の広告が再生されません。なのでこいつを使えば広告に作業を邪魔されることがありません。インストールは使っているディストリビューションの公式リポジトリからおそらくできると思います。とりあえず以下にはUbuntuの場合とArch Linux の場合を記載しておきます。
Ubuntu の場合
$ sudo apt-get install vlc
Arch Linux の場合
使いかた
基本的にはコマンドで何とかなります。適当に動画の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
参考ページ
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