UbuntuでCitrix Receiverを使ってVPN越しにRDPする時のtips

firefoxにCA証明書を登録してるのに,証明書がtrustedじゃないよって怒られる時のtips

前提

  • VPNを受けてRDPを受け付けるサーバ側は用意されているものとする.
    勤務先とか勤務先とか勤務先とか
  • 必要な証明書はcrtとかcerとかのファイルがあるものとする

手順

  1. firefoxをインストール.ubuntuのdesktopを入れてたら最初から入ってるかも
  2. Citrix Receiverをインストール.
  3. 証明書をインストール
    • 個人証明書
    • サーバ証明書
  4. 指定されたURLにアクセスして認証を通す
  5. ここで,Citrix Receiverに怒られる場合,firefoxのcertをCitrixが読めるようリンクを貼る
    sudo ln -s /usr/share/ca-certificates/mozilla/* /opt/Citrix/ICAClient/keystore/cacerts
  6. それでもダメな場合,firefoxに取り込めてない可能性があるので直接コピっちゃう
    sudo cp /path/to/cert.crt /opt/Citrix/ICAClient/keystore/cacerts

    1. 証明書がちゃんと入っていたら,ブラウザのセッションは維持したまま,icaを落とし直してreceiverを起こし直せば動く

updatedbのエラー回避

crontabで定期実行しているupdatedbが吐く/run/user/*/gvfsへのパーミッションエラーを避けたい

updatedbはlocateでファイル検索する時のDB更新コマンド.用途から考えて/run/user配下は検索する必要がないので,crontabで呼び出す時に検索パスから外すオプションをつければ良い.

updatedb --prunepaths=/run/user

これはubuntuの場合.ディストリによっては=でつながないらしいので注意.複数パスを外す場合は

updatedb  --prunepaths='/run/user/110 /run/user/1000'

みたいにする.

findでまとめてパーミッション変更

追記

ここ(ファイルやディレクトリのパーミッションを一括で置換したい - Qiita)のコメント欄の内容が神すぎたので自分でも忘れないよう転記.
この「X」しらんかった.

chmod -R a=rX,u+w path/to/dir

sambaでファイルサーバを運用している時に,別ユーザでのアクセスが問題になることがまれによくある
なのでディレクトリは755に,ファイルは644にしたい

基本

# まとめてchmodに渡す.数が多いとコマンドの上限文字数を越える
$ find . -type d -exec chmod 755 {} +
# 1つずつchmodに渡す.数が多いとえらい時間がかかる
$ find . -type d -exec chmod 755 {} \;

xargsとの組合せ

# まとめてchmodに渡す.数が多いとコマンドの上限文字数を越える
$ find . -type d -print0 | xargs -0 chmod 755
# 20ずつまとめてchmodに渡す.上3つと比べるとマシ
$ find . -type d -print0 | xargs -0 -n 20 chmod 755

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の場合.

手動インストールした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

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 を見て対処する.

dovecotを入れてメールのローカル配信をする

インストール

sudo apt-get install dovecot-pop3d dovecot-lmtpd heirloom-mailx postfix
maildirmake.dovecot /var/mail/USERNAME  # Maildir形式の場合

設定

  • /etc/dovecot
    • dovecot.conf
    • conf.d/10-mail.conf
    • conf.d/10-master.conf
    • conf.d/10-ssl.conf
  • /etc/postfix
    • main.cf
  • /etc/aliases
    • 書いたら newaliases を走らせる./etc/aliases のオーナーが /etc/aliases.db と一緒でないとエラーを吐く
  • /etc/mailname

テスト

送信テスト
行中に「.」のみの行が末尾のしるし.

mail USERNAME@HOSTNAME
Subject: Test
this is test
.

受信テスト

mail