ssh接続先のサーバーにKiteをインストールしてvimで使う

はじめに

Kiteをインストールする方法はKite公式ページやQiitaの記事などに書いてあるけど,sshで接続するサーバーにインストールしてvimで使えるようにする方法はどこにもなかったのでここに残しておこうかと.
X窓を転送すればGUIでインストールできると思ったけど,僕の環境ではできなかったので以下の方法でインストールした.

導入手順

# Kiteのインストール
$ bash -c "$(wget -q -O - https://linux.kite.com/dls/linux/current)"
# vim用プラグインのインストール
$ mkdir -p ~/.vim/pack/kite/start/kite
$ git clone https://github.com/kiteco/vim-plugin.git ~/.vim/pack/kite/start/kite/
# Neovimの場合
$ mkdir -p ~/.config/nvim/pack/kite/start/kite
$ git clone https://github.com/kiteco/vim-plugin.git ~/.config/nvim/pack/kite/start/kite/

おわり

Ubuntu18.04から20.04にアップグレードするとログイン画面が表示されなくなった

はじめに

Ubuntu18.04LTSから20.04LTSにアップグレードしました.
まぁバグがあるやろなと思ってはいたんですが,電源を入れても黒い画面しか表示されずログインすらできなくなってしまったので解決策を備忘録として残しておきます.

解決策

CUDAが原因でした.
僕はこのPCで以前から深層学習を行ったりしていたので,CUDAが入っていないとは思ってもいませんでいした.
まぁCUDAを入れ直して解決できたので以下にその方法を順序立てて記します.

1. リカバリーモードの起動

普通に起動しようとすると黒い画面(なんかところどころ変な模様ありますが...)しか表示されません.
そこでリカバリーモードで起動します.
まず普通に電源をつけます.
ロゴが表示された(私の場合はTSUKUMOで購入したBTOなので「TSUKUMO」と表示されます)ときに,SHIFTキーを長押しすることでブートローダGNU GRUBだと思います)の画面を表示させることが出来ます.
ちなみに,ぐぐると人によってはESCキーを連打だったり長押しだったりします.
それぞれ試してみてください.
どれかで行けるはずです.
GRUBの画面が表示されたら「Advanced options for Ubuntu」を選択します. すると,起動可能なLinuxカーネル名の後ろに「(recovery mode)」と記載されているものがあるのでこれを選択します.
カーネルのバージョンは複数あると思いますが,最新のものを選んでおけば無難かと思います.
これでリカバリーモードでの起動が完了です.

2. CUDAのインストール

リカバリーモードで起動した後,ターミナルを立ち上げます.
試しにnvidia-smiコマンドを打ってみて,もしそんなコマンドないよと言われたらCUDAをインストールすれば解決できます.
もしGPUに関する情報が出力されたらCUDAが原因でないとおそらく思われる($ ls /user/local/cuda* で確認してみてください)ので,このページをそっと閉じてください.
ちなみに,僕の場合は今までインストールしたCUDAのディレクトリの中身がほとんど消えていました...
で,CUDAのインストール方法ですが,こちらのNvidiaの公式ページから行うのが最善だと思います.

developer.nvidia.com

ここに記されているコマンドをコピペすれば無事にインストールできます.
時間はまぁ5分位だと思います.

3. .bashrcへの記述

僕はbashを使っているので.bashrcに書きますが,もしログインシェルをzshやfishなどを使っている人たちはそっちの設定ファイルに書いてください.
ここではbashの場合を紹介します. vimでも何でもいいので,.bashrcを開いてください. 今まで使用していたCUDAのパスが残っていると思います.
例えば以下のような感じです.

export PATH="/usr/local/cuda-10.2/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH"

これを先程インストールしたCUDAのものに書き換えます.

export PATH="/usr/local/cuda-11.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH"

保存してsourceコマンドで.bashrcを読み込ませます.
これでnvidia-smiが適切に動作すれば成功です.

終わりに

この後にPCの再起動をすれば問題なく動いてくれました.
Linuxの気持ちが少しわかるようになった気がしました.(笑)

macのvimでヤンクができない時の対処法

はじめに

いつもは自宅のデスクトップを使っているのですが,急遽帰省したのでMacBookProで作業する必要がありました.
そこでデスクトップの.vimrcをmacにscpでコピーして使おうとしたところ,ヤンクが正しく動作しなかったのでその対処法になります.

症状

