20191004のLinuxに関する記事は6件です。

【Linux】シェルスクリプトについて学んだことを書く

はじめに

シェルスクリプトについて、学んだことを備忘録としてまとめる。

shにするかbashにするか

  • shの特徴
    • 長い歴史を持つ反面,現在では設計が古い
    • 過去のシェルスクリプトの多くがsh向けに書かれている
    • Debian系ディストリビューションではshをdashとシェルで実装
    • Red Hat系ディストリビューションはshをbashの別名として実装(shとbashに実体はRed Hat系では同じ)
  • bashの特徴
    • shよりもシェルスクリプトを書く上で便利な機能が用意されている
    • 現代のLinuxでは,bashはほぼデフォルトでインストールされている

shよりもbashを検討したほうがいい

理由

  • シェルスクリプトの互換性・移植性が高い

→shはすべてのLinuxに存在するが,OSによって実装の差異がある

  • 便利な機能が用意されている

→算術計算する際,shでは外部コマンドexprを使用する必要があるが,bashで外部コマンドなしに計算可能(シェル内部の機能なため,動作も高速)

シェルスクリプトの実行形

ファイルの先頭に#!で始まる行を追加する必要があるが,これはshebang(シバン,シェバン)と呼ばれるもの.
Linuxカーネルが#!を確認すると,その後ろのコマンドを実行する.
#!/bin/bashは「このシェルスクリプトは/bin/bashで動かす」という意味.
シバンを書くことにより,/bin/bashをコマンドラインに書かなくても,ファイル名を指定することにより,シェルスクリプトを実行できる

alias_set.sh
#!/bin/bash
alias lsalf='ls -alf'

$ lsalf #エイリアス未設定
lsalf: コマンドが見つかりません

$ source ./alias_set.sh #sourceコマンドでエイリアス設定
$ lsalf
arg.sh         if-bin.sh  getdate.sh    homesize.sh  tes1.sh  .
parameters.sh  rootls.sh  alias_set.sh  2019-10-02   ..

$ lsalfsh #エイリアスは未設定
lsalfsh: コマンドが見つかりません
$ cat alias_set.sh  #lsalfの名前をlsalfshに変更後,catで内容表示
#!/bin/bash
alias lsalfsh='ls -lf' #lsalfshに変更

$ ./alias_set.sh #シェルスクリプトを実行
$ lsalfsh        #シェルスクリプト終了後もエイリアスは未設定
lsalfsh: コマンドが見つかりません

これはなぜ起こるのか.
まずsourceコマンドでは,カレントシェルでシェルスクリプトが実行されるため,現在の環境が引き継がれる.
それに対し,ファイル名で実行した場合には,サブシェルでシェルスクリプトが実行されるため,元のシェルとは別物であり,エイリアスの設定は引き継がれない.(環境変数は引き継がれる)
サブシェルとは,現在のシェルから新しく起動される子プロセスのシェルのこと.

$ ./rootls.sh 
root directory
合計 483908
drwxr-xr-x   2 root root      4096  9月 30 11:54 bin
drwxr-xr-x   3 root root      4096  9月 30 11:56 boot
drwxrwxr-x   2 root root      4096  9月 30 00:24 cdrom
drwxr-xr-x  18 root root      4020  9月 30 21:54 dev
略

変数名の参照

変数の値を参照するには,変数名の前に$を付ける
変数の書き方の注意

  • 代入時には$を付けない
  • =の前後にはスペースを入れない
  • 変数名に利用できる文字はアルファベットと数値とアンスコのみ
  • {}を使用して変数名の区切りを明示する
    • ex) 変数名(filename)+任意の文字列(str)を連結して標準出力する場合
      • ダメな例⇒echo filename_str
      • 正しい例⇒echo {filename}_str

クウォーティング

クウォーティングで囲まれた文字列は一つの単語として認識される
''""の違いについて
変数展開が有効かどうか
シングルクォート:$による変数の展開が行われない
ダブルクォート:$による変数の展開が行われる

コマンド置換

getdate.sh
#!/bin/bash

