Linux

fwupdでLinuxからUEFI(BIOS)のアップデート

Linuxデスクトップを利用する際に少し問題となるBIOSのアップデート。 ここではfwupdというツールを使ってUEFI(BIOS)のアップデート方法を書く。 特徴として、別のデバイスにBootableなディスクを焼いてアップデートする必要がないが、サポートされているデバイスでなければ対応出来ない。 なお、Unetbootinを使ってUSBデバイスからのアップデート手順をQiitaに書いているのでそちらもご参考あれ。 この記事はUbuntu16.04ベースのelementary os v0.4(loki), Dell XPS13 9360で試した内容を元にを書いている。 fwupdで利用可能なデバイスかどうかを確認する 利用可能なデバイスのリストはこちら→ (https://secure-lvfs.rhcloud.com/lvfs/devicelist) 自分のXPS13 9360はfwupdでアップデート可能だった。 fwupdのインストール aptでfwupdインストールする sudo apt install fwupd cabファイルをダウンロード (https://secure-lvfs.rhcloud.com/lvfs/devicelist) からダウンロードする。 画像内のリンク先のcabファイル。 fwupdmgrでインストール fwupdmgrというコマンドが利用出来るようになっている。 ただし、ACアダプタを接続していないと進めないので注意する。 fwupdmgr installでファームウェアをインストール。 fwupdmgr install /path/to/your/downloaded/firmware.cab これでインストール待ち状態になった。 再起動時にBIOSのロード画面でアップグレードが走る。 Special Thanks https://github.com/hughsie/fwupd https://secure-lvfs.rhcloud.com/lvfs/devicelist http://fwupd.org.s3-website-eu-west-1.amazonaws.com/developers.html

Linuxでマルチタッチのジェスチャにショートカットを割り当てるFusumaというGemを作った

linuxのマルチタッチのジェスチャを認識してショートカットを発火するプログラムを作った。 https://github.com/iberianpig/fusuma Fusumaという名前でRubyGemsに公開した。 Linux上のタッチパッドでのジェスチャをキーイベントにマッピングし、スワイプを検知したらワークスペースを移動させるなどの処理を可能にする。 ちなみにsyncapticsドライバ向けのPerlでの先行実装のxSwipe を過去に作っていて、こちらを元にRubyでlibinputドライバ向けに書き直している。 ワークスペースの切り替えする横スワイプが襖をガーってスライドさせる動作と似てるところが由来。 仕組み $ libinput-debug-events libinputをデバッグするコマンドを叩き、画面をスワイプすると下記のようなログが見える event10 GESTURE_SWIPE_BEGIN +4.28s 3 event10 GESTURE_SWIPE_UPDATE +4.28s 3 6.47/ 1.35 (13.12/ 2.73 unaccelerated) event10 GESTURE_SWIPE_UPDATE +4.29s 3 7.52/ 1.02 (16.13/ 2.19 unaccelerated) event10 GESTURE_SWIPE_UPDATE +4.30s 3 11.73/ 0.36 (18.04/ 0.55 unaccelerated) event10 GESTURE_SWIPE_UPDATE +4.32s 3 12.90/-0.36 (19.41/-0.55 unaccelerated) event10 GESTURE_SWIPE_UPDATE +4.33s 3 16.09/-1.32 (23.24/-1.91 unaccelerated) event10 GESTURE_SWIPE_UPDATE +4.35s 3 17.56/-1.97 (24.33/-2.73 unaccelerated) event10 GESTURE_SWIPE_UPDATE +4.36s 3 19.34/-2.24 (25.97/-3.01 unaccelerated)

Ubuntuのベースバージョンを変えずにLinuxカーネルをアップグレードする方法

環境のElementary OS 0.4 Lokiを利用しているが、カーネルのバージョンは4.4である。 4.4ではディスプレイ周りの不具合が多かったため、カーネルをアップグレードしたかった。 本記事の内容は、基本的にベースバージョンのUbuntu16.04でも同様と見てもらって構わない。 ukuuによるカーネルのアップグレード ukuuというツールを使えば任意のkernelをインストール出来る リポジトリを追加する sudo apt-add-repository -y ppa:teejee2008/ppa ukuuのインストール sudo apt update && sudo apt install ukuu Ukuu Kernel Update Utilityというアプリを選択して起動(ukuuでターミナルから起動してもいい) カーネルのバージョンを選んでインストール出来る。インストールされたカーネルはローカルにキャッシュされていて、 キャッシュ済の場合バージョンを簡単に切り替えできる。 記事執筆時点では4.9.8までインストール出来ることを確認した。 動作確認時に特に問題はないと思われたが、Fusumaが依存しているlibinput-debug-eventsのログにエラーが出ていた。 そのためukuuによるアップグレードではなく、後述するHWEカーネル用パッケージをインストールすることにした。 HWEカーネル用パッケージのインストール HWEカーネルとは HWE(Hardware Enablement)カーネルは,より新しいハードウェアでもLTSを使えるように用意されている 「LTS Enablement Stacks」のカーネルです。 簡単に言うと,LTS以降にリリースされたUbuntuで使われるカーネルを,LTSでも使えるようにしたものです。 (http://gihyo.jp/admin/serial/01/ubuntu-recipe/0278) より引用 安定版と開発版があり、開発版であれば4.8が入るそうだったので開発版をインストールすることにした。 linux-generic-hwe-16.04-edgeをインストール sudo apt install linux-generic-hwe-16.04-edge バージョンの確認 $ uname -a Linux XPS-L321X 4.8.0-34-generic #36~16.04.1-Ubuntu SMP Wed Dec 21 18:55:08 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux カーネルバージョンは4.8.0-34まで上がった。 ハードウエアのサポートが入っているためか、こちらではlibinput-debug-eventsが正しく動作していた。 Special Thanks

特定のアプリケーションにスイッチするシェルスクリプトを作る

Web開発を行っていて、ターミナルとブラウザを行き来することが非常に多い。 一度のキーアクションでターミナルに移動、ブラウザに移動できる方法がないかと考えた上で、作ってみた。 思いつきから作ってみたが意外と便利だった。一日に多用するショートカットとなった。 ブラウザとターミナルを交互に切り替えたい Web開発している時にターミナルとChromeを何度も行き来することがある。 Alt-tabもあるけれど、他のウィンドウが邪魔で何度Alt+tabを入力すればよいかわからない。 Alt-tabを押す、該当の画面がターミナル(Window)であるかを確認、もう一度Alt-tabを押すという繰り返しが非常に面倒。 特定のキー1回でブラウザとターミナルをトグルできればベスト。 xdotoolを使ってみる できる事は下記があるらしい。 ウィンドウ ID の取得 名前やクラスによる検索 現在アクテイブなウィンドウ ウィンドウ ID で指定されたウィンドウの操作 リサイズ 移動 最小化 最全面へ マウスイベントの模倣 マウスカーソル移動 マウスクリック キーイベントの模倣 文字入力 ショートカットキー入力 NOTE: xdotoolを使い特定ウィンドウの表示をワンキーでトグル(http://d.hatena.ne.jp/mooz/20101228/p) $xdotool Usage: xdotool <cmd> <args> Available commands: getwindowfocus getwindowname getwindowpid getwindowgeometry getdisplaygeometry search selectwindow help version behave behave_screen_edge click getmouselocation key keydown keyup mousedown mousemove mousemove_relative mouseup set_window type windowactivate windowfocus windowkill windowmap windowminimize windowmove windowraise windowreparent windowsize windowunmap set_num_desktops

Bluetoothのオン・オフをコマンドラインから切り替える

以前、ブログで書いたAndroidのテザリング用アプリ、Easytether。 EasytetherでBluetoothテザリング

端末はXperia Z1f(Docomo)を使っていて、MVMOのSIMに切り替えた際に機器デフォルトのテザリング機能が利用できなくなってしまった。 EasytetherではBluetooth, USBテザリングが選択できるが、こちらはMVMOのSIMを利用しても問題なくテザリングできる。

Easytether使う前にBluetoothを有効にする

Easytetherを使う際にはAndroid側のBluetooth,EasyTetherを立ち上げてBluetoothテザリングを有効にし、そのあとPC側でBluetoothをパネルから有効にし、 コマンドラインでeasytether-bluetooth connect -d MAC_ADDRESSと入力する必要がある。

結構面倒なのだ。喫茶店に来るたびにこれをやったり、携帯もって少し離れるとBluetoothは切れてしまうので、また再接続するのがダルい。 ということで以前のブログでEasyTether用にショートカットキーを割り当てたのだが、Bluetooth自体のオン、オフはまだ出来ていなかった。

会社のPCのWindowsマシンにLubuntuを入れてきた

Webライターさん向けにChromeとOfficeツールが使える格安環境が欲しいとのことで、同僚が買ってきた1万5000円のWindowsPC。 デフォルトで入っている(おそらくkitting時に自動で入る)セキュリティツールが悪さをしてまともにブラウジングができなかった。 その要件であれば、lubuntu(軽量版GUIを備えたUbuntuベースのLinuxディストリビューション)を使えばよいだろうということで、 3時間くらいかけてセットアップした時の備忘録。 WinowsPCにlubuntuを入れる Windowsのコンピュータを起動し、コントロールパネルから”ディスクの管理”を表示する “ディスクの管理”の画面の写真を取る(スクショはだめ。インストール中に見れない) 今回はDドライブの内容が空だったので、Lubuntu側でDドライブをフォーマットすることにする。 Dドライブのディスク空き容量68.43GB。Dドライブの容量の数値を確認しておく。 UnetBootInDiskでLinuxをブート可能なUSBメモリを作る メーカーロゴでF12連打でブートメニューに入って、USBメニューを選択(なければBIOS設定画面に入ってから設定を変更する)。 Try Installを選択。 言語で日本語を選択。 ネットワーク(Wifi)に接続できるので、接続(あとでもできるがこのタイミングのほうが失敗が少ない) インストール中にアップデートをダウンロードする、サードパーティ製のソフトウェアをインストールの両方にチェック インストールの種類で”それ以外”を選択 ブートローダをインストールするデバイスに/dev/sda(ディスクの大元)を選択。 Dドライブの存在していた/dev/sda4/(ディスクの管理でとった写真を参照)を選択し、-をクリック。 空き領域を選択、 + をクリック。論理パーティションを選択。ext4ジャーナリングシステムを選択。マウントポイントに”/“を選択。 これで論理パーティション内部に複数のパーティションが作成可能になる。 スワップ領域を作らなくてよいかとの画面が出るが、無視してよい。あとで追加する。 マシン名とユーザ名とパスワードを設定する。Windows側と同じユーザ名、パスワードを利用。 タイムゾーンはTokyoに。キーボードは日本語に設定する。 Lubuntuをセットアップする スワップを有効化 USBからtry without installを選択 gpartedを利用して論理パーティション内1GBのスワップを作る。swap領域の/dev/sdxx fstabをsudo vi /etc/fstabにて編集。 ( http://linuxsalad.blogspot.jp/2009/05/swap.html ) 再起動してgparted上でスワップオンになっていることを確認 swapがないとたまにフリーズしたりするので早めに設定しておくこと 日本語を入力できるようにする Ctrl-Spaceで日本語入力可能。ibus-anthyが使える。 変換精度のより良いibus-mozc(Google日本語入力)を入れる。コマンドはsudo-apt-get install ibus-mozc。 キーボードインプットメソッドでibus-mozcを追加。 インプットメソッドの切替キーを半角に設定する(hankakuを追加割り当てする)。 GoogleChromeを入れる(firefox起動してそこから検索してインストールする) LibreOffice(OpenOfficeのすごいやつ)を入れる よく使いそうなソフトはデスクトップにショートカットを置く Chrome ファイルマネージャ LibreOffice Writer(Word) LibreOffice Calc(Excel) 見た目整える 綺麗な日本語フォントをAdobeが出してる(源ノ角フォント)のでそれを入れる。mkdir ~/.font/してそこに展開。 ログアウトし、ログインするとルックアンドフィールなどからフォント設定。 FaenzaIconsをダウンロードして設定。 やってみての感想 やはり時間かかった(3h)。ほとんどはパーティションとスワップ周りの調査。 以下が得られた知見達。 論理パーティションを作るには基本パーティションをフォーマットしなければならない。 swapとか使うなら論理パーティション必須。 Installより先にUSBブートしてGpartedで基本パーテイションの1つを論理パーティションにフォーマットする。 その論理パーティションの中でメモリ容量x2程度の小さなパーティションを作成する。 Lubuntuのインストーラ内で上記のパーティションをSwapに割り当てる。 Install時に割り当てられなかったらfstabで設定。再起動後Gpartedで割り当て確認。

elementary OS freyaへのアップグレード時のメモ(elementaryOS lunaから)

lunaからのアップグレードはアップデートマネージャなどのGUIでは提供されていない 新たにインストールディスクを作成し、上書きでのインストールを行う。(むしろこの方法を推奨していた) lunaのインストール時に/homeと/パーティションを分けて管理していたので、/homeを残して/をすべて入れ替える。 /homeと/(root)パーティションがGparted上で /dev/sda1, /dev/sda2等、どれに割り当てられるかを確認 (install時にこれらを割り当てするときに間違えなようにメモしておく) elementaryOS freyaのイメージをダウンロード(https://elementary.io) UnetbootInでのインストールディスクを作成(今回は8GBのUSBメモリに作成) 起動時にBIOS画面でF8を押してUSBディスクからブートさせる。Install elementaryOSを選択 パッケージのインストール 各種リポジトリの追加 sudo man add-apt-repository sudo add-apt-repository ppa:mpstark/elementary-tweaks-daily sudo add-apt-repository ppa:numix/ppa sudo add-apt-repository ppa:webupd8team/atom sudo apt-get update && sudo apt-get upgrade sudo add-apt-repository -y ppa:aguignard/ppa sudo add-apt-repository -y ppa:pi-rho/dev sudo add-apt-repository -y ppa:git-core/ppa elementary-tweaks のインストール アイコンやフォント、アニメーションなどの外観の設定やドッグの設定ができる sudo apt-get install elementary-tweaks numixのiconセットのインストール sudo apt-get install numix-* numix-circleを適用 Arc-themeのインストール sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/Horst3180/xUbuntu_15.04/ /' >> /etc/apt/sources.list.d/arc-theme.list" wget http://download.opensuse.org/repositories/home:Horst3180/xUbuntu_15.04/Release.key

MySQL WorkbenchでQueryの結果が表示されない問題

elementaryOS freya(Ubuntu14.04ベース)で問題が起きた。 MySQLはUbuntuのリポジトリにあるものでも依存関係で問題は合ったり、直接Oracleから落としても上手く動かないことも合ったりしたのであまり驚かない。 (またお前か程度) しかしながら毎度踏みまくるので、ブログなりに記録していかないと、再度環境構築した際に面倒なのでメモ書き。 具体的には以下のような症状。 workbencだQueryの結果が白くなって表示されない。 selectした結果がセルで表示されるはずなんだけど。 ちなみにCUIでMySQLからselectしたりした場合は全く問題ない。 調査してみた 色々な人が死んでた workbenchはelementaryOS freya,Ubuntu14.04以降でSQLの実行結果が表示されないバグがあることが報告されている また、 debパッケージの中身を書き換える方法 が提案されていたが筆者の環境では失敗。 source落としてパッチ当ててmakeする(成功) 唯一上手く行った方法。 下記コマンドを実行 sudo apt-get remove mysql-workbench* tar xvf mysql-workbench-community-6.3.3-src.tar.gz cd mysql-workbench-community-6.3.3-src wget -O patch-glib.diff http://bugs.mysql.com/file.php?id=21874&bug_id=74147 patch -p0 < patch-glib.diff sudo apt-get build-dep mysql-workbench sudo apt-get install libgdal-dev cd build cmake .. -DBUILD_CONFIG=mysql_release make sudo make install buildは1.5h程度は見込んでおいた方が良い。 sudo make install後にrebootするときちんとresultが表示される。 special thanks reddit launchpad

EasytetherでBluetoothテザリング

Easytether with linux EasytetherFull( GooglePlay ) 数年前に、AndroidのXperia acroHD使ってた時に利用してた有償のテザリングアプリ。一応FreeのLite版もある。 そして、公式のLinux向けクライアントがある。 当時はUSBテザリングで利用しており、テザリングサポート外の端末でも動作して、そこそこ速度が出ていたので利用していた。 Linux版パッケージは こちら からダウンロード可。 現在利用しているXperia Z1fではUSBテザリング、Wifiテザリング、Bluetoothは標準でサポートされている。 いつもはXperia側のバッテリーの事を気にかけてBluetoothでテザリングを行っていたが、Easytetherの事だから標準より速度出るのでは…?と、気になってみたのでやってみた Speedテスト3回戦 Easytether Bluetoothテザリング AndroidのBluetoothテザリング やはり、Easytetherの方が早い。 若干だけれども。 ただ、バッテリー消費量の検証は行っていないので片手落ち感はある。 ただし起動/終了が面倒なので、ショートカット割り当てまで行う。 おまけ(起動スクリプトの登録) 接続を切り替えるscriptを作る easytether.shを任意のディレクトリに作成。 #!/bin/sh pgrep -lf easytether ret=$? if test ${ret} -eq 0 then # 既に起動中の場合停止させる pkill easytether -f else # 対象のスマホのBluetoothのMACアドレスを指定して接続 sudo easytether-bluetooth BT:MA:CA:DD:RE:SS fi 内容はこんな感じ。 実行権与えたいのでsudo chmod +x easytether.shしてあげる sudo ./easytether.shで動かしてみる。 パスワードの省略( sudoersの変更 ) ただし、sudo つけてあげないとEasytetherが動いてくれないので、自動化やショートカット割り当てはには向かない。そこで下記のようにsudo visudoで当該スクリプトに関してはパスワードが必要ない旨を明示し、パスワードを省略する。 <username> ALL=(ALL) NOPASSWD: /path/to/script/ xbindkeysショートカットキーのマッピング xbindkeysを利用してマッピングする。 持ってない人はsudo apt-get install xbindkeysで入れましょう。便利。 ~/.xbindkeysrcに下記を追記する "sudo /path/to/script/easytether.sh" Mod4 + F2 これはSuper_L + F2で起動させるようにした。 これでEasytetherの切り替えがショートカットのみで行われるようになった。 色々なキーを自作のスクリプトにバインドしてるけれど、xbindkeys便利すぎる。 それではEasytetherで良いノマドライフを!

Linuxでブルーライトフィルタ そして快眠へ...

世界各国のLinuxerの皆さん、こんばんは 寝不足のLinuxer達に贈る 最近、寝不足のような気がすることはないだろうか? 毎日趣味や作業でPCと対面するため、目の疲れや夜の寝不足と行ったことからは免れられない。 少しでも目への負荷を軽減させるべく、なるべく夜はPCを利用しない、利用時間を短くするなど努力したことはあるはず。 現実問題難しい。 PCメガネ、JINS PC jins(http://www.jins-jp.com/jins-pc/)のメガネ。 このメガネを使うと目に(心理的に)優しくなれる。 そもそも、寝付きの悪さの原因の根源は何か? ブルーライト、聞いたことあるはず。 寝付きの悪さだけでなく、目の疲れ、 肩こり、頭痛などに影響を与えていると言われる。 メガネを買うか否か (ハードで何とかするんじゃない、ソフトウェアでどうにかするんだ…!) > そんなLinuxer達の心の声が聞こえてきそうだ。(自分は買ってしまった) ブルーライトをカットする 本題に入る。 実はこのブルーライト、色温度を下げることで減量させることができる。 色温度(いろおんど、英語:color temperature)とは、ある光源が発している光の色を定量的な数値で表現する尺度(単位)である。単位には熱力学的温度の K(ケルビン) を用いる。 (http://ja.wikipedia.org/wiki/%E8%89%B2%E6%B8%A9%E5%BA%A6) 実は色温度は青い方が高い。 炎は赤いので赤は温度が高そうだが、実際は炎の先端の青い部分が最も温度が高い。 そう、モニタの色温度をソフトウェアで変更さえすれば良い。 輝度を下げることでブルーライト低減はできるが、色温度を下げることで更に低減させ、PCメガネよりさらに高い効果を目指す。 今回はRedshiftというソフトウェアを利用。 Redshift manual page このソフトウェアを使えば、手持ちのマシンから放たれるブルーライトが低減できる。 Redshift同様のソフトウェアとしてf.luxも試したが、稀にCPU消費量が非常に高くなることがあり、それが理由でRedshiftを利用している。 Redshiftのインストール sudo apt-get install redshift redshift-gtk パネルのインジケーターに表示させることができる。コマンドラインでも使えるため、その場合redshift-gtkは必要ない。 Redshiftの起動と設定 redshift-gtkを実行させると、パネル上にインジケーターが出る。 toggleでon/offを切り替え。 autostartで自動起動の設定を切り替え。 詳細な設定内容はコマンドラインや外部ファイルから入力することができる。 こちらのサイトで詳しく紹介されていた。 デフォルトの設定では、日中の色温度はあまり抑えない設定で、夜間はほんのり赤くなり色温度を抑える。([off]6300K, [day]5700K, [night]3600K) 夜の寝付きの良さが変わるはず。 Linuxer達に良き睡眠を。

Elementary OS freyaでハイバネートオプションを追加する

少し前からElementaryOSの最新版Freyaを使っている。 電源周りで少し手こずったので、備忘録として残しておく。 インストール後にやったことはまた今度まとめる。 ハイバネートオプションを追加する Elementary OS Freyaでハイバネートが利用できなかったので、利用できるようにする。 ※ メモリ領域のデータをディスクに退避することで、作業状態を保存した状態で電源オフにし、電源オンでそこから復帰できる。 サスペンドはメモリに電源供給しながらデータを保持。メモリは揮発性で、電源供給がないとデータが消えてしまうため。 pm-utilsを導入してpm-hibernateコマンドを実行する手もあるが、今回は別の方法で。 電源オプションの中にハイバネートを追加する sudo vi /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla 下記をコピー&ペースト [Re-enable hibernate by default in upower] Identity=unix-user:* Action=org.freedesktop.upower.hibernate ResultActive=yes [Re-enable hibernate by default in logind] Identity=unix-user:* Action=org.freedesktop.login1.hibernate ResultActive=yes Grubの設定 sudo vi /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/sda3" resume=‘スワップ用パーティション’とすること! Grubの更新 sudo update-grub これでシャットダウンのオプションなどで、休止状態(もしくはハイバネート)が増えているはず。 ノートPCを閉じた時にハイバネーションを有効にしたい && ロック画面でのPowerボタンの挙動を変える 自分の場合はロック画面の状態(だがディスプレイオフ)で電源を押して復帰しようとして、シャットダウンしてしまう現象に悩まされていた デフォでこの動作はバグと言っていい気がする。あとノートPCなので、急なとき閉じて移動、などあるのでその際はハイバネートできたほうが良い。 /etc/systemd/logind.confの編集 man logind.conf で確認したところ、HandlerPowerKeyやHandleLidSwitchなど、電源周りの挙動を変えられるようだった。 sudo vi /etc/systemd/logind.confにて該当箇所のコメントアウトを外し, 下記に変更する HandlePowerKey=hibernate HandleLidSwitch=hibernate 再起動後、ロック画面での電源ボタン, PCの閉じる動作によるハイバネートが有効になっているはず。