いつもはShift+vで行全体をビジュアルモードで選択してyでヤンクする,ということを僕はよくやります.
この時に,「選択はできるものの正しくヤンクされず,pで貼り付けようとするとクリップボードの中身が貼り付けられてしまう」ということが起きました.
つまり,「ヤンクの内容がレジスタに反映されないが,ただしクリップボード との連携はできている」ということです.

解決法

もともと僕の.vimrcには以下の記述がありました.

set clipboard=unnamedplus

clipboardオプションにunnamedplusを設定するとLinuxクリップボードとの連携をすることが可能になります(もちろんvimがclipboardに対応していることが前提ですが).
ちなみに対応しているかどうかは,

$ vim --version | grep clipboard 

で+clipboard(対応している)となっているか-clipboard(対応していない)となっているかで確認できます.
で,これを以下のように変更しました.

set clipboard=unnamedplus
set clipboard+=unnamed

これにより,unnamedplusの後ろにunnamedが追加されます.
通常,Linuxではunnamedplusは「Ctrl+vでのペースト」に,unnamedは「中クリックでのペースト」に対応することになります.
Macでの挙動は詳しく調べていないのでわかりませんが,上のようにすると「Ctrl+vでペーストが可能かつヤンクがレジスタにしっかりと反映される」というような想定していた挙動ができるようになりました.

終わりに

あくまでも応急処置を忘れないように書き起こした記事になります.
しっかりと原理を理解したければ,上の内容を鑑みた上で自分で調べてみてください.
一助になれば嬉しいです.

RNNとLSTMの解説サイトの備忘録

RNN,LSTMについてしっかりと勉強したいと思ったので参考になったサイトをグループ分けして残しておきます. ちなみに目的は株やfxの予測です.

原理の解説

有名なQiitaの記事.一通り読めばだいたい理解できる.
qiita.com

teacher forcing

teacher forcingとその派生まで
satopirka.com

実装関連

PyTorchのnn.LSTMのページ.見れば使い方がだいたいわかる.
pytorch.org

PyTorchでfxの予測モデルを作成している.ナマの波形を予測しているわけではなく,一日後に上がるか下がるかを予測していて面白い.テストでは一年間で+3%になる結果.
qiita.com

PyTorchで日経平均の予測.寄せ集め感がすごいが,参考にしているいろいろなリンクに飛べるので調べものをするには都合がいい.
qiita.com

正直内容は微妙ですが,時系列データを実際に使ってやっていたのでモデル構築や学習の参考にしました.
hilinker.hatenablog.com

Ubuntu18.04LTS初期設定メモ

はじめに

先日、ツクモBTOでデスクトップPCを購入したので初期設定で行ったことや参考にしたサイトを備忘録としてまとめようと思います。
初めてのデスクトップPCなので色々拙いところがあると思います。その際はぜひご指摘いただけると幸いです。
詳しい解説は結構リンク移動先に任せます。笑

※まだ少し書き途中です。温かい目で見てください汗

環境

OS : Ubuntu 18.04 LTS 日本語Remix (出荷時はなし)
CPU : Intel Core i7-9700K
GPU : NVIDIA GeForce RTX 2080 Ti
容量 : SSD1TB + HDD2TB
メモリ : 16GB キーボード配列 : US

Ubuntuをインストールする

インストールの一連の流れはこちらを参考にしました。
ISOイメージファイルのリンクやライブUSB作成方法(windowsのみ)なども記されています。 linuxfan.info 現在の最新版は20.04LTSですが最初は色々とバグが多いので18.04LTSに、それと日本語の設定諸々が面倒くさかったので日本語Remix版にしました。

僕はラップトップはmacを使っているので、ライブUSBの作成はこちらを参考にしました。 qiita.com

またUS配列のキーボードを使用したい場合は、「キーボードレイアウトの選択」で「日本語」ではなく「英語(US)」を選択する必要があります。
(「キーボードレイアウトを検出」に任せれば大丈夫だと思いますが)

あと、ログイン画面が出た後にパスワードを打ってEnterを押すとフリーズするバグに当たったので修正しました。
以下のサイトを参考にしたところ改善されました。
linuxfan.info

ホームディレクトリ以下のディレクトリ群を英語化する

日本語Remixは最初から日本語環境になっていてすごく便利なんですが、 ホームディレクトリ以下のディレクトリ群が日本語になっています。 CUIからのファイル操作やパスの記述にはすごく不便なので英語化する必要があります。

