Sikulixで相対座標な関数を作って遊ぶ

Sikuluxはぶっちゃけ重い

なんたって画像認識に頭のよいものを使ってるから処理が結構重い。

だから検索範囲を絞って絞りまくって最小限にしたい。

その座標ピンポイントに画像Aが見えるまで待て→クリックなaltClickerという関数を作って遊ぶことにした。

しかしキャプチャ画像が相対距離でアプリケーションの左上からどのぐらい離れているのかを知る必要がある。そんなわけでまずは20×20ピクセルの相対座標情報を含んだ小さな画像をキャプチャーしたい

import org.sikuli.util.JythonHelper
import datetime, os, sys
import shutil
import os.path

#カレントディレクトリのパスが分かるおまじない
JythonHelper.get().addSysPath(getBundlePath())
sys.path.append(os.getcwd())

#フォーカスを移す
switchApp(u"(アプリケーションのタイトルとか)")

#なにか基準にする画像を予めキャプチャしてそこからの相対距離で左上をわりだす
if exists(Pattern("kado-1.png").exact()):
  tmpreg = find(Pattern("kado-1.png").exact()).getTopLeft()
#この場合は基準画像からxに-545yに+5した場所がアプリ左上になっている
reg = Region(tmpreg.x - 545, tmpreg.y + 5, 800, 600)
topleft = reg.getTopLeft()
print "範囲:{0}\n左上:({1},{2})".format(reg,topleft.x,topleft.y)

#reg = Region(36,186,800,480)
#topleft = Location(41, 269)

#組み込み関数のキャプチャモードを開く。この場合範囲は20px固定なので最初のドラッグ始めだけ肝心
captureRegion = selectRegion()
#相対座標を割出す
locationFromTopLeft = captureRegion.x - topleft.x, captureRegion.y - topleft.y
print locationFromTopLeft
wait(1.0)

#画像を20pxの正方形で保存
img = capture(captureRegion.x, captureRegion.y, 20, 20)
name = input(u"恐縮ながら画像の名前をつけてもらいたい") + ".png"
shutil.move(img, os.path.join(getBundlePath(), name))
scriptFile = open(os.path.join(getBundlePath(),"scripts.txt"), "a")
#同じディレクトリのscripts.txtと適当に名付けたファイルにコピペ用の関数を書き込む
w = "altClicker(\"" + name + "\", " + str(locationFromTopLeft[0]) + ", " + str(locationFromTopLeft[1]) + ")" + "\n"
scriptFile.write(w)
scriptFile.close()

まあざっとこんな感じでaltClicker(“hoge.png”, 203, 114)みたいなテキストができるから本番用のスクリプトで

def altClicker(img, dx, dy):
  starttime = time.time() 
  while not Region(topleft.x + dx, topleft.y + dy, 20, 20).exists(img):
    wait(0.1)
    if time.time() - starttime > 10:
      initall()
  click(Location(topleft.x + dx + random.randint(-2,2), topleft.y + dy + random.randint(-2,2)))

altClicker("hoge.png", 203, 114)

こうすればUWSCみたいな感覚で簡単に作れる。もっと配列使ってエレガントにやろうとも思ったけどさっと遊ぶにはこれぐらいがわかりやすいだろう。こんな感じでお盆を過ごしていたとさ。

カテゴリー: archlinux, Sikulix | コメントをどうぞ

polybarのシンボル系フォントが表示されない時は

polybarは相変わらずクールで素晴らしい。でも

でも久々にストレージとosの入れ替えをしたところシンボル系フォントのSijiが表示されない。

そんなときは多分~/.config/polybar/configの指定フォント名がおかしい。というか変わった。

fc-list | grep Siji

以上のようにフォント名を入力して

/usr/share/fonts/misc/siji.pcf: Wuncon Siji:style=Regular

みたいなのが出てくると思うからその名前に変える

font-2 = WunconSiji:pixelsize=10;0

以上のようにフォント名を変えたところ上手くいった。

Wunconという接頭が増えたのかな?

カテゴリー: 未分類 | コメントをどうぞ

久しぶりにブラウザゲーをしたいと思ったからlinuxでマクロ探し

します

だからみんなやっているであろうマクロを探してたんだけどwindowsでは選択肢は多いのにlinuxの場合は実質一択のsikulixしかない。

ということでarchlinuxでsikulixを導入したいので…ってPKGBUILDがaurで無い!

こんな時はgoogle先生、「はいありました」。

https://github.com/Caesim404/sikulix-git

流れ

