BobbyQuineのブログ(備忘録)

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

Linux PC "を" Bluetooth Speaker としてつかう

ども

今回はLinux PCをBluetoothスピーカーとして使っていくよ

環境はArch LinuxBluetooth まわりで必要なものは前回のこれ↓で確認。多分今回のでは必要ないのも含まれてるけど

http://bobbyquine.hatenablog.com/entry/2019/01/15/204651

今回は作業中だったのでrootユーザーで進めていく。一般ユーザーでやるときは適宜sudo 使ってね。

参考にしたページ↓

https://wiki.archlinux.jp/index.php/Bluetooth#.E3.82.B3.E3.83.B3.E3.83.94.E3.83.A5.E3.83.BC.E3.82.BF.E3.81.AE.E3.82.B9.E3.83.94.E3.83.BC.E3.82.AB.E3.83.BC.E3.82.92_bluetooth_.E3.83.98.E3.83.83.E3.83.89.E3.82.BB.E3.83.83.E3.83.88.E3.81.A8.E3.81.97.E3.81.A6.E4.BD.BF.E3.81.86

 

設定

# pacman -S bluez bluez-utils

# vim /etc/bluetooth/audio.conf

以下を追加---------------------------------------------------------------

[General]
Enable=Source

------------------------------------------------------------------------------

 

起動、ペアリング

# systemctl start bluetooth

# bluetoothctl

シェルが変わる