$ LANG=C xdg-user-dirs-gtk-update
# うまく行かない場合は
# $ LC_ALL=C xdg-user-dirs-gtk-update

単純に英語化するだけでなく、カスタムしたい場合はこちらを参照すればいいと思います。
XDG ユーザーディレクトリ - ArchWiki

MacOS風にする

僕はノートPCはMacを使用しているので似せたくなりました。
以下の3つのサイトを参考にしました。
hermemo.com
sometrouble.hatenablog.com
www.virment.com
ただ、この中でmac風のフォントのインストールと、launchpadのパチもんのslingscoldは結局使いませんでした。
あまり使い物にならなかったので。笑
また、Dockに関してはGnome shellの拡張機能である「Dash to Dock」のほうがカスタマイズの自由度が高くいい感じになったので、plankも使いませんでいた。
カスタマイズがめんどくさいという人にはplankはおすすめです。

Gnome Shell Extensionsをインストールする

18.04からはデスクトップ環境がUnityからGnomeに変わりました。
そこで、拡張機能を用いてデスクトップを使いやすくします。 インストールなどはこちらのサイトを参考にしました。 linuxfan.info 上の記事には明確な記載がないのですが、$ sudo apt install gnome-tweaksGnome Tweaksのインストールをする必要があります。

次に以下に僕が導入した拡張機能の中で良かったものを挙げてみます。

Extensions

f:id:Nuts-kun:20200210113758p:plain
Extensions - GNOME Shell Extensions
トップバーから拡張機能のオン/オフを設定することができるようになります。

Coverflow Alt-Tab

f:id:Nuts-kun:20200210111442p:plain
Coverflow Alt-Tab - GNOME Shell Extensions
Alt+Tabで3D的にウインドウを移動することができるようになります。 ※僕はウインドウが無限ループに陥ることが数回あったので現在(公開時)は使っていません。

Dash to Dock

Dash to Dock - GNOME Shell Extensions
Dockを詳細に設定することができます。

Native Window Placement

f:id:Nuts-kun:20200210115921p:plain
Native Window Placement - GNOME Shell Extensions
ウインドウ一覧表示時に、それぞれのウインドウが重ならないようにしてくれます。

Night Light Slider

f:id:Nuts-kun:20200210145942p:plain
Night Light Slider - GNOME Shell Extensions
トップバーからスライダーを用いて画面の暖色度合いを調節できます。

OpenWeather

f:id:Nuts-kun:20200210120914p:plain
OpenWeather - GNOME Shell Extensions
トップバーから天気予報を確認することができます。

system-monitor

f:id:Nuts-kun:20200210121051p:plain
system-monitor - GNOME Shell Extensions
トップバーに各デバイスの使用状況や温度などを詳細に表示できます。
ただ、いくつかの数値表示がNaNになるバグが修正されていないので自分で修正する必要があります。
以下のissueを参考にしました。
github.com
僕の環境では、温度とファンの回転数の他にクロック周波数もNaNになっていたので合わせて修正しました。

$ vim ~/.local/share/gnome-shell/extensions/system-monitor@paradoxxx.zero.gmail.com/extension.js

- total_frequency += parseInt(ByteArray.toString(as_r[1]));
+ total_frequency += parseInt(as_r[1]);

- this.temperature = Math.round(parseInt(ByteArray.toString(as_r[1])) / 1000);
+ this.temperature = Math.round(parseInt(as_r[1]) / 1000);

- this.rpm = parseInt(ByteArray.toString(as_r[1]));
+ this.rpm = parseInt(as_r[1]);

メールの設定をする

何か不具合が出たときにメールでその情報を確認できるようメールの設定を行いました。

rootメールをユーザアドレスに転送する