PKGBUILDとかダウンロードして編集してjdk入れてopencv入れる

git clone https://github.com/Caesim404/sikulix-git;cd sikulix-git

ちょっとPKGBUILDを編集

depends=("java-environment-jdk>=7"
 "opencv2-opt"

opencv2-optパッケージにしてopencv3を使ったプログラムとかのために一応隔離する。しなくてもおk

javaを入れるがopenjdkではなくまさかの不具合を防ぐためoracleのjdkを使う

yaourt -S java-runtime-common java-environment-common jdk

javaのフォントレンダリング修正

sudo sh -c "echo \"export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=gasp'\" >> /etc/environment"

opencv2-optをビルド(長い)

yaourt -S opencv2-opt

長い(怒)

~/.bashrcに以下の環境変数をぶち込む

export PATH=$PATH:/opt/opencv2/bin
export C_INCLUDE_PATH=/opt/opencv2/include/opencv:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/opt/opencv2/include/opencv:$CPLUS_INCLUDE_PATH
export LD_LIBRARY_PATH=/opt/opencv2/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/opt/opencv2/lib/pkgconfig:$PKG_CONFIG_PATH
source ~/.bashrc

その他必要そうなものをインストール

yaourt -S tesseract wmctrl lsb-release xdotool maven

やっとmakepkg

makepkg

インストール

yaourt -U sikulix-git-1.1.1-1-x86_64.pkg.tar

後は起動するだけ

さあ楽しい時間の始まり。ターミナルからは起動できるのにランチャーで起動できない人は一回ログアウトしてみるといいかも?

カテゴリー: 未分類 | コメントをどうぞ

ungoogled-chromiumパッケージは死んだから代わりにinox

なんかよくわかんないけどungoogled-chromiumはarchlinuxをサポートしないらしい。

だからungoogled-chromiumの大まかなパッチセットであるinoxを使えとのことだ。

インストールはungoogled-chromiumよりも百倍簡単にいった。というかストレートにインストールできた。

chromestoreはchromiumのように使えないので、以下のpythonスクリプトをつかってダウンロードする。

https://github.com/SethDusek/extension-downloader/blob/master/downloader.py

うん、超カンタンだ。

カテゴリー: archlinux | コメントをどうぞ

archを再インストール備忘録

rt-ltsカーネルとF2FSの相性が悪かったので思い切って再インストールした。以下は備忘録。

基本はantergosのbaseからインストール。systemd-bootでyaourtにチェックして、適当に。ここは省略。

#key
###~/.gnupg/gpg.conf###
#次を追記
keyserver-options auto-key-retrieve
#時間
timedatectl set-timezone Asia/Tokyo
sudo pacman -S ntp
sudo systemctl enable ntpd
sudo systemctl start ntpd
#antergosのリポジトリをコメントアウトflash関係でたまによろしくない
###/etc/pacman.conf###
#[antergos]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/antergos-mirrorlist
#ネットワーク
sudo systemctl enable dhcpcd
sudo systemctl start dhcpcd
###makepkg.conf###
#最適化とcpuコア数
CFLAGS="-march=native -O2 -pipe"
CXXFLAGS="-march=native -O2 -pipe"
MAKEFLAGS="-j8"
#nvidia
sudo pacman -S nvidia-dkms nvidia-libgl nvidia-settings
###/etc/mkinitcpio.conf###
...
MODULES="nvidia nvidia_modeset nvidia_uvm nvidia_drm"
...
###/boot/loader/entries/antergos.conf###
#optionsに nvidia-drm.modeset=1を追記
###/etc/modprobe.d/blacklist.conf###
#intel無効化
install i915 /usr/bin/false
install intel_agp /usr/bin/false
#デスクトップ
sudo pacman -S lxqt lxappearance numix-frost-themes numix-icon-theme-git numix-square-icon-theme
#日本語
yaourt -S fcitx-mozc fcitx-im ttf-ricty
sudo pacman -S xorg-xinit
cp /etc/X11/xinit/xinitrc ~/.xinitrc
###~/.xinitrc###
#以下をコメントアウト
# twm &
# xclock -geometry 50x50-1+1 &
# xterm -geometry 80x50+494+51 &
# xterm -geometry 80x20+494-0 &
# exec xterm -geometry 80x66+0+0 -name login

#追記
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
exec startlxqt
sudo mkinitcpio -p linux

いったん再起動してstartx。
「LXQt外観の設定」と「ルックアンドフォールを設定します」からテーマをnumix-frost、iconをnumix-squareに変更。

#なによりまずブラウザ
yaourt -S ungoogled-chromium-bin pepper-flash
#ungoogled-chromium-binのパッケージがおかしいので修正
#diskのマウントとか
#gparted使ってUUID調べる。コピペできるし超かんたん。
sudo pacman -S gparted gksu
gksu gparted

#fstab追記例user1はユーザー名、sdriveとかは適当に
sudo mkdir -p /run/media/user1/sdrive
sudo mkdir -p /run/media/user1/bdrive
###/etc/fstab###
UUID=0C0A63F80A63DD68 /run/media/user1/sdrive ntfs-3g uid=user1,gid=users,dmask=022,fmask=133 0 0
UUID=D66A832C6A830907 /run/media/user1/bdrive ntfs-3g uid=user1,gid=users,dmask=022,fmask=133 0 0
#お好みでudiskieとかもどうぞ
yaourt -S udiskie
#(danger!)ここからは録音とかしたい人向け(danger!)
#rt-ltsカーネルに変更(ビルドに時間がかかる)
yaourt -S linux-rt-lts linux-rt-lts-headers
#bootエントリを/boot/loader/entries/antergos.confとかからコピペして編集してつくる
###/boot/loader/entries/linux-rt-lts.conf###
title linux-rt-lts
linux /vmlinuz-linux-rt-lts
initrd /initramfs-linux-rt-lts.img
options root=UUID=ふぇあえふぇふぇふぇふぇf rw quiet nvidia-drm.modeset=1
###/boot/loader/entries/linux-rt-lts-fallback.conf###
title linux-rt-lts (fallback)
linux /vmlinuz-linux-rt-lts
initrd /initramfs-linux-rt-lts-fallback.img
options root=UUID=おふぁおふぇふぇふぇfっb rw quiet nvidia-drm.modeset=1
###/boot/loader/loader.conf###
default linux-rt-lts
#firewireのalsaドライバ
坂本さんに感謝!

あとはALSAでJACKでloopback!のように設定してやる。

カテゴリー: archlinux | コメントをどうぞ

ALSAでJACKでloopback!

ALSAでJACKでloopback?

アプリケーション→ALSAのloopbackデバイス→JACKのデバイスで再生。

ピンとこない人に説明するとマイクにエフェクト加えながら、DAW動かしながらニコ動見たりしよう!ってこと。デスクトップで再生されるあらゆるオーディオストリームをJACKで再生できるようにしよう!ってこと。

準備

非pulseaudio環境。つまりlxqtとかi3wmとか選択肢は限られるかも。

多分有効になっていないsnd-aloopをロード。arch標準カーネルでは入ってるけど有効になっていない。

sudo modprobe snd-aloop
#alsa再起動
alsactl nrestore
#確認
aplay -l

無事にaplay -lにloopbackデバイスが表示されてることが確認できたら次回の起動から自動で有効になるようにmkinitcpio.confに追記する。

###/etc/mkinitcpio.conf####
...
MODULES="...(いろいろ)... snd-aloop"
...

そしてmkinitcpio

mkinitcpio -p linux

今回は-p linuxだけどlinux-ltsとかlinux-rt-ltsとか適宜自分好きなカーネルにする。

あとはJACKはqjackctlを使って管理するから

yaourt -S jack2 qjackctl

コピペ

はい

###~/.asoundrc###
pcm.aloopPlayback {
 type dmix
 ipc_key 1
 ipc_key_add_uid true
 slave {
 pcm "hw:Loopback,0,0"
 format S32_LE
 rate {
 @func igetenv
 vars [ JACK_SAMPLE_RATE ]
 default 44100
 }
 period_size {
 @func igetenv
 vars [ JACK_PERIOD_SIZE ]
 default 1024
 }
 buffer_size 4096
 }
}

# capture device
pcm.aloopCapture {
 type dsnoop
 ipc_key 2
 ipc_key_add_uid true
 slave {
 pcm "hw:Loopback,0,1"
 format S32_LE
 rate {
 @func igetenv
 vars [ JACK_SAMPLE_RATE ]
 default 44100
 }
 period_size {
 @func igetenv
 vars [ JACK_PERIOD_SIZE ]
 default 1024
 }
 buffer_size 4096
 }
}

# duplex device
pcm.aloopDuplex {
 type asym
 playback.pcm "aloopPlayback"
 capture.pcm "aloopCapture"
}

# ------------------------------------------------------
# default device

pcm.!default {
 type plug
 slave.pcm "aloopDuplex"
}

# ------------------------------------------------------
# alsa_in -j alsa_in -dcloop -q 1
pcm.cloop {
 type dsnoop
 ipc_key 3
 ipc_key_add_uid true
 slave {
 pcm "hw:Loopback,1,0"
 format S32_LE
 rate {
 @func igetenv
 vars [ JACK_SAMPLE_RATE ]
 default 44100
 }
 period_size {
 @func igetenv
 vars [ JACK_PERIOD_SIZE ]
 default 1024
 }
 buffer_size 4096
 }
}

# ------------------------------------------------------
# alsa_out -j alsa_out -dploop -q 1
pcm.ploop {
 type plug
 slave {
 pcm "hw:Loopback,1,1"
 }
}
alsactl nrestore

はい

#!/bin/sh
###~/loop.sh###
/usr/bin/alsa_out -j ploop -dploop -q 1 2>&1 1> /dev/null &
/usr/bin/alsa_in -j cloop -dcloop -q 1 2>&1 1> /dev/null &
sleep 1
jack_connect cloop:capture_1 system:playback_1
jack_connect cloop:capture_2 system:playback_2
exit 0
chmod +x ~/loop.sh

説明不要だと思うが.asoundrcとjackを起動した後のスクリプトをコピペして作る。ALSAの再起動と実行権限付加を忘れずに。

ついにJACK

デスクトップを使っている$userにaudioグループを付ける。

sudo gpasswd -a $user audio

qjackctlで行う。起動したら「設定」でこんな感じqjackctl01

オプションでjackデーモン起動後にloop.shが実行されるようにする

qjackctl02

あとはJACKを起動するだけ。ね、簡単でしょ?

qjackctl03

あとはjack対応のアプリを開くと「接続」のウィンドウに勝手に出てくるから、それを適当につなぎ合わせていい感じに設定する。ちなみに上はplayback_1,playback_2が再生デバイスでcloopがデスクトップのloopbackからの音でobsのjack入力と再生デバイスに流して,systemのcapture_4からマイクを拾ってcalf studio gearでいろいろ音を整えてこれまたobsのjack入力と再生デバイスに流している。ploopは使ってない。

loopbackからの音だけがおかしい場合、再起動すれば治る可能性がある。

どの音もなんかボソボソとかプチプチだったりするばあいはフレーム/ピリオドを上げたりしてみる。

まとめ

ほんと数分で終わる作業なのにここまで来るのが長かった…もう寝る。

カテゴリー: archlinux, 未分類 | 1件のコメント

ungoogled-chromium-binのパッケージがおかしいので修正

ungoogled-chromium

ungoogled-chromiumとはchromiumのよくわからないブロブを排除したパッケージだ。google先生の「お前を見ているぞ」な機能が削除されてる。

パッケージがどれもひどい…

aurにあるungoogled-chromium,ungoogled-chromium-bin,ungoogled-chromium-bundleのパッケージがいずれもおかしいのでパッケージをインストールしてから修正した。メンテナがそれぞれ違うのにgoogleの陰謀かよと疑いたくなるレベルでひどい。今回は一番手ごろなungoogled-chromium-binがうまく動くように修正する。

cd /opt/ungoogled-chromium-bin
#サンドボックスでエラーが出ないようにする
mv chrome_sandbox chrome-sandbox
chmod 4755 chrome-sandbox

#デスクトップエントリが/tmp以下のインストール前のパッケージにシンボリックリンクされている!?ので
rm /usr/share/applications/ungoogled-chromium.desktop
cp /tmp/yaourtなんとか/aur-ungoogled-chromium-bin/ungoogled-chromium.desktop

そして最後にungoogled-chromium.desktopのexecを以下のように修正。なおchromiumをインストールしているならchromium.desktopを改変してもよし。

Exec=/opt/ungoogled-chromium-bin/chrome --ppapi-flash-path=/usr/lib/PepperFlash/libpepflashplayer.so %U

これで完璧に動作するはずだ。

蛇足として拡張機能はcrxファイルを直接ぶち込むことでインストールできる。

あとがき

メンテナが違うのにどれもうまく動かないとはどうゆうこっちゃ。

カテゴリー: archlinux | 1件のコメント

mpdっていうmusic playerはいいぞ

mpd

music player daemon。

音楽サーバーっていう仕組みはよいれす。

電源入れれば即起動して、リモートの応答速度も瞬時ですし。

クライアントなんてwindowsとmacとlinuxなら腐るほど種類あるし(ただしiosとandroidは少ない)。

ただしちょっと導入が面倒だから備忘録つけます。

前回よりも…

前回とは違ってpulseaudioをアンインストールしてjackを入れるとか大分アレな環境になってますが

基本的にmpdを使うとかは共通です。

環境

iosとlinux

linuxのoutput device:alsa(またはjack)

ipv6とipv4両方の環境だからmdnsで名前解決する

インストールとか

まずはインストールjackを使いたい場合はaudio_outputのalsaをコメントアウトしてjackとmixer_typeのコメントを外す。
archのjackのページを見てわかるとおりちょっと複雑だからそのページ見ながらがんばって設定する。
とりあえずpulseaudioアンインストールしてしまえばわりと簡単。i3使いでよかった。

yaourt -S mpd nss-mdns avahi

そしてsystemdのmpd.serviceファイルを編集して起動したいユーザーをUser=ユーザー名として加える

sudo systemctl edit --full mpd
[Unit]
Description=Music Player Daemon
After=network.target sound.target

[Service]
User=ユーザー名
ExecStart=/usr/bin/mpd --no-daemon

# allow MPD to use real-time priority 50
LimitRTPRIO=50
LimitRTTIME=infinity

# disallow writing to /usr, /bin, /sbin, ...
ProtectSystem=yes

# more paranoid security settings
NoNewPrivileges=yes
ProtectKernelTunables=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
# AF_NETLINK is required by libsmbclient, or it will exit() .. *sigh*
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX AF_NETLINK
RestrictNamespaces=yes

[Install]
WantedBy=default.target
Also=mpd.socket

そして~/.config/mpd/以下をいろいろ作る。

mkdir -p ~/.config/mpd/playlists
touch ~/.config/mpd/{database,log,pid,state}

~/.config/mpd/mpd.confを以下のように作る。

music_directory "~/音楽"

playlist_directory "~/.config/mpd/playlists"

db_file "~/.config/mpd/database"

log_file "~/.config/mpd/log"

pid_file "~/.config/mpd/pid"

state_file "~/.config/mpd/state"

auto_update "yes"

follow_outside_symlinks "yes"

follow_inside_symlinks "yes"

audio_output {
 type "alsa"
 name "My ALSA Device"
## device "hw:0,0" # optional
## mixer_type "hardware" # optional
## mixer_device "default" # optional
## mixer_control "PCM" # optional
## mixer_index "0" # optional
}
#audio_output {
# type "jack"
# name "My jack"
#}
#mixer_type "software"

mixer_type “software”はjackでoutputする場合に必要。alsaでoutputだと必要ない。
music_directoryの~/音楽に他の音楽ディレクトリのシンボリックリンクを貼る。

ln -s /run/media/なになに/musics ~/音楽/ndrivemusicd

とかやって/etc/nsswitch.confのhost:を

hosts: files mdns_minimal [NOTFOUND=return] dns myhostname

に変える。

sudo systemctl enable avahi-daemon mpd
sudo systemctl start avahi-daemon mpd

で起動する。
ios側のMpoDを起動して認識されているか確認する。
jackを使いたい場合はaudio_outputのalsaをコメントアウトしてjackとmixer_typeのコメントを外す。
archのjackのページを見てわかるとおりちょっと複雑だからそのページ見ながらがんばって設定する。
とりあえずpulseaudioアンインストールしてしまえばわりと簡単。i3使いでよかった。

まとめ

archlinuxでmpdでリモートイェイ!でした。

可逆圧縮のせいで数百Gとかになってる音楽フォルダも一度スキャンしてしまえば快適。

 

 

 

カテゴリー: archlinux, ios, mpd, 未分類 | タグ: , , | コメントをどうぞ

iosからlinuxのmusicplayerを制御

母艦のlinuxをジュークボックスしたい

曲変えたい→寒い→布団から出たくない→パソコンまでの1mを歩きたくない→そうだipadから操作すればいいじゃない!→くたばれ干物男天才

linuxの環境

音楽プレイヤー:mpd

サウンド:pulse audio

linuxとipad:同一ネットワークでipv4

 退屈な作業

あまりにも退屈な作業だったので一撃なスクリプト(完全無保証)にした。

スクリプトの概要

必要なフォルダを作ってsystemctl –userの設定がipv6になってたから修正しただけ。sedでもいいような気がしたがそのあたりはテキトーで。ほら、作成されてない可能性もあるから…。bindする設定とか省かれているがデフォルトで6600ポートを使ってる。セキュリティ的なアレは完全無視。気になる人はアドレスを絞ってパスワードとか設定するといいかも。guiのフロントエンドが豊富にあるからあとはlinux側の操作は好きにしてくれ。systemctl –user なんとかmpdとかで動かす。

音楽フォルダは~/音楽にした。

systemctl –user edit mpdを使って直接パイプからぶち込む方法はないのかなぁ。systemdをリロードするためsudoを使ってしまった。

#!/bin/bash

yaourt -S mpd --noconfirm
mkdir ~/.config/mpd
mkdir ~/.config/mpd/playlists
touch ~/.config/mpd/{database,log,pid,state}

cat > ~/.config/mpd/mpd.conf <<EOF 
music_directory "~/音楽"

playlist_directory "~/.config/mpd/playlists"

db_file "~/.config/mpd/database"

log_file "~/.config/mpd/log"

pid_file "~/.config/mpd/pid"

state_file "~/.config/mpd/state"

auto_update "yes"

follow_outside_symlinks "yes"

follow_inside_symlinks      "yes"

audio_output {

    type        "pulse"

    name        "Pulseaudio"

}
EOF

cat > ~/.config/systemd/user/mpd.service <<EOF
[Unit]
Description=Music Player Daemon
After=network.target sound.target

[Service]
ExecStart=/usr/bin/mpd --no-daemon

# allow MPD to use real-time priority 50
LimitRTPRIO=50
LimitRTTIME=infinity

# disallow writing to /usr, /bin, /sbin, ...
ProtectSystem=yes

# more paranoid security settings
NoNewPrivileges=yes
ProtectKernelTunables=yes
ProtectControlGroups=yes
# AF_NETLINK is required by libsmbclient, or it will exit() .. *sigh*
#RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX AF_NETLINK
RestrictAddressFamilies=AF_INET AF_UNIX AF_NETLINK
RestrictNamespaces=yes

# Note that "ProtectKernelModules=yes" is missing in the user unit
# because systemd 232 is unable to reduce its own capabilities
# ("Failed at step CAPABILITIES spawning /usr/bin/mpd: Operation not
# permitted")

[Install]
WantedBy=default.target
EOF

sudo systemctl daemon-reload
systemctl --user enable mpd
systemctl --user start mpd

ios側

MpoDをappストアからインストール。

linuxのローカルアドレスを指定してあとは使うだけ。

かんそう

ipv4で躓いた。だがmusicフォルダをipadから直接ブラウズできることが素晴らしい。これはremoteでチクチクfoobar動かしてた時より快適だ。ちなみにlinuxのクライアントはsonataを使っている。

カテゴリー: archlinux | コメントをどうぞ

polybarを使ってみた

polybarとは

主にタイル型ウィンドウマネージャーの代替バー。

今回はi3statasbarの代替として使う。

特徴は?

多機能でいい感じの見た目。タイトルバーを非表示にしている環境の場合バーにアプリケーションのタイトルが表示されるため便利。音量もマウスホイールでグラフィカルに設定可能。簡単なコマンドランチャーとしても使えるためデフォルトでは電源関係のコマンド(シャットダウン)とかに使われている。まさに痒いところに手が届くバーなのだ。

インストール

archlinux前提でyaourtを使って

yaourt -S polybar-git

pkgbuildファイルはcmakeの場所に

cmake -DENABLE_I3=ON めけめけ〜

というふうに-DENABLE_I3=ONを追加してビルドする。
プロファイルを~/.config/に突っ込むコマンド

install -Dm644 /usr/share/examples/polybar/config $HOME/.config/polybar

そして以下のような起動スクリプトをどこでもいいから作る。今回は$HOME/.config/polybar/launch.shに作ることを想定している。

#!/usr/bin/bash
killall -q polybar
while pgrep -x polybar >/dev/null; do sleep 1; done
polybar example
echo "Bars launched..."

実行権限を付加

chmod +x $HOME/.config/polybar/launch.sh

最後にi3のconfigファイルで起動スクリプトを起動時実行するように以下のものを追加。

exec_always --no-startup-id $HOME/.config/polybar/launch.sh

そしてi3を再起動すると出て来るはず。

config例

最後にconfigを晒したいと思う。rictyというフォントが必要だ

yaourt -S ricty-ttf

フォントや色、大きさを変更し、下部になるべくスペースを取らずに表示されることを心がけた。あとsuspendが電源メニューに追加されている。電源メニューはsudo ~となっていたものをsystemdに置き換えている。特殊フォントなどが設定されているため正しく表示されているかは不明だが参考になれば嬉しい。

;=====================================================
;
;   To learn more about how to configure Polybar
;   go to https://github.com/jaagr/polybar
;
;   The README contains alot of information
;
;=====================================================

[colors]
background = #2d2d2d
background-alt = #2d2d2d
foreground = #ffffff
foreground-alt = #55
primary = #ded32e
secondary = #d64937
alert = #d64937

[global/wm]
margin-top = 5
margin-bottom = 5

[bar/example]
bottom = true
;monitor = ${env:MONITOR:HDMI-1}
monitor = ${env:MONITOR:HDMI-1}
width = 100%
height = 12
offset-x = 0
offset-y = 0

;background = ${urdb:color9}
background = ${colors.background}
foreground = ${colors.foreground}

overline-size = 0
overline-color = #f00
underline-size = 2
underline-color = #00f

border-bottom = 0
border-bottom-color = #333

spacing = 1
padding-left = 0
padding-right = 2
module-margin-left = 1
module-margin-right = 2

font-0 = ricty:size=12:pixelsize=10:fontformat=truetype;0
font-1 = ricty:size=6:heavy:fontformat=truetype;-2
font-2 = siji:pixelsize=10;0

modules-left = bspwm i3 xwindow
modules-center =
modules-right = backlight volume filesystem memory cpu wlan eth battery date powermenu

tray-position = right
tray-padding = 2
;tray-transparent = true
;tray-background = #0063ff

;wm-restack = bspwm
;wm-restack = i3

;override-redirect = true

;scroll-up = bspwm-desknext
;scroll-down = bspwm-deskprev

;scroll-up = i3wm-wsnext
;scroll-down = i3wm-wsprev


[module/xwindow]
type = internal/xwindow
label = %title:0:30:...%

[module/xkeyboard]
type = internal/xkeyboard
blacklist-0 = num lock

format-underline = ${colors.secondary}
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}