filename=$(date '+%Y-%m-%d')
touch "$filename"
$ ./getdate.sh
$ ls -l
合計 16
-rw-r--r-- 1 gyokoyama gyokoyama  0 10月  2 08:00 2019-10-02
-rwxr-xr-x 1 gyokoyama gyokoyama 60 10月  2 07:59 getdate.sh
-rwxr-xr-x 1 gyokoyama gyokoyama 32 10月  1 08:03 homesize.sh
-rwxr-xr-x 1 gyokoyama gyokoyama 50 10月  1 09:01 rootls.sh
-rwxr-xr-x 1 gyokoyama gyokoyama 20 10月  1 08:15 tes1.sh

2019-10-02というファイル名が追加されている.

位置パラメータ

parameters.sh
#!/bin/bash

echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$4 = $4"
echo "\$5 = $5"
$ ./parameters.sh aaa bb ccccc
$0 = ./parameters.sh
$1 = aaa
$2 = bb
$3 = ccccc
$4 = 
$5 = 

ワイルドカードの使用

*:任意の文字列の代わりになる.文字列の長さは0でもよい.
?:任意の1文字の代わりになる.
[]:かぎ括弧の中に記述した任意の1文字の代わりになる。連続する文字コードの指定には - 記号が使える。たとえば, [a-c] は [abc] と同じ意味.

$ ls
2019-10-02  getdate.sh  homesize.sh  parameters.sh  rootls.sh  tes1.sh
$ ./parameters.sh *
$0 = ./parameters.sh
$1 = 2019-10-02
$2 = getdate.sh
$3 = homesize.sh
$4 = parameters.sh
$5 = rootls.sh

引数の個数

コマンドライン引数に指定された引数の個数は$#という変数で参照できる.
最後の行にecho "\$# = $#"を追記.

paraters.sh
#!/bin/bash

echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$3 = $3"
echo "\$4 = $4"
echo "\$5 = $5"
echo "\$# = $#"
$ ./parameters.sh *
$0 = ./parameters.sh
$1 = 2019-10-02
$2 = getdate.sh
$3 = homesize.sh
$4 = parameters.sh
$5 = rootls.sh
$# = 6
$./parameters.sh aaa bb c
$0 = ./parameters.sh
$1 = aaa
$2 = bb
$3 = c
$4 = 
$5 = 
$# = 3

引数全体の参照

$@$*を使用して,引数を分割せず全て一括りのようにして参照する.

arg.sh
#!/bin/bash

echo "\$@ = $@"
echo "\$* = $*"
$ ./arg.sh aa bbbb cc
$@ = aa bbbb cc
$* = aa bbbb cc
  • $@$*の違い
    • $@は位置パラメータがそれぞれ1つずつの文字列として展開される(上記の例では,'aa' 'bbbb' 'cc'として展開)
    • $*は引数全体が1つの文字列として展開されている(上記の例では,'aa bbbb cc'として展開)

if文の制御構造

if-bin.sh
#!/bin/bash

if [ "$1" = "bin" ]; then
    echo "ok"
else
    echo "NG"
fi
$ ./if-bin.sh bin
ok
$ ./if-bin.sh bash
NG

記述の注意点

  • if [ "$1" = "bin" ] then
    ⇒条件を書いた後に;を省略するとエラー(thenを改行すればセミコロン不要)

  • if ["$1" = "bin"]
    []の前後に半角スペースがないとエラー

if文の仕組み