例えば、root権限で実行される/etc/crontabは/var/mail/spool/rootに、ユーザ権限で実行される/var/spool/cron/crontab/[ユーザ名]は/var/mail/spool/[ユーザ名]にメールを送出します。
これらをまとめて管理できたほうが便利かなと思ったので、rootメールをユーザ名のメールに転送するようにしました。
sendmailは難しいという話を聞いたので、MTAとしてはPostfixを使用しました。
$ sudo apt install mailutils postfixでインストールできます。(mailutilsはmailコマンドを用いたテストに必要なのでインストールしました)
まずPostfix自体の設定を行います。
Postfixの設定ファイルは/etc/postfix/main.cfなのですが、最初は存在しないので$ sudo cp /etc/postfix/main.cf{.proto,}でコピーします。
このファイルに記述されているパラメータを僕は以下のように設定しました。
もしコメントアウトされている場合はアンコメントする必要があります。
またこれ以外は変更する必要はないと思うので、未設定の箇所はコメントアウトします。

  • home_mailbox :
    ホームディレクトリからのmboxもしくはMaildir形式のメールボックスファイル / ディレクトリの相対パスを指定します。
    僕はMaildir形式が良かったのでhome_mailbox = Mail/(/でディレクトリになる)としました。
    変更した場合は、ログインシェルの設定ファイルにexport MAIL=$HOME/[home_mailboxで指定した値] と追記します。
    これで/home/[ユーザ名]/Mail/にメールが届きます。
  • mydestination :
    ローカルで受信するドメインのリストを指定します。
    僕は$ hostnameで確認できるマシンのホスト名と、それにmydomainパラメータを連結した値をmydestination = [マシンのホスト名], [マシンのホスト名].$mydomainのように設定しました。
  • setgid_group :
    set-gid Postfixコマンドおよびグループ書き込み可能なPostfix ディレクトリを所有するグループです。
    変更したら$ sudo postfix set-permissionsを実行する必要があります。
    僕は/etc/groupsにpostdropがあったので、setgid_group = postdropとデフォルトのまま指定しました。
  • sendmail_path :
    sendmailコマンドの絶対パスを設定します。
    $ which sendmailで確認できます。
    これはPostfixメールキューにメールを投函するのに使用されます。
    僕はsendmail_path = /usr/sbin/sendmailとなりました。
  • mailq_path :
    mailqコマンドの絶対パスを設定します。
    $ which mailqで確認できます。
    これはPostfixメールキューをリストアップするのに使用されます。
    僕はmailq_path = /usr/bin/mailqとなりました。
  • newaliases_path :
    newaliasesコマンドの絶対パスを設定します。
    $ which newaliasesで確認できます。
    このコマンドはは/etc/aliasesからデータベースを構築するのに使用されます。
    僕はnewaliases = /usr/bin/newaliasesとなりました。

ちなみに、これらのパラメータやその他のパラメータの詳細はPostfix設定パラメータで確認できます。

以上でPostfix自体の設定は終わりですが、おそらくsetgid_groupのパラメータを設定したと思うので、忘れずに$ sudo postfix set-permissionsを実行します。

そして最後に$ sudo service postfix start(2回目移行はrestart)で起動します。
これでメールが使用できるようになったはずです。
以下のコマンドでメールが確認できれば完了です。

$ echo test | mail [ユーザ名]
$ mail

ちなみに失敗した場合は、mailが届かないもしくはメール配送デーモンから送信失敗のメールが届くので設定を見直す必要があります。

次にPostfixエイリアス機能の設定をします。
これを設定することであるユーザ宛のメールを他のユーザに転送することができます。
ここではroot宛のメールを自分のユーザアカウントのアドレスに転送するよう設定します。

まずエイリアスの設定ファイルである/etc/aliasesの最終行に以下のように追記します。

$ sudo vim /etc/aliases
root:        [ユーザ名] (←追記)

その後、$ sudo newaliasesでデータベースファイル(/etc/aliases.db)に反映します。
これでrootメールがユーザアドレスに転送されるようになったはずです。
以下のコマンドでrootメールをユーザのメール同様に見ることができれば終了です。

$ echo test | mail root
$ mail

定期的にGmailに転送する(未)

バイスの設定をする

ドライブの設定をする

HDDのマウントをする

どうやらubuntuインストール時の「インストールの種類」において設定できるようですが、 僕はやり忘れたのでインストール後にマウントしました。
partedコマンドを使ってパーティションを作成するにあたり、まずパーティションテーブルをGPTに設定します(後述のgpartedを用いる方法でもこの操作は必須です)。

# sudo parted [デバイス名]
$ sudo parted /dev/sdb
(parted) mklabel gpt

確認すると以下のようになります。

(parted) print                                                                
モデル: ATA WDC WD20EZAZ-00G (scsi)
ディスク /dev/sdb: 2000GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ: 

番号  開始  終了  サイズ  ファイルシステム  名前  フラグ