label-layout = %layout%

label-indicator-padding = 2
label-indicator-background = ${colors.secondary}
label-indicator-underline = ${colors.secondary}

[module/filesystem]
type = internal/fs
interval = 25

mount-0 = /
;mount-1 = /home
;mount-2 = /invalid/mountpoint

label-mounted = %mountpoint%: %percentage_free%

label-unmounted = %mountpoint%: not mounted
label-unmounted-foreground = ${colors.foreground-alt}

[module/bspwm]
type = internal/bspwm
ws-icon-default = x

label-focused = %index%
label-focused-background = ${colors.background-alt}
label-focused-underline= ${colors.primary}
label-focused-padding = 2

label-occupied = %index%
label-occupied-padding = 2

label-urgent = %index%
label-urgent-background = ${colors.alert}
label-urgent-padding = 2

label-empty = %index%
label-empty-foreground = ${colors.foreground-alt}
label-empty-padding = 2

[module/i3]
type = internal/i3
format =  
index-sort = true

label-mode = %mode%
label-mode-padding = 2
label-mode-foreground = #000
label-mode-background = ${colors.primary}

label-focused = %index%
label-focused-background = ${module/bspwm.label-focused-background}
label-focused-underline = ${module/bspwm.label-focused-underline}
label-focused-padding = ${module/bspwm.label-focused-padding}

