Ubuntu 22.04をNative環境にインストール

Ubuntu 22.04をNative環境にインストールしたときのメモ

Ubuntuのダウンロード

Ubuntuの入手からダウンロード
Secure Boot環境で日本語RemixのISOファイルを使うとVerification failed: (0x1A) Security Violation と怒らたので、jp.ubuntu.comのダウンロードページからUbuntu Desktopをダウンロードした。
ブータブルUSBを作るには、Rufus等を使う(ググってちょ)。

インストール

以下の参考ページを参照して起動するとこまでやってちょ。

お好みで

作業中に画面が消えると鬱陶しいのでパワマネ無効化。
TAB補完使えばコピペするほどでもないので、最初にやっとく。

# ブランクスクリーン しない
gsettings set org.gnome.desktop.session idle-delay 0
# 自動画面ロック OFF
gsettings set org.gnome.desktop.screensaver lock-enabled false

最新版にupdate

とりあえず最新版に

sudo apt update
sudo apt upgrade

ついでにsshもインストールしておく。
webで調べたコマンドをコピペしたいので。
参考:ubuntuにSSHサーバをセットアップする

mkdir ~/.ssh
vi ~/.ssh/authorized_keys
### 公開鍵を追記 ###
chmod 600 ~/.ssh/authorized_keys

念のためここでリブート。

chromeとリモートデスクトップのインストール

参考: UbuntuにChromeをインストールする手順
参考: Linux(Ubuntu)のリモートデスクトップ設定(Google Chrome リモートデスクトップ/xrdp)

おまじない

chrome リモートデスクトップをインストールすると、ローカル端末でのログインができなくなるので、 以下の処理を行う。

新しく使用する.desktopファイルを作成(ubuntuをベースに使用)

cd /usr/share/xsessions/
sudo cp ubuntu.desktop ubuntu-local.desktop

以下のパッチをあてる。

[!NOTE] Nameの変更とExecDISPLAY=":0"を追加

--- ubuntu.desktop      2022-04-08 04:07:53.000000000 +0900
+++ ubuntu-local.desktop        2023-11-11 07:25:37.223280734 +0900
@@ -1,7 +1,7 @@
 [Desktop Entry]
-Name=Ubuntu
+Name=Ubuntu on local
 Comment=This session logs you into Ubuntu
-Exec=env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --session=ubuntu
+Exec=env DISPLAY=":0" GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --session=ubuntu
 TryExec=/usr/bin/gnome-shell
 Type=Application
 DesktopNames=ubuntu:GNOME

[!NOTE] ローカル端末でログインするときはユーザ名選択後、画面右下の歯車アイコンをクリックし、 「Ubuntu on local」を選択(一度選択すれば記憶されるので2度目以降は確認だけでOK)してログインする。 (作成したセッションを選択可能にするには、リブートが必要)

chromeとリモートデスクトップのインストール

手間を省くためにコマンドラインで以下を実行(sshからで可)

# インストール時にエラーにならないようおまじない
mkdir ~/.config/chrome-remote-desktop

# リブート時に消せるようにダウンロード先に/tmpを使う
cd /tmp

# chromeのダウンロード
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
# chromeのインストール
sudo apt install ./google-chrome-stable_current_amd64.deb

# remote desktopのダウンロード
wget https://dl.google.com/linux/direct/chrome-remote-desktop_current_amd64.deb
# remote desktopのインストール
sudo apt install ./chrome-remote-desktop_current_amd64.deb

[!NOTE] インストール時、以下のように提案/推奨されるが、入れなくても大丈夫。
提案パッケージ:
python-psutil-doc x11-xfs-utils
推奨パッケージ:
xserver-xorg-video-dummy pipewire

chrome起動して初期設定&Googleにログイン

ローカル端末でchrome起動

Window PC側から接続

Windows PCでリモートデスクトップアプリを起動し、Ubuntuマシンに接続する
セッションの選択ではUbunto on Xorg または Ubuntuを選択(たぶんどっちも同じ)

おまじない1