次にパーティションを切ります。僕はファイルシステムSSDと同じくext4にしました。
(使用できるファイルシステムの一覧は$ ls /sbin/mkfs.*で確認できます。)

(parted) mkpart primary ext4 0% 100%                                      
(parted) print                                                            
モデル: ATA WDC WD20EZAZ-00G (scsi)
ディスク /dev/sdb: 2000GB
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
ディスクフラグ: 

番号  開始    終了    サイズ  ファイルシステム  名前     フラグ
 1    1049kB  2000GB  2000GB  ext4              primary

ちなみにこれはGUIフロントエンドのgpartedでもできます(partedコマンドのほうが簡単だと思いますが...)。

# インストール
$ sudo apt install gparted
$ sudo gparted

kledgeb.blogspot.com

次に、このパーティションをフォーマットします。mkfsコマンドを使用します。

$ sudo mkfs.ext4 /dev/sdb1
mke2fs 1.44.1 (24-Mar-2018)
/dev/sdb1 contains a ntfs file system
Proceed anyway? (y,N) y
Discarding device blocks: done                            
Creating filesystem with 488378368 4k blocks and 122101760 inodes
Filesystem UUID: 055ff5f3-7abf-40b1-bcfa-2f1068d18d3c
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
    102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done    

これをマウントします。 マウントポイントを作成し、/etc/fstabに情報を追記することで起動時に自動マウントするように設定します。
僕はホームディレクトリ直下にマウントポイントとしてhobbyディレクトリを作成しました。 また、fstabの記述にはfstabについて - Qiitaを参考にしました。

$ mkdir hobby
$ vim /etc/fstab
(追記>) /dev/sdb1       /home/nuts/hobby        ext4    defaults        0       2

再起動するか$ sudo mount -aで手動マウントすることで確認できます。
ここで、fstabに追記した中で6つ目のフィールドを2に設定し起動時のfsckのチェックを有効とした一方、 デフォルトではそもそもfsck自体が起動時に実行されないようになっています。
これはファイルシステムext2ext3ext4にした場合はtune2fsコマンドを用いて以下のように確認できます。

$ sudo tune2fs -l /dev/sdb1
~~~中略~~~
Mount count:              1
Maximum mount count:      -1
Last checked:             Sun Feb  2 12:48:01 2020
Check interval:           0 (<none>)
~~~中略~~~

Maximum mount countが-1、Check intervalが0と設定されているのでこのままでは実行されません。
なので、(fsckが定期的に実行されて欲しい人は)設定してやる必要があります。
僕は迷子のファイルがあるかを定期的に確認したかったので、6ヶ月単位で実行されるようにしました。

$ sudo tune2fs -i 6m /dev/sdb1
Setting interval between checks to 15552000 seconds

確認すると変更されているのがわかります。

$ sudo tune2fs -l /dev/sdb1
~~~中略~~~
Last checked:             Sun Feb  2 12:48:01 2020
Check interval:           15552000 (6 months)
Next check after:         Fri Jul 31 12:48:01 2020
~~~中略~~~

同様の設定をSSDにも行いました。

SMART情報を取得する(未)

SSD、HDDともに僕はバックアップを取っていません。
そのため故障や寿命に早期に気づいてデータの移植・デバイスの交換を行うのが理想です。
そこで、smartctlを用いて定期的なSMART情報の監視を行います。
smartctlは$ sudo apt install smartmontoolsでインストールできます。

まず、デバイスが対応しているか一応確認します。

$ sudo smartctl --scan
/dev/sda -d scsi # /dev/sda, SCSI device
/dev/sdb -d scsi # /dev/sdb, SCSI device

確認できたので、次に定期的にSMART情報を監視するよう設定します。 もし問題が発生した場合はメールで通知するようにします。

まずデーモンと監視間隔の設定を行います。僕は監視間隔を1時間に設定しました。

$ sudo vim /etc/default/smartmontools
start_smartd=yes ←アンコメント
smartd_opts="--interval=3600" ←アンコメント(3600秒=1時間)

次に

SSDの延命対策をする

swap領域をHDDに設定する(未)

僕のPCのメモリは16GBでそんなに多くないです。 そのためもし頻繁にSSD領域にスワップしてしまうと、書き込み回数が増加しSSDの寿命を短くする一因となります。
そのためスワップ領域をSSDからHDDに変更しました。
ubuntu18.04はデフォルトでは、/swapfileにスワップ領域を確保しています(2GBしかないですが...)。 これは/etc/fstabを確認することでわかります。

