xmonad on ubuntu 16.04 でバックライトを調整

経緯

VAIO Pro 13 に入れていた 14.04 を 16.04 に変えたら,xbacklight が動かなくなったので自分でコマンドを作ってみた.

使い方

下のコードをbglightという名前でPATHの通ったところに置いたとすると

sudo chmod 666 /sys/class/backlight/{バックライト名}|/brightness  # 一般ユーザに書き込み権限を与える
$ bglight  # 現在の照度を表示する
30
$ bglight +  # 最大値まで10ずつ照度を増加させる
$ bglight -  # 0まで10ずつ照度を減少させる

コード

これは,バックライト名がintel_backlightの場合.

Integromat で Gmail の特定フォルダのメールを slack に投稿

Integromatというのは,IFTTTとかzapierみたいなwebサービスの連携サービス.
かなり細やかに設定できるというか,もはやプログラミングするような感じで構成しないと動かない.

Gmailをslackに投稿する時のハマりポイント

  1. 日本語の文字化け
  2. 長いとslackに拒否られる

対策

文字列変換してちょんぎる.

手動インストールしたnginxを維持しながらowncloudをupgrade

前提

apache2は2.4で設定が変わった折に捨てた.
nginxはwebdavを使うためやhttp2を使うためなどの理由でdebianのパッケージでは不足であったため公式サイトの安定リリースを手動コンパイルしインストールしている.
owncloudは公式のドキュメント(Install package owncloud, owncloud-files)にあるリポジトリを使用する.

手順

owncloudをリポジトリからapt-getで入れる場合,httpdセクションのパッケージが入っていないと依存関係が問題になる.
owncloud-filesで依存関係を無視して入れるか,ダミーパッケージを作成して依存関係を解決させるかが必要となる.
今回は後者を選択した.

リポジトリ修正
owncloudはメジャーアップデートをスキップすることはできない.
例えば8.1が入っている場合,8.1->8.2->9.0->9.1とアップデートしなければならない.
なので8.2を入れる.
なんかリポジトリのアドレスが変わってたっぽいのでついでに対応する.

@@ -1 +1 @@
-deb http://download.opensuse.org/repositories/isv:/ownCloud:/desktop/Debian_8.0/ /
+deb http://download.owncloud.org/download/repositories/8.2/Debian_8.0/ /
更新準備(ダミーパッケージインストール)
まず,
equivsでダミーパッケージを作って入れる.

  1. equivsを入れて
    $ sudo apt-get update && sudo apt-get install equivs
    
  2. 適当なディレクトリでダミーパッケージ作り.
    $ mkdir nginx-dummy && cd nginx-dummy
    $ equivs-control nginx-dummy
    
  3. 設定ファイルの編集
    ただし,php5-cgiは8.2のみ依存関係のため入れている.8.2のアンインストール後,つまり9.0インストール後はphp5-cgiを抜いてインストールし直して良い.(9.0~は依存関係は「php5-cgi | php5-fpm」となっているので)

    @@ -6,14 +6,14 @@
     # Homepage: 
     Standards-Version: 3.9.2
    
    -Package: 
    +Package: nginx-dummy
     # Version: 
     # Maintainer: Your Name 
     # Pre-Depends: 
     # Depends: 
     # Recommends: 
     # Suggests: 
    -# Provides: 
    +Provides: httpd,php5-cgi
     # Replaces: 
     # Architecture: all
     # Copyright: 
    @@ -22,7 +22,7 @@
     # Extra-Files: 
     # Files: 
     #  
    -Description: 
    - long description and info
    +Description: dummy package for nginx
    + dummy package for nginx installed manually.
      .
    - second paragraph
    + nginx-dummy provides httpd and php5-cgi
    
  4. ダミーパッケージを作ってインストール
    $ equivs-build nginx-dummy; sudo dpkg -i nginx-dummy_1.0_all.deb
    
パッケージ更新
で,やっとownCloudを更新する.

$ sudo apt-get update && sudo apt-get install owncloud=8.2
ファイル更新
展開済のowncloudを更新する.

$ cd /var/www/owncloud
$ sudo -u www-data ./occ upgrade
メンテナンスモード終了
動作確認は設定ファイルでmaintenanceをfalseにしないとできない.

@@ -21,3 +21,3 @@
   'updatechecker' => false,
-  'maintenance' => true,
+  'maintenance' => false,
   'theme' => '',
繰り返す
8.2->9.0
9.0->9.1

10.0も出てるけど,9.1はまだサポートされてるし,今回はパス.
と思ったら,9.0もまだサポートされてた.アップデートしすぎた.でもダウングレードはサポートされてないので,9.1で行く.
Maintenance and Release Schedule · owncloud/core Wiki