label-unfocused = %index%
label-unfocused-padding = ${module/bspwm.label-occupied-padding}

label-urgent = %index%!
label-urgent-background = ${colors.alert}
label-urgent-padding = ${module/bspwm.label-urgent-padding}

label-visible = %index%
label-visible-foreground = ${module/bspwm.label-empty-padding}
label-visible-padding = ${module/bspwm.label-empty-padding}

[module/mpd]
type = internal/mpd

format-online =           

label-song-maxlen = 25
label-song-ellipsis = true

icon-prev = 
icon-seekb = 
icon-stop = 
icon-play = 
icon-pause = 
icon-next = 
icon-seekf = 

icon-random = 
icon-repeat = 

toggle-on-foreground = ${colors.primary}
toggle-off-foreground = #66

[module/backlight]
type = internal/xbacklight

format =  
label = BL

bar-width = 10
bar-indicator = │
bar-indicator-foreground = #ff
bar-indicator-font = 2
bar-fill = ─
bar-fill-font = 2
bar-fill-foreground = #9f78e1
bar-empty = ─
bar-empty-font = 2
bar-empty-foreground = ${colors.foreground-alt}

[module/cpu]
type = internal/cpu
interval = 2
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #d64937
label = %percentage%

[module/memory]
type = internal/memory
interval = 2
format-prefix = " "
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #32bbc2
label = %percentage_used%