$ less /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
UUID=3476c10d-76c3-4ca6-bde6-996b5a5b7a88   /   ext4    errors=remount-ro 0       1
UUID=1071-91BA  /boot/efi       vfat      umask=0077         0            1
/swapfile                       none     swap          sw                   0             0

また、スワップ領域の容量はfreeコマンドで確認できます。

$ free -h
              total        used        free      shared  buff/cache   available
Mem:            15G        3.2G        9.2G        123M        3.1G         11G
Swap:          2.0G          0B        2.0G

確認できたスワップファイルは今後使用しないので、

trimコマンドを有効にする(未)

正確には延命対策じゃない

キーボード周りの設定をする

半角/全角を切り替えるキーを設定する

USキーボードには半角/全角キーがありません。そのためIMEを有効化・無効化するキーを設定する必要があります。 僕はmacと同じように Ctrl + Spaceで設定しました。 magidropack.hatenablog.com

Caps LockとCtrlのキーバインドを入れ替える

Caps Lockはほとんど使わない一方、様々なショートカットで必要なCtrlにはかなりお世話になります。
しかしCaps Lockのほうが打ちやすい位置に配置されているので、その2つのキーバインドを入れ替えます。
Ubuntu/Caps-LockキーをCtrlキーにする方法 - Linuxと過ごす
Caps Lockはいらないという人はどちらもCtrlにすることが可能です。

セキュリティの設定をする

ファイアウォールを有効にする

初期設定では有効になっていないので自分で設定する必要があります。 ufwGUIフロントエンドであるgufwを使用します。
ファイアーウォールの設定をする - Ubuntu 18.04編

ウイルス対策をする

ubuntuLinuxなのでウイルスに感染しにくいと聞きますが、僕は怖いので設定します。
ClamAVGUIフロントエンドであるClamTKを使用します。
www.ninton.co.jp 僕の環境では最初、アンチウイルスシグネチャのアップデートができなかったのでインストールし直したら 正常にアップデートできました。
定期スキャンとシグネチャの定期アップデートが反映されているかは$ crontab -lもしくは$ sudo less /var/spool/cron/crontabs/[ユーザ名]で確認するといいと思います。

ただ、このままでは期待する通りに動いてくれないようです。
そのため僕はいくつかの点を修正しました。

1つ目に、ClamTKのインストールではclamavデーモンはインストールされないので、別にインストールする必要がありました。
ClamTKは定期スキャンとシグネチャの定期アップデートにはcronを用いるので、clamavデーモン自体には用がないのですが、このインストールで作成される/etc/clamav/clamd.confがないとfreshclamがエラーを吐いてしまいました。
そのため$ sudo apt install clamav-daemonでインストールしました。

2つ目に、定期スキャンとシグネチャの定期アップデートをするにはclamav-daemonclamav-freshclamの2つのデーモンを使用する、もしくはcronを使用する方法が考えられます。
ClamTKはこのうち後者を採用しています。
この方法は、cronがスキャンなどを実行後にその標準出力/標準エラー出力をメールで送ってくるので、ログを確認しやすく便利です。
そのためこの方法のみ採用したいのですが、初期設定では前者の方法も独立に実行されてしまうようです。
これは無駄なので、cronによる実行1本に絞りました。
まず、以下のコマンドでデーモンを止めます。

$ sudo service clamav-daemon stop
$ sudo service clamav-freshclam stop

次にclamscanとfreshclamの設定ファイルの以下のパラメータの変更をします。

$ sudo vim /etc/clamav/clamd.conf
DatabaseDirectory /home/[ユーザ名]/.clamtk/db
#LogFile /var/log/clamav/clamav.log    (←コメントアウト)

$ sudo vim /etc/clamav/freshclam.conf
UpdateLogFile /home/[ユーザ名]/.clamtk/db/freshclam.log
DatabaseDirectory /home/[ユーザ名]/.clamtk/db

その後、これに合わせてcrontabの設定を変更します。
それ以外の部分も結構変えました。

$ crontab -e
# もしくは
# $ sudo vim /var/spool/cron/crontabs/[ユーザ名]
0 12 * * * /usr/bin/freshclam
0 13 * * * /usr/bin/clamscan --exclude-dir=/home/[ユーザ名]/.clamtk/viruses --move=/home/[ユーザ名]/.clamtk/viruses -i -r /home --log="$HOME/.clamtk/history/$(date +\%b-\%d-\%Y).log"