[bluetooth]# power on
[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# scan on

同時にスマホBluetoothをONにする。

それっぽいのを探して

[bluetooth]# pair yourdevicesMacAdd

ペアリングしたらちゃんとコネクトもしてあげましょ

[bluetooth]# connect yourdevicesMacAdd

これで使えるようになったはず

 

以上

Arch Linuxでbluetooth Speaker (headphone)が使いたいわよ

ども、BobbyQuineです。正直書かなくていい気もするけど一応書いとく。

正直これ読めばいい

https://wiki.archlinux.jp/index.php/Bluetooth_%E3%83%98%E3%83%83%E3%83%89%E3%82%BB%E3%83%83%E3%83%88

 

つないだ相手はsonyのh.earなんちゃらかんちゃら。

 

必要なもの入れる

$ sudo pacman -S pulseaudio-alsa pulseaudio-bluetooth bluez bluez-libs bluez-utils bluez-firmware

ついでに

$ sudo pacman -S pavucontrol

 

その後、headphoneの電源入れて"ペアリングモードにしてから"

$ sudo systemctl start bluetooth.service

$ sudo bluetoothctl

これでシェルが変わるはず。多分下な感じ

[bluetooth]# power on

[bluetooth]# agent on

[bluetooth]# default-agent

[bluetooth]# scan on

そしたら多分使いたいデバイスMacアドレスとデバイス名出るから確認。

[bluetooth]# pair yourdevicesMacAdd

ペアリングできたら

[bluetooth]# connect yourdevicesMacAdd

 

でなんだけどこれだと多分接続できない

別でまたTerminal立ち上げて

$ pulseaudio -k

$ pulseaudio

でpulseaudio再起動させてからもっかいコネクトとかやってみて。

接続できたら

[bluetooth]# scan off

[bluetooth]# exit

 

以上。いつもbluetoothバイス使ってるわけじゃないので自動化とかその辺はやりません、Arch Wiki見て。

UEFIマシンにArch Linuxをインストールする

ども、BobbyQuineです。今回はUEFIマシンにArch LinuxをインストールしてXfce4を入れていきます。またその後その他個人設定をば。

今回のマシンはDell inspiron 15 5547だった気がす。

 

起動モードの確認

# ls /sys/firmware/efi/efivars

 

 まぁ、今回は先述の通りUEFIマシンなのでなんだか色々ズラッと出てきます。UEFI起動であることが確認できました。

 

ネット接続

# wifi-menu

 

他のArchマシンから設定ファイル持ってくるとパスワード打つ手間省ける。

 

システムクロック更新

# timedatectl set-ntp true

確認は

# timedatectl status

 

ディスクのパーティション分け

# parted /dev/sda

(parted) mklabel gpt

(parted) mkpart ESP fat32 1MiB 551MiB

(parted) set 1 esp on

(parted) mkpart primary ext4 551MiB 50GiB

(parted) mkpart primary ext4 50GiB 100%

(parted) q

 

今回はUEFIブートなのでGPTで。また、FAT32でのESPが必要。

その他のサイズや構成はお好きなように。私はいつも通りsda2=root、sda3=homeでswapは作らず。

 

フォーマット

# mkfs.vfat -F32 /dev/sda1

# mkfs.ext4 /dev/sda2

# mkfs.ext4 /dev/sda3

 

パーティションのマウント

# mount /dev/sda2 /mnt

# mkdir /mnt/boot

# mkdir /mnt/home

# mount /dev/sda1 /mnt/boot

# mount /dev/sda3 /mnt/home

 

ミラーリストの選択

# vim /etc/pacman.d/mirrorlist

Japan項目探してそのURLをファイルの先頭にコピー。

ってかインストールディスクにvimって入ってたっけ?前まで入って無かった気がしたけど

 

ベースシステムのインストール

# pacstrap /mnt base base-devel

 

fstabの作成

# genfstab -U /mnt >> /mnt/etc/fstab

 

chroot

chrootしていく。このとき、使用していたLiveCDが古かったためかうまくarch-rootが動かなかった。LiveCDを最新のものに取り替えるとうまく行った。

 

#arch-chroot /mnt /bin/bash

 

vimのインストール

私はvimmerなので設定にvimを使いたい

 

# pacman -S vim

 

ロケールの設定

# vim /etc/locale.gen

en_US.UTF-8 UTF-8

ja_JP.UTF-8 UTF-8

ru_RU.UTF-8 UTF-8

コメントアウトを外す。なおロシア語は私が個人的に使うので。

これが終わったら

# locale-gen

# echo LANG=en_US.UTF-8 > /etc/locale.conf

本来はjp106キーボードを呼び出すようにvconsole.confも編集するのだろうが、私はUS配列ユーザーなのでこのまま。

 

タイムゾーンの設定

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# hwclock --systohc --utc

 

ホストネーム

※斜体のところは自分で決める。

# echo myhostname > /etc/hostname

同じ名前を/etc/hostsにも追加

#vim /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

 

新規ユーザー作成

# useradd -m -g users -G wheel -s /bin/bash newusername

# passwd newusername

 

ブートローダーのインストール

今回はGrubでやっていきます。 UEFIなのかBIOSなのかでやり方の変わる項目です。

 

# pacman -S grub efibootmgr dosfstools

# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck --debug

# grub-mkconfig -o /boot/grub/grub.cfg

 

chrootから出る

chrootから出てシャットダウン、LiveCDを取り出して再度起動。

 

# exit

# shutdown now

 

sudoの設定

再起動後、sudo の設定をやっていく。とりあえずrootでログインし

 

# pacman -S sudo bash-completion

 

このbash-completionはsudoでコマンドを打ち始めたときのTab補完が行えるようにする。

次にユーザーでsudoを使えるようにする。

 

# visudo

username ALL=(ALL) ALL

と追加。visudo はviと挙動が一緒。

 

ここから先は別記事でまとめたいと思います。では。

 

Arch Linuxで、USBスピーカーを抜き刺ししたときに自動的に音声出力先を変える。

ども、BobbyQuineです。今までUSBスピーカーはWindowsマシンの方で使っていたのでとくには弄って無かったのですが、色々あってArchマシンの方で使うことになったのでちょいと弄ってみました。

 

※2019/01/14追記:/etc/asound.confを編集するように書かれていますがこれだとシステム全体に適応されます。また、後の方に書いてあるシェルスクリプトを実行するにはsudoが必要になってしまいます。なのでユーザーごとの設定ファイルである~/.asoundrcに読み替えたほうがよいかと思われます。

 

まずは以前やったこちらについて、

http://bobbyquine.hatenablog.com/entry/2018/01/29/225506

この " /etc/modprobe.d/alsa-base.conf "と言うファイルはいらないので削除します。

と言うか邪魔です。

 

$ sudo rm /etc/modprobe.d/alsa-base.conf

 

次にここ( Advanced Linux Sound Architecture - ArchWiki )を参考に " /etc/udev/rules.d/00-local.rules " を編集します。と言うかコピペです。

 

$ sudo vim /etc/udev/rules.d/00-local.rules

KERNEL=="pcmC[D0-9cp]*", ACTION=="add", PROGRAM="/bin/sh -c 'K=%k ; K=$${K#pcmC}; K=$${K%%D*}; echo defaults.ctl.card $$K > /etc/asound.conf; echo defaults.pcm.card $$K >>/etc/asound.conf'"
KERNEL=="pcmC[D0-9cp]*", ACTION=="remove", PROGRAM="/bin/sh -c 'echo defaults.ctl.card 0 > /etc/asound.conf; echo defaults.pcm.card 0 >>/etc/asound.conf'"

 

2018/10/17追記

上記設定だと、USBスピーカーをつないだまま再起動すると発生するデバイスナンバリングの変化に対応できないのでこうした。

 

KERNEL=="pcmC[D0-9cp]*", ACTION=="add", PROGRAM="/bin/sh -c 'cat /proc/asound/modules|grep usb|sed -e s/^/defaults.ctl.card/ -e s/\ snd_usb_audio// > /etc/asound.conf; cat /proc/asound/modules|grep usb|sed -e s/^/defaults.pcm.card/ -e s/\ snd_usb_audio// >>/etc/asound.conf'"
KERNEL=="pcmC[D0-9cp]*", ACTION=="remove", PROGRAM="/bin/sh -c 'cat /proc/asound/modules|grep intel|sed -e s/^/defaults.ctl.card/ -e s/\ snd_hda_intel// > /etc/asound.conf; cat /proc/asound/modules|grep intel|sed -e s/^/defaults.pcm.card/ -e s/\ snd_hda_intel// >>/etc/asound.conf'"

 

こういうところでシェル芸やってたのが役にたつね。

追記以上

 

まぁそのまんまですね。カーネルまわりはよく分からないのでアレですが要するにUSBサウンドカードが追加されたら " /etc/asound.conf " を編集してるってだけですね。

 

でもこれ、自動化したぶんCPU食ってるのよね、ってことでこんなものも作ってみた。

 

vim ~/Command/usbaudio

#!/bin/bash
if test $1 = "0" ;then
  echo "defaults.ctl.card 0" > /etc/asound.conf
  echo "defaults.pcm.card 0" >> /etc/asound.conf
  echo "set audio output Headphone"
else

 if cat /proc/asound/modules|grep 1 > /dev/null ; then
  echo "defaults.ctl.card 1" > /etc/asound.conf
  echo "defaults.pcm.card 1" >> /etc/asound.conf
  echo "set audio output USB Speaker"

 else
   echo "defaults.ctl.card 0" > /etc/asound.conf
   echo "defaults.pcm.card 0" >> /etc/asound.conf
   echo "set audio output Headphone"
  fi
fi

 

まぁUSBスピーカーを抜き差ししたときにこれ実行すれば出力デバイス変えてくれるよね、ってことで。しかもこいつを使えばUSBスピーカー刺した状態でも内蔵チップ出力に変えられる。

http://bobbyquine.hatenablog.com/entry/2018/03/24/164602

こんな風にコマンド化して

 

$ usbaudio 0

 

ってね。

 

ちなみに余談だけどこのシェルスクリプト入れ子のif文に使ってる条件式、

cat /proc/asound/modules|grep 1 > /dev/null

って部分、いつだったかツイッターで見かけて気に入って使ってるやり方。

順を追って説明すると

$ cat /proc/asound/modules

ってしたときにUSBスピーカーが刺さっていると当環境下だと

 0 snd_hda_intel
1 snd_usb_audio

って出力され、USBスピーカーが刺さってないと

 0 snd_hda_intel

って出力される。まぁ/dev化が監視されてて自動で書き換わるようにできてる(/proc下だから云々ってのはめんどいからry)。

んで、だ。こいつの標準出力をgrepに渡してやって " 1 " って条件で検索してやる。

で、検索結果は/dev/nullに捨てちゃう。欲しいのは処理が成功したか失敗したかだけだから。

USBスピーカーが刺さってればgrepは成功したとOS側に返す。刺さって無ければ失敗したって返す。これを横取りしてif文に渡してやればスピーカー刺さってる刺さってないが分けられる。

っていうかgrepって検索結果が無いときはエラーコード返してるのね、今回の収穫はそこだわ。

このやり方初めて見たときはめっちゃ感動したなぁ。

というわけでいつも通りグダグダな記事でした。

LaTeXでロシア語と日本語を共存させてノートがとりたい(キリル文字直打ち)

ども、BobbyQuineです。今回はLaTeXのお話。どうしてもロシア語の授業のノートをLaTeXで取りたかったのですが、どうにもjarticleだと全角キリル文字になってしまう。

これだと気持ち悪いし読み辛いしでどうしようもない。なのでチャチャッとググってみたら「多言語使うならbabelを使え!!」とのこと。しかし、このbabel、キリル文字に対応させた英字で打っていくと言うものでした。わざわざ対応覚えるのも面倒だし、こちとらru配列せっかく覚えたから使いたい。ということでキリル文字打ちの文章部分を対応する英字に変換していくシェルスクリプトを書いていこうと思う。今回も使用OSはArch Linux、使用するのはTexLive、下記URLで作成した環境であるものとする。

http://bobbyquine.hatenablog.com/entry/2018/01/26/001125

 

参考ページ

http://a011w.broada.jp/wbaefznh35st/latex/babel130.html

http://a011w.broada.jp/wbaefznh35st/latex/sample_babel_russian.pdf

 

 

その前に、

 

$ sudo pacman -S texlive-langcyrillic

 

キリル文字回りに必要なものを入れておく。

 

シェルスクリプト

http://a011w.broada.jp/wbaefznh35st/latex/sample_babel_russian.pdf

 こちらを参考にキリル文字を対応する英字に変換するシェルスクリプトを書いてく。

まぁご覧いただければわかるクソコードである。シェルスクリプト内のsed部分は面倒くさくなってシェル芸で書き揃えた。ついでに書いとくとシェル芸ばっかやってるとシェルスクリプトの細かい部分忘れてて結構手間取った。

※2018/10/9 追記: 下記シェルスクリプトに引用符"«"、"»"を追加。それぞれ"<<<<"、">>>>"で入力できるようにした。

 

以下ファイル内(filename = rulatex)--------------------------------------------------------------------------

 

#!/bin/bash

realtex=$(echo $1|sed "s/.tex/.dvi/")
mkdir /tmp/rulatex
cat $1|sed -e "s/<<<</«/g" -e "s/>>>>/»/g" -e "s/А/{A}/g" -e "s/а/{a}/g" -e "s/Б/{B}/g" -e "s/б/{b}/g" -e "s/В/{V}/g" -e "s/в/{v}/g" -e "s/Г/{G}/g" -e "s/г/{g}/g" -e "s/Д/{D}/g" -e "s/д/{d}/g" -e "s/Е/{E}/g" -e "s/е/{e}/g" -e "s/Ё/{E0}/g" -e "s/ё/{e0}/g" -e "s/Ж/{Z1}/g" -e "s/ж/{z1}/g" -e "s/З/{Z}/g" -e "s/з/{z}/g" -e "s/И/{I}/g" -e "s/и/{i}/g" -e "s/Й/{I0}/g" -e "s/й/{i0}/g" -e "s/К/{K}/g" -e "s/к/{k}/g" -e "s/Л/{L}/g" -e "s/л/{l}/g" -e "s/М/{M}/g" -e "s/м/{m}/g" -e "s/Н/{N}/g" -e "s/н/{n}/g" -e "s/О/{O}/g" -e "s/о/{o}/g" -e "s/П/{P}/g" -e "s/п/{p}/g" -e "s/Р/{R}/g" -e "s/р/{r}/g" -e "s/С/{S}/g" -e "s/с/{s}/g" -e "s/Т/{T}/g" -e "s/т/{t}/g" -e "s/У/{U}/g" -e "s/у/{u}/g" -e "s/Ф/{F}/g" -e "s/ф/{f}/g" -e "s/Х/{H}/g" -e "s/х/{h}/g" -e "s/Ц/{C}/g" -e "s/ц/{c}/g" -e "s/Ч/{Q}/g" -e "s/ч/{q}/g" -e "s/Ш/{X}/g" -e "s/ш/{x}/g" -e "s/Щ/{W}/g" -e "s/щ/{w}/g" -e "s/Ъ/{P2}/g" -e "s/ъ/{p2}/g" -e "s/Ы/{Y}/g" -e "s/ы/{y}/g" -e "s/Ь/{P1}/g" -e "s/ь/{p1}/g" -e "s/Э/{E1}/g" -e "s/э/{e1}/g" -e "s/Ю/{J2}/g" -e "s/ю/{j2}/g" -e "s/Я/{J1}/g" -e "s/я/{j1}/g" > /tmp/rulatex/$1

platex /tmp/rulatex/$1 << EOF

 

EOF
dvipdfmx $realtex

 

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

 

 

いい加減コピペやめてちゃんとファイルとしてアップロードしたいもんだけれども、やりかたがよーわからんw。

 

さて、せっかくなのでコマンドとしてパス通しときましょ。

http://bobbyquine.hatenablog.com/entry/2018/03/24/164602

 

実際に書いてみる

まぁbabelについてはこの辺のページがわかりやすい

https://user.ecc.u-tokyo.ac.jp/users/user-15826/wiki/?TeX/Manual/Babel

 

とりあえずテストファイル置いとく。

 

以下ファイル内(filename = test.tex)------------------------------------------------------------------------

 

\documentclass[a4j]{jsarticle}
\title{Russian Test(\foreignlanguage{russian}{Русский язык})}
\author{BobbyQuine}
\usepackage[OT2,T1]{fontenc}
\usepackage[russian,japanese]{babel}
\begin{document}
\maketitle
\begin{otherlanguage}{russian}
\section{русский язык}

this is the test.

\foreignlanguage{russian}{Где ты?}


ロシア語

 

\selectlanguage{russian}
Я тебя не отдам

\end{document}

 

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

 

 

作ったtest.texを作ったrulatexコマンドで試してみる。

 

$ rulatex test.tex

 

ちなみにtest.tex内の赤字は今回の重要ポイント的な部分。

 

\usepackage[OT2,T1]{fontenc}

キリル文字にはOT2というのが必要だが、T1も無いと英語が使えなくなる。正直僕もよく分かっちゃいない。

 

\usepackage[russian,japanese]{babel}

ここではbabelで使う言語の設定的な。正直メインがjapaneseなのでここでjapanese設定いるか分からん。

 

ドキュメント内でのロシア語の書き方は複数ある。

\begin{otherlanguage}{russian}

\end{otherlanguage}

で囲んだところに書く方法、

\selectlanguage{russian}

の後に書く方法、

\foreignlanguage{russian}{Где ты?}

のように書く方法である。

二つめの書き方では、次に\selectlanguageで言語を替えるまで適応される。

三つめの書き方は日本語文章中に少しロシア語単語を書きたいときなどに便利である。

 

正直書くの飽きてきたので今回はこの辺で。アクセント記号にも対応させたものをそのうち書くかも。皆さん、ロシア語を極めましょう。Пока!!

自作キーボード、Ergo42を作ったお話 (Ubuntuでのファームウェア焼き込み)

適当に備忘録がてら書いてく。メインの組み立てなんかはこちらのブログを参考にした方がいい。写真や図もあってわかりやすい。

https://qiita.com/zk_phi/items/3180902a37fa73223020

 

なので組み立ては吹っ飛ばして、ファームウェア焼き込み環境整える所から。(組み立てに夢中になりすぎて写真撮り忘れた)

 

適当にUbuntu用意したら

$ sudo apt update

$ sudo apt install git gcc unzip wget zip gcc-avr binutils-avr avr-libc dfu-programmer dfu-util gcc-arm-none-eabi binutils-arm-none-eabi libnewlib-arm-none-eabi

 $ cd ~

$ git clone https://github.com/qmk/qmk_firmware.git

$ cd qmk_firmware

 

ここで作ったキーボードを片方つなぐ。なお、TRRSケーブルは繋がない

$ make ergo42/rev1:default:avrdude

途中、キーボード側のリセットボタン押せって出てくるから指示にしたがう。

もう方側にも同じように書き込んで完成。

 

キーマップは~/qmk_firmware/keyboards/ergo42/keymaps/default/keymap.cに保存されているのでそれを弄る。

 

シェル芸

個人的シェル芸置き場

 

zshでは

 

% echo {а..я}

а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я

 

とできる。しかしこれをBashに同様にコマンドを打ち込んでも実行されず

{а..я}

という出力が得られる。そこで"echo а я"からはじめてzshと同様の出力結果が得られるかやってみた。

 

$ echo а я|sed -e "s/^/print(\'/" -e "s/\$/\'\.encode(\'unicode_escape\'))/"|python3.6|sed -e 's/[^0-9,a-f, ]//g' -e 's/b//' -e s/^/0x/ -e "s/ / 0x/"|seq $(cat)|echo "obase=16; ibase=10; $(cat)"|bc|sed "s/^/\\\u/g"|echo -e $(cat)

 

一応ツイッターに収まったのでシェル芸botにいつだったか投げた。これについてpythonを使わずにやる方法探してるなう。

※追記:Python更新で3.7になった。書き換えて実効。

 

とあるディレクトリにあるmp4ファイルをvlcでランダム順に再生する。

lsの-Qオプションを始めて使ったので記念に。なお、ファイル群の名前が特殊文字を含まない場合はこのオプションはいらない

 

$ ls -Q | grep mp4 | sort -R |xargs vlc

 

いい加減shufコマンド覚えたい

 

2018/9/9

https://www.slideshare.net/kanata1/unicode-112630484

こちらのスライドを読ませていただき、Unicodeのおもしろさを知りました(ついでに闇の深さも)。まぁ、というわけでちょっと遊んだのを記録しとこうって感じで。

 

$ echo sedですべての文字の後ろにスペース追加する方法が相変わらず分からない|sed -e "s/^/print(\'/" -e "s/\$/\'\.encode(\'unicode_escape\'))/"|python3.7|sed s/b\'//|sed s/\'//|tr '\\' '\n'|sed '/^$/d'|sed -e "s/\$/\\\U3099\\\U0489/g" -e "s/u/\\\U/g"|sed -z "s/\n//g"|sed -e "s/^/echo \$\'/" -e "s/\$/\'/"|bash

 

未だにsedコマンドが使いこなせず、すべての文字の後ろに共通の文字を追加する方法が分からないorz

Unicode表はWikipediaにあるので、それを見て色々遊んでみたいと思う

 

2018/9/10

どうにも一つ前のシェル芸では英字箇所がうまくいかないことが分かったので。文章に取り消し線を入れるシェル芸。

$ echo test tweet | sed -e "s/\(.\)/\1\\n/g"|sed -e "s/\$/$'\\\U336'/g" -e 1"s/^/echo /"|sed -z "s/\n//g"|bash

 

なお、これはようやくsedで一文字ずつ改行する方法を見つけたのでそれを使った。

sed使いこなせないおじさん、一歩成長

 

2019/01/19

何でか知らんがFizzBuzz問題がTLで話題に。実は今までFizzBuzzをシェル芸でやったことがなかったのでやってみた。

$ seq 1 100|sed -e 0~15cFizzBuzz -e 0~3cFizz -e 0~5cBuzz

 

はい、なんか皆さんがやってるほど長くならなくて実はルール違反しているのでは??って感じなんだけど実際どうなんだろ。