[module/wlan]
type = internal/network
interface = net1
interval = 3.0

format-connected =  
format-connected-underline = #9f78e1
format-disconnected-underline = ${self.format-connected-underline}

label-connected = %essid%
label-disconnected = %ifname% disconnected
label-disconnected-foreground = ${colors.foreground-alt}

ramp-signal-0 = 
ramp-signal-1 = 
ramp-signal-2 = 
ramp-signal-3 = 
ramp-signal-4 = 
ramp-signal-foreground = ${colors.foreground-alt}

[module/eth]
type = internal/network
interface = eno1
interval = 3.0

format-connected-underline = #4ac237
format-connected-prefix = " "
format-connected-foreground-foreground = ${colors.foreground-alt}
label-connected = %local_ip%

format-disconnected-underline = ${self.format-connected-underline}
label-disconnected = %ifname% disconnected
label-disconnected-foreground = ${colors.foreground-alt}

[module/date]
type = internal/date
interval = 5

date =
date-alt = " %Y-%m-%d"

time = %H:%M
time-alt = %H:%M:%S

format-prefix = 
format-prefix-foreground = ${colors.foreground-alt}
format-underline = #3465A4

label = %date% %time%

[module/volume]
type = internal/volume

format-volume =  
label-volume = VOL
label-volume-foreground = ${root.foreground}