これにより、以下のように設定されました。

  • 12時に~/.clamtk/db以下のシグネチャのファイルがアップデートされる
  • 13時に/home以下のディレクトリを再帰的にウイルス検査し、もしウイルスに感染しているファイルは~/.clamtk/viruses以下に隔離される

これで期待通りに動作するかは、テスト用のウイルスEICARをeicar.comという名前でホームディレクトリに設置し、cronの設定時刻を現在時刻の1分後にして実際に確認すればいいと思います。
ちなみにEICARのテスト文字列はwikipediaからコピペできます。

最後ですが、3つ目にClamTKのGUI上からディレクトリ/ファイルをスキャンしても、ウイルスは検知できるが隔離や削除ができないという問題があるようです。
そのため、以下のサイトのようにしてロケールの設定を変更しました。

freefielder.jp

遠隔操作の設定をする

外出先からいじれるようにしたいので、遠隔操作の設定を行いました。

sshの設定をする

以下のサイトに詳しく載っているので、則れば大丈夫です。
qiita.com

ただ、僕は鍵をED25519で生成しました。
生成可能な鍵の種類はこちらのサイトに詳しく載っています。
qiita.com
各引数に関しては、manを使用するか、https://euske.github.io/openssh-jman/ssh-keygen.htmlを見れば詳しくわかるかと思います。

VPNの設定をする

僕はマンションタイプのWi-Fiを使用しているので、グローバルIPを使用できません。
そのためこのままでは、sshにしろ、RDP/VNCにしろ自宅のデスクトップに外部のネットワークからアクセスできません。
そこで色々悩んだ結果、VPSを用いてVPNを利用することにしました。

VPSとしては、ConohaのVPSを使用することにしました。
僕は、一番安いプランなのでスペックはかなり貧弱(CPU1コア、メモリ512MB、SSD30GB)なのですが、620円/月でグローバルIPアドレスを使用できるのはなかなかコスパがいいと思います。

VPSの契約が完了し、仮想コンソールを立ち上げたらまず基本設定を行います。
初期設定は以下を参考にしました。
note.com

ssh接続時に日本語が文字化けしていたので、ロケールの修正をしました。

$ sudo apt install language-pack-ja
$ echo 'export LANG=ja_JP.UTF-8' >> .bashrc
$ source .bashrc

また、このままでは日本語入力もできなかったので修正しました。
linux:userland:ubuntu_uimfep [HYPERでんち]

あとはsshvimの設定ファイルなどを自分の好きにいじれば基本設定は終わりです。

では、次にVPNの設定を行います。
私はOpenVPNを用いてVPNサーバを設定しました。
こちらの記事に沿ってやっていけばサーバ側の設定は十分です。
qiita.com

次に、クライアント側の設定をする必要があります。
まず、Ubuntuをインストールしたデスクトップはこちらの記事を参考にしました。
qiita.com

また、ノートPCのMacbook proには2つ上のリンクの中で書いてある方法でうまく設定できました。

最後に、iPadとiphone6sには以下のOpenVPN JPの公式ページに記載されている方法で設定できました。
ただ、ちょっと古めの情報なので適宜保管してください。
iPhoneやiPad (iOS) でOpenVPNを使ってみよう! | OpenVPN.JP

最後に、こちらのサイトにアクセスして、グローバルIPアドレスVPSサーバーのそれになっていたら設定が完了です。

リモートデスクトップの設定をする

MacないしはiPadからデスクトップを操作したいと考えているのでリモートデスクトップの設定をしました。

Chrome Remote Desktopの設定をする

一番簡単に使用できるリモートデスクトップChrome Remote Desktopだろうということで設定しました。
設定自体はすごく簡単で、ホスト側とリモート側にそれぞれChrome拡張機能をインストールするだけです。
ただこのままでは、iPadから接続時に新しいデスクトップのセッションが始まってしまいうまくいきませんでした。
そこで下記サイトを参考にしてプログラムを書き換えることでリモート操作できるようになりました。。 xvideos.hatenablog.com

Texの環境を作る

研究をしていると資料の提出はWordではなくTexがメインです。
ラップトップだけでなくデスクトップでも資料作成ができるように環境を構築しました。

