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を起こし直せば動く

fontconfigのエラー

ubuntuで突然,GUIプログラムを起動すると

Fontconfig warning: "/etc/fonts/conf.d/30-metric-aliases.conf", line 84: Having multiple  in  isn't supported and may not work as expected

みたいなエラーと

Unable to update the static FcBlanks: 0x0601

みたいなエラーが大量に出るようになって困った.

前者は該当ファイルを一つ一つ開いて,<alias>ディレクティブ内で複数の<family>をまとめて1つの<family>にエイリアスしているところを,別<alias>に展開することで解消.

具体的にはこんな感じ
Fixing Warning Messages About Font Configuration

後者はエラーの出てるコードだけ消せばいいのかもしんないけど,メンドクセーので/etc/fonts/fonts.confの<brank>ディレクティブを全消しで解消.

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

GeForce を積んで CUDA を使う,オンボードの intel グラフィックも搭載したノート PC で Virtualbox の 3d acceleration を有効にする

どうも,nvidia optimus に対応した bumblebee というものを入れないと,うまく動かないらしい.
bumblebee を入れる手順は…

$ sudo apt-get purge nvidia\*
$ sudo add-apt-repository ppa:bumblebee/stable
$ sudo apt-get update && sudo apt-get upgrade
$ sudo apt-get install --reinstall bumblebee bumblebee-nvidia nvidia-352 nvidia-settings mesa-dri # bumblebeeと一緒にインストールする
$ sudo apt-get install cuda 

ちゃんと入ったか確認.

$ ps aux | grep bumblebeed

gpu を使って起動

$ optirun COMMAND

ベンチマーク

$ optirun glxgears

GPUモニタ

$ nvidia-smi -l

R と Rcmdr を ubuntu に入れる

ubuntu 14.04 に R を入れる.
インストールはこの辺を参照した→How To Set Up R on Ubuntu 14.04 | DigitalOcean
公式はこの辺→Index of /bin/linux/ubuntu

  1. リポジトリの追加.
    /etc/apt/sources.list.d/ の下にファイルを作った方が管理し易いと思うので,これをオススメ.

    deb http://cran.ism.ac.jp/bin/linux/ubuntu trusty/
    
  2. リポジトリのキーを追加.
    $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
    $ gpg -a --export E084DAB9 | sudo apt-key add -
    
  3. インストール.
    $ sudo apt-get update
    $ sudo apt-get upgrade
    $ sudo apt-get install r-base
    
  4. Rcmdrのインストール.
    これができれば,他のパッケージも同じように動くはず.

    > Sys.setenv(http_proxy="http://username:password@proxy.address:port/");
    > install.packages("Rcmdr")
    
  5. 初回起動時に,推奨パッケージのインストールも行なわれると思う.
    そこはお好みで.

    > library(Rcmdr)
    

ubuntuの差分バックアップ

ubuntu は deja-dup が標準で入っているので,使われていることが多いと思うが,NW越しにパスワードをかけて保存しようとすると,うまくいかないことがある.
で,deja-dupが呼び出しているduplicityを直接叩くことにする.
あと,うちの環境では何故かsmb経由では保存がうまくできなかったので,FTP経由にした.
これで保存したバックアップは,deja-dupから読み込むことができるけど,リストアスクリプトも用意してみた.

ちなみに,deja-dupが呼び出す時のオプションは,適当なバックアップを手動で走らせている間に,$ ps aux | grep duplicityで見ると良い.

設定ファイル,定期バックアップスクリプト,古いバックアップの削除スクリプト,リストアスクリプトの例.

# 保存するディレクトリリストをスペース区切りで
DIRS='/home/USERNAME /MYDIR'

# 連想配列の宣言
declare -A INCLUDE
declare -A EXCLUDE

# duplicity は include/exclude に合致するディレクトリが実際にないとエラーを吐くので,
# ターゲットディレクトリ毎に指定する必要がある
# deja-dup がここを include に入れていた..cacheをexcludeしつつ,このファイルだけincludeしたりできる.
INCLUDE['/home/USERNAME']='/home/USERNAME/.cache/deja-dup/metadata'
# 半角スペース入りのディレクトリは後ろのfor loopでどうしても分割されてしまうので,半角スペース抜きに設定を変更するのが楽(vboxとか)
EXCLUDE['/home/USERNAME']='/home/USERNAME/mountedvolumes /home/USERNAME/Dropbox /home/USERNAME/Downloads /home/USERNAME/.cache /home/USERNAME/.rnd /home/USERNAME/VirtualBoxVMs'

INCLUDE['/MYDIR']=''
EXCLUDE['/MYDIR']='/MYDIR/lost+found'
#!/bin/bash

. ~/bin/duplicity_dirs.conf

# environment variables
# パスワードとかコマンドにもスクリプトにも入れたくない場合は,読み込むしかない
USER=$(cat /home/USERNAME/username)
# GnuPGに渡されるパスフレーズ
export PASSPHRASE=$(cat /home/USERNAME/passphrase)
# FTPログイン時に使用されるパスワード
export FTP_PASSWORD=$(cat /home/USERNAME/password)