シェルスクリプトでは,if文の後ろに置くのは「コマンド」であって,条件式ではない.
[は単なる括弧ではなく,bashの組み込みコマンド.
[コマンドは引数に書かれた条件式を判定し,その条件が正しければ0,そうでなければ0以外を返すコマンド.if文では0か0以外かどうかで真偽を判定
if直後の文は終了ステータスの値で真偽を判定するため,[コマンド以外でも可能.評価演算子等を組み合わせて活用する.

終了ステータス

終了ステータスとはどういうものか.
lsやgrepコマンドなどは,終了時にある整数値を返す.その整数値のことを終了ステータスという.コマンドが正常に終了した場合は0,エラー時は0以外を返す.
exit status = 0exit status = 1とかの整数値が終了ステータスにあたる.

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux基礎(ShellScript)

シェルについて勉強したい場合はこちら

シェルスクリプトとは

スクリプト(特定の処理を行うために作成したプログラム)をシェルプログラムで記述したもの。このシェルスクリプトを使用することで一連のコマンドライン作業を自動化することもできる。シェルスクリプトを記述するためには1行目に実行するシェルを宣言する。

#!/bin/bash

実行コマンド(4種類)

# sourceコマンド
$ source testing.sh

# bashコマンド
$ bash testing.sh

# コマンドは省略してスクリプトファイルの前に「 . 」と入力してスクリプトを実行することも可能
$ . testing.sh

# シェルスクリプトファイルに実行権を与えた場合は、ファイル名を入力するだけで実行可能
$ ./testing.sh

シェルスクリプトの特殊変数理解

変数名 説明
$0 シェルスクリプトファイル名
$1 1番目の引数 ※2番目の引数の場合は$2とする
$$ 現在のシェルのプロセス番号
$# コマンドラインに与えられた引数の数
$? シェルが最後に実行したコマンドの終了ステータス(0=正常終了, 1=異常終了, それ以外はエラー)
$@ 全ての引数(区切りはスペース)
$* 全ての引数(区切りは環境変数IFSで指定したもの))

ユーザ入力

readコマンド

readコマンドはユーザからの入力値を受け取り、変数に格納してそれを次の処理で使用したい場合に使用するコマンド。

#!/bin/bash
echo -n "名前を入力してください。"
read yourname
echo "${yourname}さん。入力ありがとう。"

条件分岐処理

条件分岐が行われる条件式の真偽を判断して結果を返す。

条件式理解

  • ファイル/ディレクトリに関する条件式
条件式 実行結果
-d ディレクトリ名 指定したディレクトリがあれば真
-f ファイル名 指定したファイルが通常ファイルであり、存在すれば真
-s ファイル 指定したファイルのサイズが0より大きいファイルであれば真
-L ファイル 指定したファイルがシンボリックリンクであるファイルであれば真
-r ファイル 指定したファイルが存在して、かつ読み込み可能であれば真
-w ファイル 指定したファイルが存在して、かつ書き込み可能であれば真
-x ファイル 指定したファイルが存在して、かつ実行可能であれば真
-e ファイル 指定したファイルがあれば真
ファイル1 -nt ファイル2 指定したファイル1が、指定したファイル2よりも修正時刻が新しければ真
ファイル1 -ot ファイル2 指定したファイル1が、指定したファイル2よりも修正時刻が古ければ真
  • 文字列に関する条件式
条件式 実行結果
-n 文字列 文字列の長さが0より大きければ真
-z 文字列 文字列の長さが0であれば真
文字列1 = 文字列2 文字列1と文字列2が等しければ真
文字列1 != 文字列2 文字列1と文字列2が等しくなければ真
  • 数値に関する条件式
条件式 実行結果
数値1 -eq 数値2 数値1と数値2が等しければ真
数値1 -ne 数値2 数値1と数値2が等しくなければ真
数値1 -ge 数値2 数値1が数値2以上であれば真
数値1 -gt 数値2 数値1が数値2より大きければ真
数値1 -le 数値2 数値1が数値2以下であれば真
数値1 -lt 数値2 数値1が数値2より小さければ真
  • 論理結合に関する条件式
条件式 実行結果
!条件 条件式が偽であれば真
条件1 -a 条件2 条件1と条件2の両方の条件式が真であれば真
条件1 -o 条件2 条件1と条件2のどちらかの条件式が真であれば真

if分岐

コードサンプル

#!/bin/bash
read number

if [ $number -gt 10 ]
then
  echo "10より大きい"
elif [ $number -eq 10 ]
then
  echo "10と等しい"
else
  echo "10より小さい"
fi

繰り返し処理

for文

繰り返しの処理を実行するためには for 文を使用。指定したリストに沿って処理を繰り返す。

コードサンプル

#!/bin/bash
Levels=("Level1" "Level2" "Level3")
echo ${Levels[@]}
for VAR in ${Levels[@]}
do
  echo LinuC $VAR
done
#!/bin/bash
for NUM in `seq 1 10`
do
  echo LinuC ${NUM}
done

while文

条件文が真である間は、繰り返しの処理を実行するためには while 文を使用。

#!/bin/bash
while read LINE
do
  echo "LinuC Level ${LINE}"
done < test.txt
#リダイレクション < でテキストファイル test.txt からの入力に切り替えています。done < test.txt
#により、test.txtファイルの内容を読み込む処理を実行。そのファイル内容はLINE変数に1行
#ごとに読み込まれて格納される。readコマンドで読み込まれるLINE変数が空になるまで「真」と判断
#されて、最終行まで読み込んだ後は「偽」と判断されたwhile文が完了する。

繰り返し処理で活用するコマンド

seqコマンド

シェルスクリプトで、数値を1つずつ増加または減少させる処理を行うために利用するコマンド

# seq 開始数値 終了数値
$ seq 1 5
1
2
3
4
5

# seq 終了数値
$ seq 5
1
2
3
4
5
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux基礎(Shellについて)

シェルとは

コマンドを解釈して実行するプログラムのこと。Linuxシステムの作業は端末で行うがLinuxシステムへのログイン時に端末ごとに入力するコマンドを解釈し、実行するプログラム(シェル)が動作し始める。シェルはいくつかの種類があり、ユーザは好みに応じて実行するシェルを選択できる。
Linuxで利用できるシェルには以下のような種類がある。一般的にはBashが利用される。

シェル プログラム名称 説明
Bシェル sh UNIX V67(1978年リリース)から標準添付されているUNIXの基本的なシェル
Cシェル csh C言語スタイルの構文を持ったUNIX系OSの代表的なシェル
TCシェル tcsh Cシェルの派生版の中で特にユーザーインターフェイス部分を中心に拡張されたシェル
Kシェル ksh Bシェルと上位互換を保ちながら、Cシェルなどから優れた機能を取り込んだシェル
Bash bash UNIX系のシェルの一つであり、Linuxで用いられている標準のシェル

システムへのログイン直後に起動するシェルは、ログインシェルと呼ばれていて、これはユーザごとに定義できる。ユーザごとのログインシェルは、/etc/passwdファイルに記述されている。以下では、adminというユーザのログインシェルが「bash」であることがわかる。

# ログインシェルの確認
$ more /etc/passwd
admin:x:500:500:CentOS-6.4-i386:/home/admin:/bin/bash

# 現在ログインしている自身が使用しているシェルは ps $$ コマンドで確認すること
$ ps $$
 PID   TTY   STAT  TIME  COMMAND
 17264 pts/1 S     0:00  -bash

作業終了を通知しシェルを終了するためにはlogoutコマンドを入力。exitコマンドでもシェルは終了。

コマンドの入力方法

入力キー 説明
Tabキー コマンドやディレクトリ名などをの文字列を補完する
Ctrl + A 行の先頭へカーソルを移動する
Ctrl + C 実行処理を中断する
Ctrl + D カーソル上にある文字列を1文字削除する
Ctrl + E 行の最後へカーソルを移動する
Ctrl + H カーソルの左側の文字列を1文字削除する
Ctrl + L 画面をクリアして、現在の行だけ再表示する
Ctrl + Q 画面への出力を再開する
Ctrl + S 画面への出力を停止する
Ctrl + Z 実行処理を一時停止する

シェルがbashである場合、以下の特殊記号(メタキャラクタ)を使用してディレクトリの移動が可能。

メタキャラクタ 説明
. カレントディレクトリを表す
.. 一つ前のディレクトリを表す
~ ホームディレクトリを表す

メタキャラクタとは

複数のファイルを簡単に指定する際に使用する特殊な記号のこと。メタキャラクタにより個別にファイルを指定することなく複数のファイルを指定できる。メタキャラクタには次の記号がある。

メタキャラクタ 説明
* 任意の0文字以上の文字列
例|111.txt、abc.txtのファイルは「*.txt」と表せれる
? 任意の1文字の文字列
例|1.txt、a.txtのファイルは「?.txt」と表せれる
[ ] []の任意の1文字の文字列
例|aa.txt、ab.txt、abc.txtのファイルは「[abc].txt」と表せれる
{ } カンマで区切られた文字列
例|data1、data2は「data{1,2}」と表せれる
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CentOS6 系で squid が利用できる file descriptor の数を増やす方法

CentOS 6 系の場合です。

  1. 利用可能な file descriptor 数の現在値の確認します。

1-1. システム全体

ulimit -a で open files を確認します。

...(snip)...
open files (-n) 1024
...(snip)...

1-2. squid

squid が現在利用可能な file descriptor の数を確認します。

$ squidclient mgr:info | grep 'file descri'
Maximum number of file descriptors:1024
Available number of file descriptors:1016
Reserved number of file descriptors: 100

以下の方法でも確認できます。

$ less /var/log/squid/cache.log
...(snip)...
With 1024 file descriptors available
...(snip)...

上記から分かったことなんですが、
デフォルトで squid は、1024 の file descriptor を利用できるようです。

では、この数を増やしてみましょう。
一例として、65535 にしてみます。

  1. squid が利用できる file descriptor の数を増やします。

2-1. /etc/security/limits.conf に以下を追記します。

* - nofile 65535

これは、すべてのユーザーの、file descriptor の soft, hard 設定を 65535 にする、です。

ログアウトします。
ulimit -a で open files を確認します。

...(snip)...
open files (-n) 65535
...(snip)...

ここで、/etc/squid/squid.conf に以下を追加しましょう。

max_filedesc 65535

service squid restar

再度、squid が現在利用可能な file descriptor の数を確認します。

$ squidclient mgr:info | grep 'file descri'
Maximum number of file descriptors:65535
Available number of file descriptors:65527
Reserved number of file descriptors: 100

以下の方法でも確認できますよ。

$ less /var/log/squid/cache.log
...(snip)...
With 65535 file descriptors available
...(snip)...

それとも、/proc//limits でも確認できます。

利用できる file descriptor の数が増えた。

ここで、疑問なんですけど。。
以下のコマンドを実行して数を確認すると、こんなん出てきます。

$ cat /proc/sys/fs/file-max
386196

実際は、上記の file-max の値は越えられない、ってことですかね。
65535 なら、十分範囲内ですから、まあいいか。。

お腹すいたァ。。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Raspberry Pi Desktop (Buster) を USB フラッシュドライブから起動して使う

はじめに

Raspberry Pi Desktop という Debian をベースにした Linux ディストリビューションがありまして、これはラズベリーパイ財団からリリースされています。
image.png

PC および Mac で動作し、Live-DVD を作成したり、仮想マシンで実行したり、HDD へインストールする事も可能です。

この記事は Raspberry Pi DesktopUSB フラッシュドライブ (USB メモリ) にインストールしようというもので、過去に Stretch をインストールした記事の焼き直しです。

セットアップ

必要なもの

作業は Windows 10 上で行うものとします。インストールには 16GB 程の USB フラッシュドライブが必要です。Live-DVD で動作するくらいなので 8GB でも動くとは思いますが、アップデート等を行うとすぐに容量不足になってしまうと思います。

image.png

Stretch をインストールした時のものをフォーマットして使います。

image.png

ISO イメージのダウンロード

トレントが使えるのならトレントを使った方が早く DL できます。uTorrent Portable とかで DL するのをオススメします。

記事を書いた時点の最新版 ISO のファイル名は 2019-09-25-rpd-x86-buster.iso (Debian Buster) でした。

起動可能な USB フラッシュドライブを作成

Rufus を使ったやり方

image.png

  1. 書き込み先の USB フラッシュドライブ を選択
  2. Raspberry Pi Desktop の ISO イメージを選択
  3. [保存領域のサイズ] のスライダーを目一杯右へ。
  4. [スタート] で書き込む

途中で以下のようなダイアログが出たら [はい] を押して進みます。
image.png
フォーマット確認画面も出ます。
image.png
※ 永続ストレージ (保存領域) の確保のトコだけは注意が必要です。

Etcher を使ったやり方

image.png

  1. Raspberry Pi Desktop の ISO イメージを選択
  2. 書き込み先の USB フラッシュドライブ を選択
  3. [Flash!] で書き込む

※ 当方の環境だと Portable 版は DL も起動もやたら時間が掛かりました。実行中なのかわからないくらい待たされたので、タスクマネージャで確認しながらやりました。

その他の方法

その他の方法でイメージを書き込むと永続ストレージが正しく使えず、手動でパーティションを作成/調整する必要が出てくるかもしれません。

起動

UEFI / BIOS で USB フラッシュドライブから起動するように設定しておきます。USB フラッシュドライブを PC や Mac に挿して電源を入れると起動メニューが表示されます。

image.png
image.png

  • Run with persistence: [実行] 永続ストレージを保存に使う
  • Run and reset persistence: [実行] 永続ストレージを初期化して保存に使う
  • Run without persistence: [実行] 永続ストレージを使わない
  • Graphical install: [インストール] グラフィカル
  • Install: [インストール] テキストベース
  • Install with speech synthesis: [インストール] テキストベース + 音声読み上げ
  • Help: [ヘルプ]

〔Enter〕 キーを押すか、そのまま 10 秒待ちましょう。
image.png
初回起動時はちょっと時間が掛かります。
image.png
Raspberry Pi Desktop が起動しました。

設定

Raspberry Pi Desktop の各種設定はアプリケーションメニュー (ラズベリーアイコン) から [Preferences | Raspberry Pi Configuration]([設定 | Raspberry Pi の設定]) で行いますが、初回起動時にも設定画面が出てきます。
image.png

image.png

  • Country: Japan
  • Language: Japanese
  • Timezone: Tokyo

パスワード設定

image.png
初期パスワードである raspberry でいいのなら空欄のまま [Next] を押します。

無線 LAN 設定 (無線 LAN アダプタが有効の場合)

無線 LAN アダプタが有効の場合には追加の設定画面が出てきます。

Wi-Fi ネットワークの選択

接続する Wi-Fi ネットワークを選択します。
image.png
この手順をスキップするなら [Skip] を、設定を続けるなら [Next] を押します。

Wi-Fi パスワードの入力

Wi-Fi ネットワークへのパスワードを入力します。
image.png
この手順をスキップするなら [Skip] を、設定を続けるなら [Next] を押します。

ソフトウエアアップデート

image.png
この手順をスキップするなら [Skip] を、アップデートを行うなら [Next] を押します。

完了

image.png
設定を反映するために [Restart] を押して再起動する必要があります。

再起動すると...ちゃんと日本語化できました。Live-DVD からの起動とは異なり、ちゃんと設定は (永続ストレージに) 保存されます。
image.png

再起動しても日本語化できない場合には永続ストレージが正しく作られていないと思われます。何度やっても設定の保存に失敗する場合は USB フラッシュドライブを初期化してからやり直してみてください。

システムのアップデート

apt-get updateapt のパッケージリストを更新しておきます。

$ sudo apt-get update

日本語フォントのインストール

とりあえず noto-cjk / IPA / IPA EX / takao が入っていればいいかと思います。

$ sudo apt-get install fonts-noto-cjk fonts-noto-cjk-extra fonts-ipafont fonts-ipaexfont fonts-takao 

UI のフォント変更

デスクトップの何もない所を右クリックし [デスクトップの設定] を選択 (またはアプリケーションメニューから [設定 | Appearance Settings] )。

[System] タブの [Font] を Noto Sans CJK に変更 (フォントの種類は任意です)。

image.png

無線 LAN の国設定 (初回起動時に無線 LAN の設定を行っていない場合)

アプリケーションメニュー (ラズベリーアイコン) から [Preferences | Raspberry Pi Configuration]([設定 | Raspberry Pi の設定])を開き、[ローカライゼーション] タブの [無線 LAN の国設定] を設定します。

image.png

  • Country: JP Japan

raspi-config からも設定できます。

$ sudo raspi-config

image.png

Chromium (ブラウザ) の日本語化

Chromium を日本語化するには言語パックをインストールします。

$ sudo apt-get install chromium-l10n

image.png
検索エンジンが DuckDuckGo になっているので、Google にしておくといいでしょう。
image.png

※ 事前に takao フォントがインストールされていないと永続ストレージが壊れるかもしれません。

LibreOffice (Office スイート) の日本語化

LibreOffice を日本語化するには言語パックをインストールします。

$ sudo apt-get install libreoffice-help-ja

image.png

Scratch 2 (プログラミング言語) の日本語化

Scratch 2 を日本語化するには、右上の地球アイコンをクリックし [日本語] または [にほんご] を選びます。
image.png

IM (入力メソッド)

IM フレームワーク Fcitx と Google 日本語入力のオープンソース版である Mozc を導入します。

$ sudo apt-get install fcitx-mozc
$ sudo reboot

念のために再起動しておきます。再起動後は〔半角/全角〕または〔Ctrl〕+〔SPACE〕で IM をオンオフできるようになります。

ハードウェアクロックをローカルタイムに変更

運用的には Windows と Linux のデュアルブートという事になりますが、Raspberry Pi Desktop を終了して Windows を起動すると時刻が 9 時間ズレると思います。これを回避するには、ハードウェアクロックをローカルタイムとして設定します。

$ sudo hwclock --systohc --localtime

Windows 側の設定を変更する方法もあるのですが、Raspberry Pi Desktop が間借りしている状況なので Raspberry Pi Desktop 側で設定変更すべきだと思います。

リモートデスクトップ

Stretch には VNC がありましたが、Buster にはないようなので RDP サーバである xrdp をインストールします。

$ sudo apt-get install xrdp

Windows 10 から RDP 接続するとこのようなログイン画面が表示されますので、username / password を入力します。
image.png
ログイン後は普通のデスクトップです。
image.png

SSH

アプリケーションメニュー (ラズベリーアイコン) から [Preferences | Raspberry Pi Configuration]([設定 | Raspberry Pi の設定])を開き、[インターフェイス] タブで SSH を有効化できます。
image.png
raspi-config からも設定できます。

$ sudo raspi-config

image.png
ただこのまま PuTTY 等で接続しようとすると、

---------------------------
PuTTY Fatal Error
---------------------------
Disconnected: No supported authentication methods available (server sent: publickey)
---------------------------
OK
---------------------------

このようなエラーが出ます。これを回避するには /etc/ssh/sshd_config をいじります。

$ sudo nano /etc/ssh/sshd_config

PasswordAuthenticationyes に変更します。

PasswordAuthentication yes

書き換えたら sshd を再起動します。

$ sudo systemctl restart ssh

初期パスワードのままだと、Raspbian 起動時に警告が出るようになります。
image.png
ちょっとウザいです。

See also:

おわりに

日本語化の設定も Stretch に比べて簡単になっているようですね。

See also:

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UbuntuでUnable to locate packageのエラー解決法

ことの発端

dockerのUbuntuコンテナにvim等をインストールしようとしたら、
E: Unable to locate package
と出てきてエラーになったので、解決方法を書きます。

作業環境

MacOS dockerコンテナ利用
Ubuntu VERSION 18.04.2
vimさえ入っていない

解決方法

aptをアップデートする。以上で解決しました。

# apt update

そして、vimをインストールする

# apt install vim

以上で、E: Unable to locate package のエラーが出ないでVimをインストール出来ました。

あとがき

Unable to locate package で検索したら、いくつか同じ解決方法が出てきますね。あと、apt-getは古いらしいので、aptを利用しました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む