format-muted-prefix = " "
format-muted-foreground = ${colors.foreground-alt}
label-muted = sound muted

bar-volume-width = 10
bar-volume-foreground-0 = #55aa55
bar-volume-foreground-1 = #55aa55
bar-volume-foreground-2 = #55aa55
bar-volume-foreground-3 = #55aa55
bar-volume-foreground-4 = #55aa55
bar-volume-foreground-5 = #f5a70a
bar-volume-foreground-6 = #ff5555
bar-volume-gradient = false
bar-volume-indicator = │
bar-volume-indicator-font = 2
bar-volume-indicator-foreground = #ff
bar-volume-fill = ─
bar-volume-fill-font = 2
bar-volume-empty = ─
bar-volume-empty-font = 2
bar-volume-empty-foreground = ${colors.foreground-alt}

[module/battery]
type = internal/battery
battery = BAT0
adapter = ADP1
full-at = 98

format-charging =  
format-charging-underline = #ffb52a

format-discharging =  
format-discharging-underline = ${self.format-charging-underline}

format-full-prefix = " "
format-full-prefix-foreground = ${colors.foreground-alt}
format-full-underline = ${self.format-charging-underline}

ramp-capacity-0 = 
ramp-capacity-1 = 
ramp-capacity-2 = 
ramp-capacity-foreground = ${colors.foreground-alt}