# command
CMD=/usr/bin/duplicity

# バックアップ保存先
# destination
DESTADDR=192.168.1.200
DESTPATH=/BackupDirectory
# FTPの場合
DESTSRV=ftp://${USER}@${DESTADDR}/array1${DESTPATH}
# LinkStationの場合,array1が間にはさまることに注意

# options
# 1ヶ月ごとにフルバックアップを取る
OPTIONS='--volsize=100 --gpg-options=--no-use-agent --archive-dir=/home/USERNAME/.cache/deja-dup --tempdir=/tmp --full-if-older-than 1M'

# include オプションの生成
COMBINE_INC() {
    RESULT=""
    for STRING in $*
    do
        RESULT="${RESULT} --include=$STRING"
    done
}

# exclude オプションの生成
COMBINE_EXC() {
    RESULT=""
    for STRING in $*
    do
        RESULT="${RESULT} --exclude=$STRING"
    done
}

# loop for all target directories
for DIR in $DIRS
do
    echo backup $DIR
    # include
    COMBINE_INC ${INCLUDE[$DIR]}
    INC_OPT=$RESULT
    # exclude
    COMBINE_EXC ${EXCLUDE[$DIR]}
    EXC_OPT=$RESULT
    # command
    echo $CMD $INC_OPT $EXC_OPT $OPTIONS $DIR ${DESTSRV}$DIR
    $CMD $INC_OPT $EXC_OPT $OPTIONS $DIR ${DESTSRV}$DIR
done

export PASSPHRASE=""
export FTP_PASSWORD=""
#!/bin/bash

. ~/bin/duplicity_dirs.conf

# environment variables
# パスワードとかコマンドにもスクリプトにも入れたくない場合は,読み込むしかない
USER=$(cat /home/USERNAME/username)
# GnuPGに渡されるパスフレーズ
export PASSPHRASE=$(cat /home/USERNAME/passphrase)
# FTPログイン時に使用されるパスワード
export FTP_PASSWORD=$(cat /home/USERNAME/password)

# command
CMD=/usr/bin/duplicity
SUBCMD=remove-older-than # 経過時間を条件に削除するモード

# バックアップ保存先
# destination
DESTADDR=192.168.1.200
DESTPATH=/BackupDirectory
# FTPの場合
DESTSRV=ftp://${USER}@${DESTADDR}/array1${DESTPATH}
# LinkStationの場合,array1が間にはさまることに注意

# options
PARAM=6M  # 6ヶ月より古いものを消す
OPTIONS='--force'

# loop for all target directories
for DIR in $DIRS
do
    echo clear $DIR
    echo $CMD $SUBCMD $PARAM $OPTIONS ${DESTSRV}$DIR
    $CMD $SUBCMD $PARAM $OPTIONS ${DESTSRV}$DIR \
        && echo "clear old data for $DIR" \
        || echo "some error may happen in the process for $DIR"
done

export PASSPHRASE=""
export FTP_PASSWORD=""
##!/bin/bash

. ~/bin/duplicity_dirs.conf

# environment variables
# パスワードとかコマンドにもスクリプトにも入れたくない場合は,読み込むしかない
USER=$(cat /home/USERNAME/username)
# GnuPGに渡されるパスフレーズ
export PASSPHRASE=$(cat /home/USERNAME/passphrase)
# FTPログイン時に使用されるパスワード
export FTP_PASSWORD=$(cat /home/USERNAME/password)

# command
CMD=/usr/bin/duplicity
SUBCMD=restore

# バックアップ保存先
# destination
DESTADDR=192.168.1.200
DESTPATH=/BackupDirectory
# FTPの場合
DESTSRV=ftp://${USER}@${DESTADDR}/array1${DESTPATH}
# LinkStationの場合,array1が間にはさまることに注意

# 入力処理 - バックアップのURLを特定する
# ターゲットディレクトリに部分一致があれば,DIRに値が入ったままbreakする仕組み
for DIR in $DIRS
do
    [ "${1#$DIR}" != "$1" ] && break
    DIR=""
done

[ "$DIR" == "" ] && exit

# 対象ファイルの相対化
# duplicityは,バックアップ先のディレクトリからの相対パスが必要
RELPATH="${1#$DIR/}"
OPTIONS="--file-to-restore $RELPATH"

# リストアしたファイルを格納するテンポラリファイル
# 直接書き戻すこともできるけど,リスキーだからやめた方が良い
TARGET=~/restore
mkdir -p $TARGET
TARGET="${TARGET}/${RELPATH}"

echo restore $1
echo $CMD $SUBCMD $OPTIONS ${DESTSRV}$DIR $TARGET
$CMD $SUBCMD $OPTIONS ${DESTSRV}$DIR $TARGET \
    && echo "files are restore into ${TARGET}" \
    || echo "some error may happen in the process for ${TARGET}"

export PASSPHRASE=""
export FTP_PASSWORD=""

個人的には,バックアップをdaily,削除をmonthlyで回すくらいがオススメ.