xmonad.hsサンプル

実は,Gistのテストを兼ねている.

言語を指定しなくても,ファイル名の拡張子か何かから判別してくれてんのかな.
こりゃ楽だわ.

ubuntu を 16.04に上げたら avoidStruts が効かなくなった件

ubuntu を 16.04 に上げると xmonad のバージョンが 0.12 にあがり,avoidStruts 関数はあるはずなんだけど,私の環境では効かなくなった.
文法ミスを疑い haskell の本を読んだりして勉強したが原因が分からず,結局のところ avoidStruts を使わない方法で解決した.
とりあえず desktopLayoutModifiers を使うだけでできた.

import XMonad.Config.Desktop(desktopLayoutModifiers)

main = do
    { -- 略
    , layoutHook            = toggleLayouts (noBorders Full) $ desktopLayoutModifiers $ myLayout
    --, layoutHook            = toggleLayouts (noBorders Full) $ avoidStruts $ myLayout
    }

myLayout = (spacing 18 $ ResizableTall 1 (3/100) (3/5) [])
            |||  (dragPane Vertical   (1/10) (1/2))
            |||  Full

xmonadで特定のプログラムだけフローティング

xmonadを使っていて,タイル配置するとレイアウトが壊れたり操作ボタンが隠れたりして使えないことがある.
そういったプログラムは,フローティングするのが良い.
しかしSuper+クリックで配置後にフローティングしてもウィンドウサイズをリサイズしてくれないため操作ボタンが出てこないことが多々ある.
そういう場合は,最初から特定のプログラムをフローティングで起動するように設定するのが良い.

クラス名を調べる

以下のコマンドで,xpropを使ってコンソールにウィンドウの情報を取得できるようにする.
クラス名だけフィルタしても良い.
このコマンドを実行するとマウスポインタの形状が変わるので,対象のウィンドウをクリックすると情報を取得できる.

$ xprop | grep WM_CLASS

xmonadの設定

xmonadをdefaultConfigで起動している場合,<+>演算子で連結(?)すると良い.

main = do
    -- 略
    xmonad $ ewmh defaultConfig
    { -- 略
    , manageHook = myManageHook
    , -- 略
    }

myManageHook = manageHook defaultConfig <+> myManageHookFloat

myManageHookFloat = composeAll
    [ className =? "PATTERN1" --> doFloat
    , className =? "PATTERN2" --> doFloat
    ]

debian で systemctl で自動起動

あらすじ

systemctl で start とか stop とかできるように /etc/systemd/system/ 以下にサービス定義を置いて安心していたら,自動起動しなかったよ!

それからどーした

sudo systemctl list-unit-files --type=service

nginx.service            disabled

とか出てきたら,サービス定義は生きてるけど自動起動が無効なので,

sudo systemctl enable nginx.service

とかする.

他にも mask/unmask とかハマりポイントなんで,systemctl の man を見て対処する.

cygwin に jupyter を入れる

経緯

Ctrl+d で落ちない python コンソールなんてありえない!

方法

python3-pip と python3-zmq を cygwin のインストーラで入れる.
(英語サイトでは bundled zmq とか書かれてるやつ)

pip3 install jupyter

他にも何か pip で入らなさそうなモジュールとかあったら,bundled を探してみるとあるかも.

Cygwin で Cron を動かす

インストール

cron と cygrunsrv を cygwin でインストール済とする.
合わせて,nkfも入れてあると便利.

nkf を入れる場合,gcc-coreとmakeも入れておくこと.

サービスに登録

昔は cygrunsrv を叩いていたが,今は cron-config でできる.
要,管理者権限.

予断だが ssh-server なんかも ssh-host-config でできるらしい.

yes/no で聞かれているところは基本 yes.
入力を促されるところは CYGWIN は空欄,パスワードは Windows のログオンパスワード.

もしエラーが起こった時に,日本語で読みたい場合は,

cron-config 2>&1 | nkf -u

とかしておくと便利.

cron を開始

うまく開始する条件がよく分からんが,たまに上でうまく動作しないことがある.
一応,こうなっていれば成功のはずなのに,なぜかスクリプトの出力をファイルにリダイレクトさせたはずの出力が得られないことがある.

$ cygrunsrv -Q cron
Service             : cron
Display name        : Cron daemon
Current State       : Running
Controls Accepted   : Stop
Command             : /usr/sbin/cron -n

そういう時は,サービスの再起動が良い.
要管理者権限.

$ net stop cron 2>&1 | nkf -u
$ net start cron 2>&1 | nkf -u

これはメッセージが日本語確定なので,nkfを使う.
で,その後ステータスを見て, Current State が Runnning でなければ,cygrunsrv で開始させる.

$ cygrunsrv -S cron