僕はTeX Wikiを参考にしてミラーサイトからダウンロードしてきてインストールしました。
ちなみに、ここにはアップデートの方法なども記載されています。
https://texwiki.texjp.org/?Linux#texliveinstall
結構時間がかかりますが、インストールし終わったら一応テストしました。
LaTeX入門/レポート - TeX Wiki
上のリンクにあるサンプルをtest.texとして保存して、以下のコマンドを叩いてpdfが閲覧できたらOKです。

$ platex test.tex
$ dvipdfmx test.dvi
$ evince test.pdf

エディタの設定/インストールをする

Vimの設定をする

やはりエディタといったらVimですよね(偏見)。
TUIとして簡単に使える上に拡張もかなり自由にできるので重宝しています。
Vimよくわからない」という人はこれを読むといいと思います。
neko-mac.blogspot.com 以下に設定について書いていきますが、僕はVimを使い始めて数カ月の若輩です。
世の中にはすごい人たちが書いたVimの説明記事がたくさんあるので、詳しく知りたかったら自分で調べるのをおすすめします。

では、vimrcの設定です。
僕は自分が今までに設定したものがあったので、それを使いました。
もし今まで設定したことがない人はこちらなどを参考にすればいいと思います。
qiita.com
クリップボードとの連携に関しては以下のサイトを参考にしました。
ちなみに、僕はvim-gnomeを入れ直しました。
Vimでクリップボードからのペーストを可能にする – MY ROBOTICS

以上で基本的なことは設定できますが、他にカラースキームやプラグインを設定します。

まず、カラースキームとしては僕はmolokaiを使っています。
qiita.com

次に、プラグインに関してですが、まずプラグインマネージャとしてはvim-plugを使っています。
他にも種類はたくさんあるようなのでどれを使っても正直問題はないと思うのですが、vim-plugはvimrcへの記述量が少ないのでその点ではおすすめできるかと思います。
qiita.com
では入れるプラグインはどうするのかという話なのですが、これは完全に個人の好みの部分が大きすぎるので自分で調べるのが一番かと思います。
ただ、一応僕のvimrcもおいておきます。
基本設定も含めて参考にしていただけたらなと思います。

Kiteのインストールをする

これはエディタではなく、PythonのコードをAIで強力に補完してくれるツールです。
Pythyonでプログラムを書く人には必須だと思います。
対応エディタはVim、NeoVim、Atom、PyCharmなど結構たくさんある上に、それぞれのエディタでプラグインを入れる必要もないので導入がすごく楽です。
以下のサイトを参考にしました。 qiita.com

アプリケーション/ソフトウェアをインストールする

Adobe Flush Playerをインストールする

sicklylife.hatenablog.com

Google chromeをインストールする

linuxfan.info

w3mをインストールする

ターミナルから起動/操作できるCUIブラウザです。
ちょこっと調べるときに便利です。
インストールは以下のコマンドでできます。

$ sudo apt install w3m

ただ、このままでは画像を表示できないのでw3m-imgもインストールしたんですが、GNOME端末では動作しませんでした。

また、基本的に実行時は$ w3m [url]なのですが、僕はw3m: テキストブラウザ — 苦労する遊び人の玩具箱 1 ドキュメントを参考にして、以下のコードを.bashrcに追記することで$ www hogehogegoogleの検索結果を表示するようにしました。

function www() {
    local str opt
    if [ $# != 0 ]; then
        for i in $*; do
            str="$str+$i"
        done
        str=`echo $str | sed 's/^\+//'`
        opt='search?num=50&hl=ja&lr=lang_ja'
        opt="${opt}&q=${str}"
    fi
    w3m http://www.google.co.jp/$opt
}

これで以下のようになります。

$ www w3m

f:id:Nuts-kun:20200212164715p:plain

LINEをインストールする

以下のサイトを参考にしてDockからアプリケーションのように扱えるようにしました。
qiita.com

Slackをインストールする

ソフトウェアセンターからインストールしたら日本語が入力できなくなってしまいました。
そこで以下のサイトを参考にしたら日本語入力ができるようになりました。
qiita.com

スクリーンレコーダをインストールする

画面収録が行えるようになります。
僕は結構便利かなと思います笑 freepc.jp

細かい設定をする

トップバーの時計の ∶ の幅を狭くする

Ubuntu 18.04 LTSをインストールした直後に行う設定 & インストールするソフト

最後に

ご指摘やアドバイス等がありましたらご連絡いただけると嬉しいです。