animation-charging-0 = 
animation-charging-1 = 
animation-charging-2 = 
animation-charging-foreground = ${colors.foreground-alt}
animation-charging-framerate = 750

[module/temperature]
type = internal/temperature
thermal-zone = 0
warn-temperature = 60

format =  
format-underline = #ffffff
format-warn =  
format-warn-underline = ${self.format-underline}

label = %temperature%
label-warn = %temperature%
label-warn-foreground = ${colors.secondary}

ramp-0 = 
ramp-1 = 
ramp-2 = 
ramp-foreground = ${colors.foreground-alt}

[module/powermenu]
type = custom/menu

format-underline = #9B59B6
label-open =  power
label-open-foreground = #ffffff
label-close =  cancel
label-close-foreground = #ffffff
label-separator = |
label-separator-foreground = ${colors.foreground-alt}

menu-0-0 = reboot
menu-0-0-exec = menu-open-1
menu-0-1 = power off
menu-0-1-exec = menu-open-2
menu-0-2 = suspend
menu-0-2-exec = menu-open-3

menu-1-0 = cancel
menu-1-0-exec = menu-open-0
menu-1-1 = reboot
menu-1-1-exec = systemctl reboot

menu-2-0 = power off
menu-2-0-exec = systemctl poweroff
menu-2-1 = cancel
menu-2-1-exec = menu-open-0

menu-3-0 = suspend
menu-3-0-exec = systemctl suspend
menu-3-1 = cancel
menu-3-1-exec = menu-open-0

; vim:ft=dosini

最後に

polybarという代替バーを紹介したんだけどデフォルトでもいいって人は結構いそう。だってi3使うような人はmodキーでほとんど完結しちゃうからね。まあテーマもデフォルトの[example]をちょちょいと弄っただけですごくいい感じに表示されるというのは満足感があって素晴らしい。一度試してみる価値は十二分にあると思う。カスタマイズ性は半端ないから時間泥棒には注意。

カテゴリー: archlinux, 未分類 | コメントをどうぞ