接続すると、「カラーマネジメントされたデバイスを作成するには認証が必要です」ダイアログが出る場合がある。
このダイアログはパスワード入れてもキャンセルしても結果は同じで問題なく操作できるが、逐一やるのはめんどっちいので出なくする。

/etc/polkit-1/localauthority/50-local.d/45-allow.colord.pkla で以下の内容で作成

[Allow Colord all Users]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ResultAny=no
ResultInactive=no
ResultActive=yes

設定を有効にするのは再起動必要。

参考: Ubuntu 18.04LTS上のXRDP

おまじない2

接続時、毎回セッションの選択をするのは面倒なので、自動で選択できるようにしようとしたが、
これをやるとローカル端末でログインできなくなるのでやめておく。

[!NOTE] 参考までに手順を記載しておく
~/.chrome-remote-desktop-sessionを以下の内容で作成する

exec /etc/X11/Xsession 'env GNOME_SHELL_SESSION_MODE=ubuntu /usr/bin/gnome-session --session=ubuntu'

env以下は使用するセッションに合わせて変更すること。
(/usr/share/xsessions/≪セッション名≫.desktopExec行の内容)

使いそうなプログラムのインストールと使わないプログラムのアンインストール

gccとかmakeとかをインストールする

ま、使うでしょ。

sudo apt install build-essential

色々使うのでインストール

なにかと使うのでインストール

sudo apt install net-tools
sudo apt install dconf-editor
sudo apt install gnome-tweaks 

使わないのでアンインストール

使うツールがあったら残してちょ。

ツール類

sudo apt remove thunderbird libreoffice-* simple-scan gnome-todo remmina cheese rhythmbox

# 個別に実行する場合はこちらでどうぞ。
sudo apt remove thunderbird
sudo apt remove libreoffice-*
sudo apt remove simple-scan
sudo apt remove gnome-todo
sudo apt remove remmina
sudo apt remove cheese
sudo apt remove rhythmbox

ゲーム類

sudo apt remove aisleriot gnome-mahjongg gnome-mines gnome-sudoku

# 個別に実行する場合はこちらでどうぞ。
sudo apt remove aisleriot
sudo apt remove gnome-mahjongg
sudo apt remove gnome-mines
sudo apt remove gnome-sudoku

要らなくなったパッケージのお掃除

sudo apt autoremove

お好みで

フォントのインストール

最近はUDEVゴシック がお気に入りなのでインストールしておく。
もちろん、他のフォントでもいいよ。
ブラウザでダウンロードしてもいいけど、あちこちファイルコピーしたり削除したりが面倒なので、 一時ファイルは/tmpに突っ込んでリブート時にまとめて消してもらおう。

フォントのインストールと言っても、ttfファイルを入手して~/.fonts/ディレクトリにコピるだけ。
下では全部コピってるけど、もちろん使いたいものだけでもOK。

pushd /tmp
wget https://github.com/yuru7/udev-gothic/releases/download/v1.0.0/UDEVGothic_v1.0.0.zip 
unzip UDEVGothic_v1.0.0.zip 
mkdir ~/.fonts
cp UDEVGothic_v1.0.0/*.ttf ~/.fonts/
popd

gnome-terminalのフォントの変更

で、入手したフォントを端末のフォントに設定しておこう。
さっきフォントのインストールに使った端末ウィンドウを使うと エラーで端末ウィンドウが落ちるかもしれないんで一旦終了して新しいウィンドウで。

端末を起動し、右上の「≡」→「設定」を選択 使用中のプロファイル(最初のは「名前なし」)を選択し、
「フォントを指定」にチェックを入れ、その右側でフォントを選ぶ
さっきインストールした「UDEV Gothic JPDOC」を選んでサイズを指定。
ついでに起動時の端末サイズも修正しておくとよい
終わったら×で終了。

その他設定

作業用ディレクトリの作成

もちろん、使うものだけでOK。

sudo mkdir /proj /work /NFSROOT
sudo chown $USER:$USER  /proj /work* /NFSROOT

デフォルトshellをbashに変更

デフォルトのshがdashなのはなんとなくイヤなので。

pushd /bin
sudo ln -sf bash sh
popd

bashの設定変更

~/.bashrcに以下を追記。
もちろんお好みで。
「# for pyenv」以降はそれぞれのツールをインストールしたとき用なので、インストールしないならなくて可。

# プロンプトの設定
PS1="\w\$ "

# キーバインドの設定
bind '"\C-n": history-search-forward'
bind '"\C-p": history-search-backward'

# ディレクトリスタックの表示改善
function pushd() {
    command pushd $* > /dev/null
    command dirs -v
}
function popd() {
    command popd $* > /dev/null
    command dirs -v
}
function dirs() {
    command dirs -v
}

# 表示色変更
export LS_COLORS='di=01;32:ln=01;36:ex=01;31:'
export GREP_COLORS='mt=01;31:ml=:cx=:fn=01;32:ln=32:bn=32:se=36'

# lessのオプション
export LESS="-iMR"

# x11からのログイン以外ならDISPLAYを設定する
# Ubuntu22.04だとwaylandになるらしい
if [ "$XDG_SESSION_TYPE" != "x11" ] && [ "$XDG_SESSION_TYPE" != "wayland" ]; then
    export DISPLAY=192.168.78.200:0.0
fi
echo DISPLAY="$DISPLAY"

# for pyenv
export PYENV_ROOT=/proj/.pyenv    #環境に合わせて修正してね
if [ -e $PYENV_ROOT ]; then
    export PATH=$PYENV_ROOT/bin:$PATH
    # 仮想環境名をプロンプトに表示しない場合は以下を有効化
    # export VIRTUAL_ENV_DISABLE_PROMPT=1
    eval "$(pyenv init --path)"          # pyenv 2.0以降で必要
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    export PYTHON_CONFIGURE_OPTS="\
     --enable-shared\
    "
fi

# for nodenv
export NODENV_ROOT=/proj/.nodenv    # 環境に合わせて修正してね
if [ -e $NODENV_ROOT ]; then
    export PATH=$NODENV_ROOT/bin:$PATH
    eval "$(nodenv init -)"
fi


# direnv 設定
if type direnv > /dev/null 2>&1; then
    export EDITOR=vi
    eval "$(direnv hook bash)"
    
    # # venvの仮想環境名を表示するための設定
    # show_virtual_env() {
    #   if [ -n "$VIRTUAL_ENV" ]; then
    #     echo "($(basename $VIRTUAL_ENV))"
    #   fi
    # }
    # PS1='$(show_virtual_env)'$PS1
fi

ウィンドウが勝手に最大化するのをやめる

以下のコマンドで無効化できる

gsettings set org.gnome.mutter auto-maximize false
gsettings set org.gnome.mutter edge-tiling false

ウィンドウにマウスを乗せるとフォーカスされるようにする

以下のコマンドで設定できる

gsettings set org.gnome.desktop.wm.preferences auto-raise false
gsettings set org.gnome.desktop.wm.preferences focus-mode mouse
gsettings set org.gnome.desktop.wm.preferences raise-on-click true

[!NOTE] focus-mode の設定値 mouse と sloppy の違い
mouse は マウスカーソルをウィンドウからデスクトップに移すとフォーカスがはずれる。
sloppy は マウスカーソルをウィンドウからデスクトップに移してもフォーカスされたまま。

デスクトップからゴミ箱とホームを消す

以下のコマンドで設定できる
Ubuntu20.04とちょっとキーが変更されてる
ゴミ箱は最初から表示されてないけど…ま、ついでに書いとく。
表示したければ、設定値をtrueにすれば良い。

gsettings set org.gnome.shell.extensions.ding show-home false 
gsettings set org.gnome.shell.extensions.ding show-trash false 

Dockのカスタマイズ

なんとなく使いにくいので好みのデザインに変更。

#ゴミ箱削除
gsettings set org.gnome.shell.extensions.dash-to-dock show-trash false

# アプリケーションをDockバーの上(または左)に表示
gsettings set org.gnome.shell.extensions.dash-to-dock show-apps-at-top true

# Dockバーを画面下に表示
gsettings set org.gnome.shell.extensions.dash-to-dock dock-position BOTTOM

# アイコンサイズの変更
gsettings set org.gnome.shell.extensions.dash-to-dock dash-max-icon-size 16

マウスカーソルを大きくする

マウスカーソル小さくて見失う人は大きくしましょう。
最後の数字がカーソルの大きさなので、お好みのサイズで。

gsettings set org.gnome.desktop.interface cursor-size 48

または「設定」→「ユニバーサルアクセス」→「カーソルの大きさ」で選択

ファイル(nautilus)のデフォルト動作変更

ファイル(nautilus)の設定をお好みに合わせて。
ファイル(nautilus)はすべて終了しておいた方が無難。

# アドレスバーをテキスト形式にする
gsettings set org.gnome.nautilus.preferences always-use-location-entry true 

# 詳細表示をデフォルトに
gsettings set org.gnome.nautilus.preferences default-folder-viewer 'list-view' 

# 隠しファイルを表示する
# 隠しファイルの表示はちょっと場所が違う
gsettings set org.gtk.Settings.FileChooser show-hidden true

ソフトウェアの自動更新の無効化

自分のタイミングでソフトのアップデートができないのがストレスなので、以下で自動確認を停止。
もちろん、適時手動でアップデートするのを忘れずに

CTRLキーとCAPSキーを入れ替える

Chromeリモートデスクトップ環境ではWindowsで設定したのが有効になっているので必要ないが、 ローカル端末で使用する場合に備えて入れ替えを設定しておく。
方法は、/etc/default/keyboardXKBOPTIONS="ctrl:nocaps" を追加。
設定を有効にするにはリブート必要。

参考:【Ubuntu 20.04/18.04 LTS】CapsLockとControlキーを入れ替える
リンク先は「Ubuntu 20.04/18.04 LTS」となっているが、Ubuntu22.04でも同じらしい。

bashのクリップボードの挙動が以前と異なるようになったので対策

bashでクリップボードからペーストするとペーストした文字が選択状態になったり、改行がその場で入力されなかったりするようになった。
こればbash 5.1からブラケットペーストモード というのがデフォルトで有効になったためらしい。
(余計なことをしてくれる…😩💨)
これを回避するには/etc/inputrcの最後に以下を追記する。

# disable bracked-paste mode
set enable-bracketed-paste off

起動済みのbashには効かないが、設定以降に起動したbashでは有効になる(システムの再起動は不要)。

参考: シェル - bash - ブラケットペーストモード(Bracketed Paste Mode)

IPv6を無効化する

IPv6動いていて何度かハマったので無効化しておく。
sysctrlで無効化する方法もあるけど、ちょっと手順が面倒なので、起動オプションで無効化してしまおう。

参考:Ubuntu 20.04 LTS Focal FossaでIPv6アドレスを無効にする方法

/etc/default/grubの以下の部分(10行目あたり)にipv6.disable=1を追加

元から設定されている”quiet splash”を削除すれば起動時のスプラッシュスクリーンが表示されず、ブートシーケンスのログが表示されるようになるので、お好みで。

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"GRUB_CMDLINE_LINUX_DEFAULT="quiet splash ipv6.disable=1"
# または、ブートシーケンスのログを表示したい場合は以下。
# GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"

これだけだとまだ設定有効にならない。
以下のコマンドでgrubメニューの更新を行う。

sudo update-grub

リブートする

リブート後、ip addressとかifconfigでIPv6のアドレスが割り当てられていないことを確認。

sambaのインストール

ツール本体のインストール

sudo apt install samba

/etc/samba/smb.conf に以下を追加
作らなかったワークディレクトリの部分は削除してね。
他にも共有したいディレクトリがあったら追加してちょ。

force groupに設定するグループは存在するグループ(またはユーザ)名に変更してください。

ここではちょっと見たいファイルがあったのでoptも共有してます。

[proj]
path = /proj
guest ok = no
writable = yes
map archive = no
share modes = yes
dos filetimes = yes
force group = yas
force create mode = 0664
force directory mode = 0665

[work]
path = /work
guest ok = no
writable = yes
map archive = no
share modes = yes
dos filetimes = yes
force group = yas
force create mode = 0664
force directory mode = 0665

[NFSROOT]
path = /NFSROOT
guest ok = no
writable = yes
map archive = no
share modes = yes
dos filetimes = yes
force group = yas
force create mode = 0664
force directory mode = 0665

[opt]
path = /opt
guest ok = no
writable = yes
map archive = no
share modes = yes
dos filetimes = yes
force group = yas
force create mode = 0664
force directory mode = 0665

[homes]
   comment = Home Directories
   browseable = no

# By default, the home directories are exported read-only. Change the
# next parameter to 'no' if you want to be able to write to them.
;   read only = yes
    read only = no

# File creation mask is set to 0700 for security reasons. If you want to
# create files with group=rw permissions, set next parameter to 0775.
;   create mask = 0700
    create mask = 0665

# Directory creation mask is set to 0700 for security reasons. If you want to
# create dirs. with group=rw permissions, set next parameter to 0775.
;   directory mask = 0700
    directory mask = 0775

# By default, \\server\username shares can be connected to by anyone
# with access to the samba server.
# Un-comment the following parameter to make sure that only "username"
# can connect to \\server\username
# This might need tweaking when using external authentication schemes
   valid users = %S

ユーザの追加と再起動

sudo smbpasswd -a $USER
sudo service smbd reload
sudo service smbd restart

NFSのインストール

別のUbuntuマシンとか、RasberryPiとファイル共有したいときに備えて設定しておく。

インストール

sudo apt install nfs-kernel-server

/etc/exportsに以下を追加

/NFSROOT 192.168.0.0/255.255.0.0(rw,sync,no_root_squash)

[!NOTE] もちろん、192.168..に割り当てられたNICが有効化されている必要がある。
デフォルトのNATだけじゃダメよ~。
VirtualBoxの設定のネットワークアダプタでホストオンリーアダプタを割り当てておけば、 同一ホストマシン上の他の仮想マシンと通信できる。
VirtualBoxの設定のネットワークアダプタでブリッジアダプタを割り当てておけば RaspberryPi等ホストマシン外のマシンとも通信できる。
ネットワークアダプタは4つまで設定できるので、両方有効化しておくことも可。

再起動

sudo /etc/init.d/nfs-kernel-server restart

exportできているか確認

sudo exportfs 

別のマシンからマウントできるか確認
IPアドレスはip addressとかifconfigで調べてちょ。

mkdir abc
sudo mount 192.168.56.101:/NFSROOT abc/
# abcの下にリモートのファイルが見えたらOK

pyenvのインストール

準備

必要なモジュールをインストール

インストールに必要なモジュールをインストールする。

sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git

bluetoothを使用する場合

bluetoothを使用する場合は以下も必要

sudo apt install libbluetooth-dev libglib2.0-dev libboost-python-dev libboost-thread-dev

~/.bashrcの編集

pyenvの設定のため、~/.bashrc に以下を追加。
(上記手順で記載済み。念のため再掲しておく)

# for pyenv
export PYENV_ROOT=/proj/.pyenv    #環境に合わせて修正してね
if [ -e $PYENV_ROOT ]; then
    export PATH=$PYENV_ROOT/bin:$PATH
    # 仮想環境名をプロンプトに表示しない場合は以下を有効化
    # export VIRTUAL_ENV_DISABLE_PROMPT=1
    eval "$(pyenv init --path)"          # pyenv 2.0以降で必要
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
    export PYTHON_CONFIGURE_OPTS="\
     --enable-shared\
    "
fi

sudoでpyenv環境を実行するように設定する

sudoでpythonを実行すると、pyenvの設定に関係なくsystemのpythonが実行されてしまいます。
これを防ぐためには、/etc/sudoersDefaults secure_pathに以下のpathを追加します。

具体的には以下のように設定します。

# 変更前
Defaults  secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    ↓
# 変更後
Defaults  secure_path="/proj/.pyenv/plugins/pyenv-virtualenv/shims:/proj/.pyenv/shims:/proj/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

pythonのインストール 以降

参考: pyenvのインストール