140文字以上

140文字では伝わらないことを書いています。禁無断転載

twitter(@chromarock), github, bluesky, Mastodon(japanet), misskey, ほしいものリスト, 本人証明, その他プロフィール

ubuntu 24.04.1 設定メモ

2年に一度のUbuntu LTSリリースがやってまいりました。
Ubnutu 24.04 LTSは4月にリリースされたのですが、JapanRemixは結局なし、CUDAがまだ対応していない、24.04の最初はどうもおかしいということで、24.04.1が出るまでちょっと保留しておりました
そしてこのほど 24.04.1がアップデートされたため、ようやく24.04.1を新規で入れることにしました。

ちなみに、自分が確認した環境は以下です。

$ screenfetch
                          ./+o+-       xxxxx@xxxxxxx
                  yyyyy- -yyyyyy+      OS: Ubuntu 24.04 noble
               ://+//////-yyyyyyo      Kernel: x86_64 Linux 6.8.0-41-generic
           .++ .:/++++++/-.+sss/`      Uptime: 1h 26m
         .:++o:  /++++++++/:--:/-      Packages: 2139
        o:+o+:++.`..```.-/oo+++++/     Shell: bash
       .:+o:+o/.          `+sssoo+/    Resolution: 6800x1440
  .++/+:+oo+o:`             /sssooo.   DE: GNOME 46.0.1
 /+++//+:`oo+o               /::--:.   WM: Mutter
 \+/+o+++`o++o               ++////.   WM Theme: Adwaita
  .++.o+++oo+:`             /dddhhh.   GTK Theme: Yaru-magenta-dark [GTK2/3]
       .+.o+oo:.          `oddhhhh+    Icon Theme: Yaru-magenta
        \+.++o+o``-````.:ohdhhhhh+     Font: Ubuntu Sans 11
         `:o+++ `ohhhhhhhhyo++os:      Disk: 3.0T / 14T (23%)
           .o:`.syhhhhhhh/.oo++o`      CPU: 13th Gen Intel Core i7-13700 @ 24x 5.1GHz [32.0°C]
               /osyyyyyyo++ooo+++/     GPU: NVIDIA GeForce RTX 4080
                   ````` +oo+++o\:     RAM: 4660MiB / 64056MiB
                          `oo++.  

USB版のインストールイメージを作る

既にUbuntu22.04の人はインストールイメージは「ユーティリティ」-「ディスク」から簡単に作れます。 Windowsな人はrufusを使うのが良いかなと思います。


小ネタ:FreeDOSをUSBから起動する方法

古いマシンを復活させようとしてBIOSをアップデートしないといけなかったりする場合があったりするとWindowsからかDOSから起動しないといけないことって多々ありますよね。
そういう場合はFreeDOSを使えばUbuntuでもDOSの起動USBメモリを生成できます。

FreeDOSはここ
http://freedos.org/download/ から[FreeDOS 1.3 LiteUSB]をダウンロードすればOK。

そしてそれを適切な書き込みツール(ディスクとかRufusなど)で書けば動きます。楽ですね。


WindowsとUbuntuのデュアルブートで気をつけること

Windowsの「高速スタートアップ」は無効化しておきます。
合わせてBIOS(UEFI)設定で「Fast Boot」も無効化しておきます。
「SecureBoot」は有効で問題ありません。(Ubuntu 24.04は流石に対応しています)

WindowsとUbuntuのデュアルブートをする場合は、できるだけ別の物理ディスク(ストレージ)に入れておいたほうが無難です
一枚のM.2 SSDにWindows、もう一枚のM.2 SSDにUbuntuという感じです。
こうしておく利点は色々あるのですがWindowsUpdateがあった場合や今回のように22.04から24.04.1への更新するときなどに誤って別のOSを消してしまうとかの不測の事態を防ぐことができます。バックアップをとるのも物理ディスクの交換ですむたねかんたんですしね

あと、デュアルブートをしたい場合はインストール中にどのディスクにインストールするかどうかを選ぶ画面が出ますが、必ず手動でパーティションを設定する(一番下の選択肢)を選んで自力でやる必要があります。
なお、インストール中にブートローダの選択がありますが、ブートローダだけはは必ずWindows側ディスクのほうへ入れます(windowsが入っているディスクが/dev/nvme0なら、/dev/nvme0n1p1です。ここはUbuntu側からは/boot/efiとしてマウントされます)


インストールするときはインターネットが繋がるところで行う

インターネットの接続がないところでもインストール作業はできるのですが、インターネット接続がない場合、インストール後は英語設定になってしまうため特別な理由がなければインストール時にインターネット接続ができておくに越したことはないです
英語設定になっていたとしても「言語サポート」で設定のし直しはできます(ただしそこでインターネット接続が必要になります)


インストールするPCに固定IPを設定する場合に気をつけること

ルータのDHCPを起動させて、出来る限り接続しているPCにIPを割り振るようにしてください。
IPアドレスをどうしても変更したくない場合は、PCのネットワークデバイスのMACアドレスを調べて、ルータのDHCPに固定IPを割り振るように設定すればOKです。

一応インストール時に固定IPを設定出来るのですが、24.04ではネットワーク関連の管理が変わったのかNetplanとNetworkManagerの連携がうまくできていないようで、インストール後の最初の再起動の段階でネットワーク設定にあるはずのデバイス設定が出てこない&ネットワーク不通となって詰みます。。。

詰んでしまった場合でも対策はあって、/etc/netplan以下にある90-NM-なんとか.yamlという90なんとかとついているyamlファイルを全部削除してから再起動すると、再びネットワーク設定にネットワークデバイスが復活してきます。
しかし、ここで固定IPを設定してしまうとそのときは通信できるわけですが、その状態で安心して再起動とかしてしまうとまたネットが不通となってしまうので、ルータから出来る限りDHCPで割り振ってもらったほうが無難ということです

(※:自分は未検証ですが、もうNetworkManagerは使わずにUbuntuSeverでよく使われているNetplanのみでなんとか設定する方法も一応あるらしいです。。
というより24.04で管理方法が変わったのは、UbuntuServerではNetplanを以前から使っているのにUbuntuDesktopではNetplanを使わずNetworkManagerだけなのはおかしいということでこのようになったそうです。。。が今回のようにNetworkManagerとNetplanの連携がうまく行かないパターンもあるということです)


Hyper-V環境にインストールする場合

インストール時にセキュアブートを有効にして仮想マシンを起動すると、デフォルトだと証明書的なエラーがでてしまいます。 ここは仮想マシンの設定で、[セキュアブート]-[テンプレート]を[Microsoft UEFI 証明機関]に変更するとうまく行きます。

起動時にgrubを常に表示

grubが表示されずにいきなりログイン画面に行ってほしくない場合は/etc/default/grubを編集する必要があります
grubは出来る限り表示させておいたほうが良くて、突然OSが起動しなくなったなどの場合のトラブルシューティングに役立ちます

/etc/default/grubを以下のようにすればOK

#GRUB_TIMEOUT_STYLE=hidden
#GRUB_TIMEOUT=0
GRUB_TIMEOUT=10
GRUB_TIMEOUT_STYLE=menu
GRUB_HIDDEN_TIMEOUT_QUIET=false

編集したら

$ sudo update-grub

でgrubの編集を反映させます

なお、Windowsとのデュアルブート環境のときはすでにGrubの設定が上記のように配慮されています

Ubuntu 24.04.1 Serverの場合の固定IP設定

GUIが必要ないUbuntu 24.04.1 Serverの場合は仮想マシンで動かしたいときにどうしても固定IPを設定したいことがあるかと思います。
Ubuntu 24.04.1 Serverの場合はNetplanのみ動作しているので以下のようにします。

  1. /etc/netplan/50-cloud-init.yaml50-cloud-init.yaml.orgとリネームして50-cloud-init.yaml.orgをコピペ
$ cd /etc/netplan
$ sudo mv 50-cloud-init.yaml 50-cloud-init.yaml.org
$ sudo cp 50-cloud-init.yaml.org 01-netcfg.yaml
  1. コピペした01-netcfg.yamlを編集。例では192.168.1.5を固定IPとして割り振るとします
network:
    ethernets:
        eth0:
            dhcp4: false
            addresses: [192.168.1.5/24]
            routes:
              - to: default
                via: 192.168.1.1
            nameservers:
              addresses: [192.168.1.1]
            dhcp6: false
    version: 2

IPアドレスは、addressではなくaddressesですのでご注意…

  1. 再度有効化
$ sudo chmod 01-netcfg.yaml
$ sudo netplan apply

何か文法的間違いがあればapplyの段階でエラーが出るので直せばOK


インストール後の基本セット

自分はインストール後にまずこれをしてとりあえず必要なものをインストールしています

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install build-essential cmake git gitk ssh gufw samba vim filezilla minicom mcomix gtkterm shutter vlc ffmpeg geany flatpak flex bison screenfetch htop apt-transport-https gnupg2 gnome-shell-extension-manager

【注意】リポジトリ情報を設定するsources.listの変更について

Ubuntu 22.04はaptコマンドで使うリポジトリ情報の参照元が/etc/apt/sources.listだったのですが、24.04からは/etc/apt/sources.list.d/ubuntu.sourcesに変わっているのでその辺り気をつける必要があります。

とは言ってもたいていの場合はここを直接書き換えることは無くて、/etc/apt/sources.list.d以下にファイルを置くとかはしていると思います。
もしUbuntu 22.04ベースの解説で/etc/apt/sources.listを直接書き換えるとかになっている場合は、/etc/apt/sources.list.d/ubuntu.sourcesに書かないといけない、もしくは、/etc/apt/sources.list.d以下にファイルを作るなど変更するなど、気をつけましょう


IMEをfcitx-5に変更する

デフォルトではIMEにiBusが入ってくるのですが環境によってはgnomeテキストエディターなどで日本語入力に支障が出ているので、もうfcitx-5に切り替えしたほうがいいです。 iBusだと変換窓が出てくる際に単語解説も出てこないですが、fcitx-5だとちゃんと出てきますし、アプリによってIMEのON/OFF状態も記憶しているのでもはや変えない理由がないという感じです

というわけで切り替え方は以下

$ sudo apt install fcitx5-mozc
$ sudo im-config -n fcitx5

これをしたあと、「言語サポート」でfcitxに切り替えて、再起動でOKです。デフォルトではIME切り替えはCtrl+Spaceにもマッピングされているので、ボクのキーボードのような全角半角キーがついていない環境にも優しいですね

あと、突然IMEが起動してこなくなった場合はfcitx5がおなくなりになっている場合があるので、「Fcitx5設定」を起動させると「Fcitxが起動していません」みたいなメッセージが出るので「起動」を押してあげると復活します


Codecをまとめてインストール

動画のコーデック関連の話。Ubuntu18でもありましたね。
Ubuntuのデフォルトでは権利関係が微妙な(微妙にライセンスがオープンじゃなかったり)怪しいものは除外される運命だけど、これをすることによってインストール出来るというアレ。

但し、libavcodecが消えてしまう(その代り権利怪しいアレなバージョンが入る)

$ sudo apt install ubuntu-restricted-extras

あれとか言ってるけど、動作的には問題ないので心配しないでほしい。どう違うか?は以下の通り。

libavcodec - 権利がしっかりしたもの
libavcodec-extra - ubuntu-restricted-extrasで勝手に入る。権利怪しいもの

あと、コーデックがAV1の動画ファイルなどをTotem(付属のビデオプレーヤー)で再生したい場合は更に以下が必要です

$ sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-plugins-bad-apps

リカバリーモード(Recovery mode)への入り方

Ubuntuはごくまれにですがグラフィックドライバの更新失敗などなどで、通常のGUIログイン画面が出てこなかったり、そうでなくてもディスクの故障などでこれもやはり通常のGUIで操作ができなくなり困る場面は出てくると思います。
あとは、Nvidia系のグラフィックボードを入れたのだけどnouvauドライバが対応しておらずGUIにすら入れない状態ですね…

そういう場合はリカバリーモードで入って、rootシェルでなんとかして復旧させるということをします。
とりあえずリカバリーモードへの入り方とネットワークの活かし方は以下です。

1.Grubの画面で「Advanced options for Ubuntu」を選択して、「起動するLinuxバージョン名の後ろに(recovery mode)」のものを選択
2.しばらくするとメニュー画面が出るので「root」を選択
3.Ctrl+Dを押すとなんとか…という画面が出るけど、ここでリターンを押してrootシェルに入る
4. そのままではネットワークが動いておらず何もできんので、とりあえずip linkコマンドでLANインターフェイスの名前を見る(例だとeth0がそれ)

# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

ここで「DOWN」になっているはずなので以下で復帰させます。
これでとりあえずネットワークとインターネットが使えるようになって、apt updateなどが使用可能になります
(これはDHCPがルータにある場合。ない場合はipコマンドでIPAddressを割り振ればOK)

# ip link set eth0 up
# dhclient eth0
# systemctl start systemd-resolved

(余談:昔はrecovery modeでは読み取り専用マウントにされてしまうので、改めて読み書き可にするためのremountをしないといけなかったけど、いつの間にかそれをしなくても良くなったようです)


ディスク(HDDやSSD)のクローンやディスクイメージを取りたい、どうにかディスクを復旧させたい場合

Linuxでのディスククローンの定番はddコマンドですが、ddの欠点を直したddrescueを使うのが良いです
以下でインストールできます

$ sudo apt install gddrescue

・コピー元にエラーがない場合
単にコピー元にディスクエラーがなくクローンする場合はコピー元が/dev/sda、コピー先が/dev/sdbの場合は、次のようにします
下手したら取り返しがつかないため、「コピー元」、「コピー先」の指定順を実行前に必ず再確認しましょう

$ sudo ddrescue -f -v /dev/sda /dev/sdb

・コピー元にエラーがあってどうにか救出しつつクローンをしたい場合
コピー元の/dev/sdaになんらかのエラーが発生しており、どうにか/dev/sdbに移したい場合は次のようにします
下手したら取り返しがつかないため、「コピー元」、「コピー先」の指定順を実行前に必ず再確認しましょう

$ sudo ddrescue -f -n -v /dev/sda /dev/sdb ddlog.log

これでエラーが報告されなければめでたしめでたしですが、エラーが報告されてしまったときは続けて以下のようにコマンドを入力してください

$ sudo ddrescue -f -d -r1 -v /dev/sda /dev/sdb ddlog.log

-rオプションは続く回数分だけエラーが発生したら読み直しをしてくれます。が、それだけHDDやSSDに負担がかかってしまい「最後の一撃」になりかねないのでよく考えて実施しましょう。
(ddrescueのマニュアルにはI/Oエラーが発生しているディスクにはおすすめしませんと書かれています)
-dはディスクの読み取り時にキャッシュを使わずに必ずディスクへダイレクトアクセスをします。ダイレクトアクセスということで遅くなりますがエラーが出ているようなディスクの場合、キャッシュ経由で読むのは信頼性が無いためわりと重要です
ddlog.logはログファイルで、これを作っておくと二回目のddrescueコマンドのときに考慮してくれて、エラーが出ている箇所だけコピーを実施しようとします。


Windowsとのデュアルブート時にUbuntuを起動して終わらせたあと、Windowsを起動すると時間がズレる

これはWindowsとのデュアルブートをするときに出てくるFAQみたいなものです

Ubuntu(Linux)とWindowsではRTC(ハードウェアが覚えている時刻)の解釈が異なるために発生します。
Windowsの場合はRTCにかかれている時刻はローカルタイムであると(日本の場合ははRTC+9)として解釈します。
なので、自動時間同期が発動した瞬間にネットワークから取ってきたRTCに+9した値をハードウェアに書き込みます

他方、LinuxはハードウェアのRTCが覚えている値をそのまま解釈するため、自動時刻同期が動いた瞬間にネットワークから取ってきた時刻をそのままRTCに書き込みます。

というわけで、RTCの解釈方法がOSによって違うためこの現象は発生する…ということになります
この現象の補正方法は二種類あって、Windows側の解釈を変えるか、Linux側の解釈を変えるかの2つです

Windows側を変えるのは結構面倒なので、Ubuntu側のRTCの解釈を以下コマンドで変えます

$ sudo timedatectl set-local-rtc 1

set-local-rtc 1とすると、Linux側はRTCの解釈をローカルタイムと認識します(つまりこれはRTC+9の値なんだなと認識する)
これをset-local-rtc 0とするとLinux側はRTCの解釈を補正なしの値と認識します(RTCそのまま)

これを実行したあと、Windows側を起動して手動で時刻の同期をさせれば治ります


Flatpakのインストール

ubuntuはリリースバージョンでアプリのバージョンが固定されてしまうので、新しいアプリを使いたい人はなるべくflatpakかsnapでリリースされているものを使うのが良いとのこと

$ sudo apt install flatpak
$ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
$ sudo apt install gnome-software-plugin-flatpak

これをしたあとで、gimpのページの
https://www.gimp.org/downloads/ にある[install flatpak GIMP]をクリックしてflatpakrefを開くとflatpak版gimpがインストールできる

もしくは「ソフトウェア」から検索できるアプリでflathub版を入れてもOK

なお、flatpakのアップデートは

$ flatpak update

でOK


flatpak系アプリの権限設定を変えたい

flatpakは便利なのですが権限設定がやりにくいというのがあります
どうにも動作が怪しい場合は権限関連を見直してみると良いです
(権限関連でうまく動かなかったりするとかあります)

権限設定するにはflatsealをflatpakから入れますもしくはコマンドから以下

$ flatpak install flatseal

その後、flatsealを起動するとアプリごとの権限設定ができます


最新のNvdiaグラフィックドライバのインストール

ubuntu 24.04.1では気の利いている事に、nvidiaのグラフィックボードを載せている場合はインストール時にnvidiaなどのサードパーティドライバをインストールするかどうかの選択が出てくるので、最初からNvidiaのドライバが適用された状態で起動します(インストールイメージにパッケージが入っているようで、ネットワークに接続しない状態でもインストールができました)

24.04.1を入れた状態でのドライバのバージョンは535.183.01で、Ubuntu公式には最新とのことなのですが、最新の安定版は550.107.02です。
例えばこんな感じでubuntu-drivers devicesで現在Ubuntuが認識しているNvidiaドライバの最新を問い合わせると以下のようになります。

$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002704sv00001462sd00005111bc03sc00i00
vendor   : NVIDIA Corporation
model    : AD103 [GeForce RTX 4080]
driver   : nvidia-driver-535 - distro non-free recommended
driver   : nvidia-driver-535-open - distro non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-535-server-open - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

いつものようにここからsudo apt install nvidia-driver-バージョンとすれば入れられますし、デフォルトの535でも問題ないといえばないのですが、何かしらの問題が出てしまった場合や、CUDAの開発用として新しい目のドライバを入れないと行けない場合、nvidiaから提供されている550をを入れたい場合や、新機能ブランチ版(560)を入れたい場合はNvidia謹製のレポジトリ追加を追加する必要があります。

以下のようにするとNvidia謹製のレポジトリ追加ができます。

$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
$ sudo dpkg -i cuda-keyring_1.1-1_all.deb
$ sudo apt update
$ sudo apt upgrade

なお、システムにCUDAドライバなどを入れたい場合はこの操作は必須になります。

これを一度行った後で、再びubuntu-drivers devicesを行って最新のドライバを問い合わせると以下のようになります

$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00002704sv00001462sd00005111bc03sc00i00
vendor   : NVIDIA Corporation
model    : AD103 [GeForce RTX 4080]
driver   : nvidia-driver-555 - third-party non-free
driver   : nvidia-driver-560-open - third-party non-free
driver   : nvidia-driver-535-server-open - distro non-free
driver   : nvidia-driver-560 - third-party non-free recommended
driver   : nvidia-driver-535-open - distro non-free
driver   : nvidia-driver-555-open - third-party non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-550-open - third-party non-free
driver   : nvidia-driver-550 - third-party non-free
driver   : nvidia-driver-535 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

あとはいつものようにインストールするドライバを選んで入れます。
ここで、nvidia-driver-560系にrecommend(おすすめ)とされていますが、nvidia-driver-560系とnvidia-driver-555は新機能ブランチ版となるので、いわゆる新機能実験版で安定版ではないです。
(そんなに致命的な問題がでることはあまりないのですが、新機能版で割と頻繁にVerupもあるためソフトによっては時々NVENCが使えなくなったりします)

というわけで無難に安定版がほしいのであればnvidia-driver-550系となります。

-openはオープンソース版です。なお、nvidiaはLinux版ドライバに関しては今後オープンソース版のみにするという話もあります。 
パフォーマンス的なClose版との違いはないようで、違いとしてはサスペンドと休止状態が対応していない(正確にはVRAMのデータがサスペンドと休止状態で消えるらしい?)っぽいので、それが気になる人はOpenと書かれていないバージョンを入れると良いと思います。
Close版との比較など、ベンチマーク結果→NVIDIA R550 Linux Driver’s Open Kernel Modules Performing Well On GeForce GPUs https://www.phoronix.com/review/nvidia-r550-open

# apt update
# apt upgrade
# apt install nvidia-driver-550-open

セキュアブートが有効な場合はUbuntuが認証していないドライバが入るので、新しいMOK(Machine Owner KEY)を作ってUEFIに登録する必要があります。。。ということでこんな画面が出てきます


「了解」を押すと、パスワードを入力画面が出ます。8文字以上12文字以内のようなので適当に決めます。(なお、Ubuntuのログインパスワードではない)

このパスワードはシステムを再起動した後に再度聞いてくるのでとりあえず覚えておきます

無事インストールできたら再起動します。
以前は再起動の前にupdate-initramfs -uをする必要があったのですが最近ではしなくてもドライバインストール中に勝手にやってくれます。

で、セキュアブートで新しいMOKを登録した場合は再起動するときに以下のような青い画面が出てきます


ここでEnroll MOKを選びます。ここでContinue bootを選んでしまうとドライバインストール前のUbunutが起動するか、そもそもUbuntu起動に失敗してしまうので注意

次にContinueを選択

Enrollするかを聞いてくるのでYesを選択

あとはパスワード入力画面となるので、ドライバインストール時に設定したパスワードを入れるとOKです。

なお、flatpakを入れている人は、Updateしたあとは

$ sudo flatpak update

も忘れずに行ってください。


handbrakeでNVENCが使えない

古いPCにUbuntuを入れる活用法はあるあるだけど、nvencを使ってhanbbrakeでH.264やH.265のエンコードしたい場合はドライバのバージョンが390系だったりするとだめ。
ドライバのバージョンが5xx系だと使用可能。

ここを見て自分が使っているビデオボードがエンコードをサポートしているGPUかまず確認しよう。
https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new

これはOBSでnvencを使ってハードウェアエンコードしながら配信したい場合も同じなので注意。


gnome-shell拡張の導入 (gnome-extension-manager)

Ubuntuのデフォルトではデスクトップの細かいカスタマイズができません
gnome-shell拡張はこれを拡張してくれるやつで、入れておくと使い勝手が格段に向上するので入れておいたほうが吉です。

$ sudo apt install gnome-shell-extension-manager

これをしてから、extension-managerで探して起動するとGUIが出てくると思います。
この中からオススメは以下です

Allow Locked Remote Desktop   
 Ubunutの標準のデスクトップ共有を使うと、画面をロックしたりログアウトするとリモートデスクトップが完全停止してしまい
 再び許可しないと受付してくれないのでそれをどうにかする拡張。
 したがって、標準のまま共有を使うにはほぼ必須級だがセキュリティは弱くなるので考えてから導入  
Apps Menu  
 アクティビティの横にアプリケーションメニューできて、そこからアプリを選べる
Vitals
 通知バーにCPU温度とかシステムの状況を細かく表示できる

NVIDIA GPU State Toolについてはバージョンが古いので対応していないっぽい
しかし対応する用意はあるとのことなので待ってたらそのうち出てくる可能性はあります
参照:→
https://github.com/ethanwharris/gnome-nvidia-extension/issues/212

が、なんと今回はVitalsのバージョンが上がって実はVitalsからもGPUの各種データ(温度や使用率や使用VRAMやらGPUコアの動作周波数)も非常に事細かく取ることができます。もうVitalsだけでええかな。。。という勢いですね


google-chromeのインストール

以下のコマンドを打てばOK

$ sudo apt install apt-transport-https gnupg2
$ wget -O- https://dl.google.com/linux/linux_signing_key.pub | gpg --dearmor | sudo tee /usr/share/keyrings/google-chrome.gpg
$ echo deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] http://dl.google.com/linux/chrome/deb/ stable main | sudo tee /etc/apt/sources.list.d/google-chrome.list
$ sudo apt update
$ sudo apt install google-chrome-stable

vscodeのインストール

以下のコマンドを打てばOK

$ sudo apt install apt-transport-https gnupg2
$ wget -O- https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor | sudo tee /usr/share/keyrings/vscode.gpg
$ echo deb [arch=amd64 signed-by=/usr/share/keyrings/vscode.gpg] https://packages.microsoft.com/repos/vscode stable main | sudo tee /etc/apt/sources.list.d/vscode.list
$ sudo apt update
$ sudo apt install code

sshとsshd

sshが無いと色々めんどくさいので早めにやっておく。
この辺はUbuntu22.04と同じ。

ub2404: $ sudo apt install ssh

まずはクライアント側(接続側)の/home/xxx/.ssh/configは以下のようにしておく

Host *
        PreferredAuthentications password
        TCPKeepAlive yes

Match host * exec "gpg-connect-agent UPDATESTARTUPTTY /bye"

これはデフォルトのAnyなサーバでsshで入るときは「パスワード認証」を使いますよという意味です。

インストール直後は.sshが作られていない場合があるので、sshで入ったあとで自分で自分のサーバに入ります

client:$ ssh 192.168.x.xxx
(Pass聞いてくる)
ub2404:$ ssh localhost
(FingerPrint合ってるかどうか聞いてくるのでYと答える)
(Pass聞いてくる)
ub2404:$ exit

クライアント側(もしあれば)で、ed25519な鍵生成

client:$ ssh-keygen -t ed25519

何処に出力するか聞いてくるので、設定して鍵ファイルを作る

インストール先に公開鍵を転送

client:$ scp (作った秘密鍵).pub (転送先サーバIP):/home/xxx/.ssh/authorized_keys

転送先で鍵設定

ub2404:$ chmod 600 .ssh/authorized_keys

セキュリティを高めるために、転送先のsshd_configを触って鍵オンリーにしてパスワードログインは禁止。
/etc/ssh/sshd_configを以下のように変更

PubkeyAuthentication yes
PasswordAuthentication no

ここがubuntu24.04 serverの沼ポイントですが、ubuntu24.04 serverの場合は/etc/ssh/sshd_config.d/50-cloud-init.confにもPasswordAuthenticationの設定があって、せっかく無効にしていたパスワード認証を有効にしてしまいます…
もしこれがある場合は忘れず以下のように頭に#をつけてコメントアウトします

#PasswordAuthentication yes

最後に、sshdリスタート

ub2404:$ systemctl restart ssh

最後にsshコマンドで毎回鍵やらを指定するのはめんどくさいので、/home/xxx/.ssh/configを編集します。

Host ubuntuserver
        User xxx
        Hostname 192.168.x.xxx
        Port 22
        Identityfile ~/.ssh/作った秘密鍵を指定
        IdentitiesOnly yes
        PreferredAuthentications publickey

こうしておくと、次にsshで入りたいときに

client:$ ssh ubuntuserver

とだけで入れるので楽です

Samba設定

まず、Sambaをインストール

$ sudo apt install samba

次に/etc/samba/smb.confに追記

[ユーザ名]
        path = /home/ユーザ名
        writeable = yes
        browseable = no
        valid users = ユーザ名

browseableは必要に応じて変える

sambaのパスワードをセットする

$ sudo smbpasswd -a ユーザ名

(-a を入れないとエラーになる)

最後にsmbdリスタート

$ sudo systemctl restart smbd

メニューやランチャーに登録されていないアプリやコマンドを登録して使えるようにする

自作のGUIアプリとか、githubから持ってきて自分でビルドしたGUIアプリなんかはコンソールから実行しないといけないのですが、Ubuntuの標準ではそういったアプリをランチャーに登録していく機能がないので頻繁に実用していく場合はちょっと面倒な場合があります

一応対処法はあって、こういう場合は前まではdesktopエントリの設定ファイルを作ってエディタなどで編集する必要がありましたが、alacarteを入れると簡単にGUIで編集できるようになりました
しかしまあ標準機能では入ってないのが謎ですね

$ sudo apt install alacarte

あとはランチャーに「メイン・メニュー」というアプリが登録されるのでそれを実行して追加していけば良いかと思います
これ何気に必須級かもしれませんねぇ。。。
なおシェルスクリプトだけのものも登録していけるのでその点でも便利です


minicomなどで使用するターミナルの権限変更等

/dev/ttySなんとかのグループがdialoutになっているのでそれを利用する

$ sudo gpasswd -a ユーザ名 dialout
$ sudo chown root:dialout /etc/minicom
$ sudo chmod 775 /etc/minicom

詳細
https://qiita.com/chromabox/items/306386a886bee4fb7810

なお、デフォルトではFT23X系のチップを使用したUSBシリアル変換を接続すると、しばらく間をおいて途中で勝手に切られてしまう….
このときのdmesgはこんな感じ

[ 6114.316364] usb 1-3.4: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00
[ 6114.316374] usb 1-3.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 6114.316378] usb 1-3.4: Product: FT232R USB UART
[ 6114.316380] usb 1-3.4: Manufacturer: FTDI
[ 6114.316383] usb 1-3.4: SerialNumber: XXXXXXXX
[ 6114.319137] ftdi_sio 1-3.4:1.0: FTDI USB Serial Device converter detected
[ 6114.319181] usb 1-3.4: Detected FT232RL
[ 6114.320031] usb 1-3.4: FTDI USB Serial Device converter now attached to ttyUSB0
[ 6131.973998] usb 1-3.4: usbfs: interface 0 claimed by ftdi_sio while 'brltty' sets config #1
[ 6131.975270] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
[ 6131.975311] ftdi_sio 1-3.4:1.0: device disconnected
[ 6572.726767] usb 1-3.4: USB disconnect, device number 9

調べるとどうやら「brltty」という点字関連のアクセシビリティのものが悪さをしているので、以下を実行してbrlttyをアンインストールするとよい

$ sudo apt remove brltty

gdm3でWaylandを無効にする

Ubuntu24.04もデフォルトではWaylandを使おうとする(が、Nvidiaのドライバが入っているとデフォルトでX.orgでした)。
しかし、barrierやteamviewer等色々とwaylandに対応していないアプリはまだあるので、これらを動かすときはOFFにしておいたほうが無難。

/etc/gdm3/custom.confを以下のように、WaylandEnable=falseにする。

[daemon]
# Uncoment the line below to force the login screen to use Xorg
WaylandEnable=false

RDPやリモートログインなどについて

Ubuntu24.04のリモートログイン設定は Desktop Shareingリモートログイン の2種類あるのですが、触ってみたところ以下のような感じです

・Desktop Shareing
Ubuntu 22.04であったような現在のセッションの共有
画面をロックしたり接続を切断するとデスクトップ共有が切れてしまい、共有元から再度許可をしないと接続できない
これを防ぐにはextension-managerを入れてからAllow Locked Remote Desktopを入れるとOK
既にxorgで入っている場合はxorgになっているようです。

・リモートログイン
従来のxrdpのような使い方をする
但し、既に物理マシンでログインされている場合はリモートからのログインは不可で、一度ログアウトしてもらわないといけない(つまり画面共有は不可)

あと、この「リモートログイン」の場合はどうも強制的にwaylandになるようで、既に物理マシンにてXorgで入っている場合はうまく切れなかったりします。


Golangのインストール

以下でOK

$ sudo apt install golang-go

ubuntu 24.04のPython環境について

ubuntu 24.04はPython環境が3.12.3になってしまっていて、つまりこれはvenvも3.12.3環境ということです。
3.12.3環境だとStablediffusion系で色々と支障がでてしまい、A1111-webuiもまともに動きません…
(A1111-webuiは今もなお3.10.6推奨です。(3.11.xでも動くらしい)。理由はA1111が主に使用しているPyTorchのバージョンに関連しています)

ということでA1111-WebUIが動く3.10環境をインストールしないといけないのですが、Ubuntu24.04の通常では3.12環境しか入らないのでそう簡単にはいかないというのがあります。。。

このような場合はpyenvを入れてpythonのバージョン切り替えを行うとシステムで使用するpythonと他のpythonのバージョンを切り替えて使用できトラブルなく共存が可能です。

・pyenvのインストール方法

pyenvは各バージョンのPythonインストール時にPythonのビルドもするっぽいのでビルド用のライブラリなどなどが必要です

$ sudo apt install git build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

pyenvとその周辺をgithubから取って着ます

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ git clone https://github.com/pyenv/pyenv-update.git ~/.pyenv/plugins/pyenv-update

これで、ユーザのホームディレクトリの.pyenvに必要なものが入ります
その後githubのpyenvの説明通りに.bashrcに追記します
以下のコマンドでも追記できます

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

(環境によっては.profileにも書く必要はあるかもしれません。)

ちなみにこれを行った後の.bashrcは次のようになります(最終行の3行が↑のコマンドで追記した追加部分です)

...
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

これをした後で一旦ログアウトするかもしくは

$ source ~/.bashrc

として今行った環境変数設定をシェルに反映させまます

・pyenvに別のpythonバージョンをインストール

例題としてUbuntu 22.04は3.10.12なので、ubuntu 22.04のPython環境を再現したい場合は3.10.12を入れる手順は以下です

$ pyenv install 3.10.12

指定バージョンがビルドされて~/.pyenv以下にインストールされます。
なお、この状態ではまだシステムは変わっていません。単にビルドしただけです。

$ python3 --version
Python 3.12.3
$ python --version
pyenv: python: command not found

The `python' command exists in these Python versions:
  3.10.12

Note: See 'pyenv help global' for tips on allowing both
      python2 and python3 to be found.

なお、特定バージョンのPythonをアンインストールする場合は以下でOKです。

$ pyenv uninstall 3.10.12

・使用するPythonのバージョンを切り替えする

現在開いているシェルセッションだけに適用する場合は次のようにします

$ pyenv shell 3.10.12

ユーザ全体設定として切り替える場合は以下

$ pyenv global 3.10.12

なお、システムのpythonに戻したい場合はバージョン番号の部分をsystemにすればOKです。

例:

$ pyenv shell 3.10.12
$ python --version
Python 3.10.12
$ python3 --version
Python 3.10.12
$ pyenv version
3.10.12 (set by PYENV_VERSION environment variable)

$ pyenv shell system
$ python --version
pyenv: python: command not found

The `python' command exists in these Python versions:
  3.10.12

Note: See 'pyenv help global' for tips on allowing both
      python2 and python3 to be found.
$ python3 --version
Python 3.12.3
$ pyenv version
system (set by PYENV_VERSION environment variable)

UbuntuではPythonがシステムで以外なところで使用されていたりするので pyenv global は出来るだけせずにpythonを使うときは逐一pyenv shellをしたほうがいいかもしれません。

・venv環境を用意する場合
pyenvを使って特定のPythonバージョンのvenvを使う場合は次のようにします。

$ mkdir pytest
$ cd pytest
$ pyenv shell 3.10.12
$ python --version
Python 3.10.12
$ python -m venv venv
$ source venv/bin/activate
(venv) $
(venv) $ python --version
Python 3.10.12

なお、一度venv環境を建ててしまえば他のpyenv shellを実行していないターミナル(またはシェル)でvenv/bin/activateを実行してもpythonのバージョンはシステムのものとはならずvenvをactivateしたバージョン…つまりpyenvで切り替えたものとなります。
つまりこうなってシンボリックリンクが張られているから大丈夫というわけです。

~/ptest/venv/bin$ ll
合計 44
drwxrwxr-x 2 XXX XXX 4096  5月 17 15:21 ./
drwxrwxr-x 5 XXX XXX 4096  5月 17 15:21 ../
-rw-r--r-- 1 XXX XXX 9033  5月 17 15:21 Activate.ps1
-rw-r--r-- 1 XXX XXX 1987  5月 17 15:21 activate
-rw-r--r-- 1 XXX XXX  913  5月 17 15:21 activate.csh
-rw-r--r-- 1 XXX XXX 2193  5月 17 15:21 activate.fish
-rwxrwxr-x 1 XXX XXX  236  5月 17 15:21 pip*
-rwxrwxr-x 1 XXX XXX  236  5月 17 15:21 pip3*
-rwxrwxr-x 1 XXX XXX  236  5月 17 15:21 pip3.10*
lrwxrwxrwx 1 XXX XXX   44  5月 17 15:21 python -> /home/xxx/.pyenv/versions/3.10.12/bin/python*
lrwxrwxrwx 1 XXX XXX    6  5月 17 15:21 python3 -> python*
lrwxrwxrwx 1 XXX XXX    6  5月 17 15:21 python3.10 -> python*

ただまあ心配性なヒトは pyenv shell を実行してからまたactivateしたほうがいいかもしれませんね。

あと、pyenv shellコマンドはシェルスクリプト内部では使えないのでシェルスクリプト内で使う場合は次のようにします

#!/bin/bash

# PYENV_VERSIONを環境変数に設定することでpyenv shell 3.10.6を実行したのと同じことになる
export PYENV_VERSION=3.10.6
python --version
unset PYENV_VERSION
# PYENV_VERSIONを空にしたので、これはエラーになる
python --version

つまり、export PYENV_VERSION=バージョンpyenv shellと同じ意味合いになるということです

参考:
Ubuntu 24.04 LTS なので Ubuntu Budgie を使う
https://qiita.com/tetutaro/items/594629004f73c182b6ff

Ubuntuにpyenvをインストールする
https://qiita.com/middle_aged_rookie_programmer/items/0eb574e92a52c923e7ec


scrcpyのインストール

Android端末の画面をそのままコピーしてUbuntu上で操作できるようにするツール。かなり便利。
snap版のほうが新しいので、例によってsnap版のをインストールすると良い(権限設定は忘れずに)

また、Android端末側はUSBデバッグを有効にするのと、初回接続時はこのPCからの接続を許可するか?の問答があるので設定をすること。

$ sudo snap install scrcpy

OBSのインストール

例によってflatpak版をインストール

1.公式からFlatpakをダウンロード
2.ファイルマネージャー等で開く
3.プラグインも全部入れる
4.普通に起動

Webカメラが動作できて録画できることまでは確認。ただし配信は未確認(TwichかTwitterでの配信で問題ある環境があるとか?)
v4l2関連でエラーが出るかもしれないらしい(自分の環境では出ず)

その時はこれをすると良いとのこと

$ apt install v4l-utils libv4l-dev

barrierについて

wayland環境は未対応なので注意すること。よって、gdm3のwaylandは外しておくこと。
xorg環境でないと動きません。

Ubuntuに入っている2.4系でいけました

$ sudo apt install barrier

barriercの自動実行について

電源投入時にBarriercも自動実行させたいときはgdm3の設定が必要になる。
lightdmのときと違い、gdm3の設定はなかなかに面倒
なお、各種設定をする前に一度普通にbarrierを起動して最初の環境設定はしておかないといけないようですさらに以下設定例は--disable-cryptoをつけて暗号化無効にしているので、暗号化有効の場合はコマンドが異なるので注意

参考:
http://masaoo.blogspot.com/2021/07/ubuntu-2004-gdm-synergyc.html

/usr/share/gdm/greeter/autostart/barrierc.desktopを新規作成

[Desktop Entry]
Type=Application
Name=barrierc
Exec=/usr/bin/barrierc -f --no-tray --debug INFO --name サーバ名 --disable-crypto [サーバIP]:ポート番号
NoDisplay=true
X-GNOME-AutoRestart=true
$ cd /etc/gdm3/PostLogin
$ sudo cp Default.sample Default

/etc/gdm3/PostLogin/Defaultを編集

#!/bin/sh
#
# Note: this is a sample and will not be run as is.  Change the name of this
# file to <gdmconfdir>/PostLogin/Default for this script to be run.  This
# script will be run before any setup is run on behalf of the user and is
# useful if you for example need to do some setup to create a home directory
# for the user or something like that.  $HOME, $LOGIN and such will all be
# set appropriately and this script is run as root.

killall barrierc

/etc/gdm3/PostSession/Defaultを編集

#!/bin/sh

/usr/bin/killall barrierc
while[ $(pgrep -x barrierc) ]; do sleep 0.1; done

xauthfile=$(ps aux |grep Xauth | grep '^root' | grep -oP '\-auth \K[\w/]+')
export DISPLAY=:0
export XAUTHORITY=${xauthfile}

/usr/bin/barrierc -f --no-tray --debug INFO --name サーバ名 --disable-crypto [サーバIP]:ポート番号

exit 0

ログイン後に自動起動させたいので以下のようにする

$ cd ~/
$ mkdir bin
$ cd bin
$ touch start-barrierc.sh
$ chmod 775 start-barrierc.sh

start-barrierc.shを編集

#!/bin/sh
/usr/bin/killall barrierc
while [ $(pgrep -x barrierc) ]; do sleep 0.1; done
/usr/bin/barrierc -f --no-tray --debug INFO --name サーバ名 --disable-crypto [サーバIP]:ポート番号

あとは、このstart-barrierc.shをUbuntuの「Startup Applications」(システムツールの自動起動するアプリケーション、またはStartup Applications)で指定してあげればOK


hugoのインストール

最新が0.133.1なので最新をインストールする。
※前提条件:Golangを入れておくこと

0.すでにHugoを入れてしまっている場合はアンインストール

$ sudo apt remove hugo

1.ここから最新のdebを落とす(extend付きが良い)
https://github.com/gohugoio/hugo/releases/

2.以下コマンドでインストール。/usr/localにインストールされる

$ sudo dpkg -i ./hugo_extended_0.133.1_linux-amd64.deb

3.確認

$ hugo version
hugo v0.133.1-47d00202e7e61769ce4d14691e43b27852c9cce4+extended linux/amd64 BuildDate=2024-08-26T13:58:46Z VendorInfo=gohugoio
$ which hugo
/usr/local/bin/hugo

ファイル単位での完全消去

消す前に3度ランダムデータを書いてから消すあれ
rmの変わりにshredを使うのもいいが事故ると困るので「File Shredder」を使うと良い。
Flatpakでのみ存在しているのでflatpakをセットアップの後、アプリセンターから「Shredder」を検索してインストール。


ディスクの完全消去

Ubuntuに限らずLinuxにはcoreutilsにshredというコマンドがある。
NSA方式(3度ランダムデータ書く)でディスクを完全消去ができる

$ sudo shred -uvz <ファイルシステム名>

全領域に対して3回ランダムデータを書くのでかなり時間がかかる。
実施の際は色々確認した上で、UbuntuのLiveUSBにも入っているのでLiveUSBからやったほうがいいかもしれない。


UEFIが有効になっているようなPCでBIOS画面に入りたい

UEFIなPCにUbuntuを入れて電源を入れるとUEFI BIOSの設定によっては間髪入れずOS起動の画面になり、grubを出さないように設定している場合はgrubからUEFI画面に入ることもできないため、一体どうやってBIOS設定画面に入るんだこれみたいな感じになり途方に暮れますがそんなときはこれをすると良いそうな

$ sudo systemctl reboot --firmware-setup

これを実行すると再起動して、すぐさまUEFIなBIOSに入れます。(最近のWindowsで言うところの[システム]→[回復]からの[トラブルシューティング]のあれみたいなもんですな)
めでたしめでたし。
(なお、poweroffコマンドもrebootコマンドも実体はsystemctlだったりします)


Stable Diffusion Web UI(AUTOMATIC1111,A1111)を動かす

画像生成AIのアレです。
最近何かと騒がしているStable Diffusionですが、素の実装ではコマンドラインだけだったり簡単には動かしにくいものになっています。
ということでフロントエンドをかぶせて、ブラウザ上から実行できあたかもGUIアプリとして利用できるようにしたのが、Stable Diffusion Web UI(AUTOMATIC1111)となります。
ubuntu 24.04ではA1111が使用しているPythonのバージョンが古いものが必要なため、ここが鬼門になります。
以下、順を追って説明します


GPU用にnvidiaのドライバをインストール(RTX30xxや40xxの場合)

Ubuntuのインストール時にNvidiaなどのサードパーティ用ドライバをインストールするを選択していれば、特に何もすることはなくNvidiaのドライバが当たるのでそのままで問題ないです。
もし入っていなければ「追加のドライバー」で出てくる最新のドライバーでOKです。
「nouveau」ドライバでは流石に動かないので気をつけましょう


必要なパッケージをインストール

以下コマンドで必要なものをインストールします。gitは言わずもがなですが、google-perftoolsはメモリリーク避けです

$ sudo apt install git google-perftools 

A1111-WebUIをGithubから取得

以下コマンドでCloneします

$ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

pyenv類のインストールをしてPython 3.10.6の環境を用意する

Ubuntu 22.04のときはvenvがあれば特に何もしなくても動かすことができたのですが、Ubuntu 24.04になってからUbuntuで使用しているPythonのバージョンが3.12系列になってしまいました。
A1111-WebUIのトラブルシューティングのページには、無慈悲にもこんなことが書かれています
The program is tested to work on Python 3.10.6. Don’t use other versions unless you are looking for trouble.
はい、太文字です。3.10.6以外はサポートしないぞという強い気持ちが感じ取られたかと思います

というわけで、何が何でも3.10.6で動かさないといけないようです。(ubuntu22.04は3.10.12でサブマイナーが違うけど一応動いていた)
すでに「ubuntu 24.04のPython環境について」にUbuntu 24.04にPython3.10.6をシステムに影響を与えることなく共存させる方法を書いていますが、検索でここだけを見ている人のために、改めて手順をイチから書きたいと思います。
あと無理やりPythonの3.10.6を入れるのは絶対にだめです。PythonはUbuntuのシステムでも大いに利用しており、勝手にシステムが使用しているPythonを消したり、バージョンを変えると色んな所に影響が出てしまい最悪Ubuntuの再インストール行きになります。。。

これには複数のPythonバージョンを共存出来るpyenvというツールを入れます。
以下コマンドを入れてpyenvに必要なパッケージをインストールします

$ sudo apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

pyenvとその周辺をgithubから取って着ます

$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ git clone https://github.com/pyenv/pyenv-update.git ~/.pyenv/plugins/pyenv-update

これで、ユーザのホームディレクトリの.pyenvに必要なものが入ります
その後githubのpyenvの説明通りに.bashrcに追記します
以下のコマンドをそのまま入力しても.bashrcに追記できます

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc

(環境によっては.profileにも書く必要はあるかもしれません。)

ちなみにこれを行った後の.bashrcは次のようになります(最終行の3行が↑のコマンドで追記した追加部分です)

...
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

これをした後で一旦ログアウトするか再起動してください。その後、以下コマンドでPythonの3.10.6をインストール

$ pyenv install 3.10.6

指定バージョンがビルドされて~/.pyenv以下にインストールされます。
なお、この状態ではまだ使えず単にビルドしただけなので次のように言われてしまいます

$ python --version
pyenv: python: command not found

The `python' command exists in these Python versions:
  3.10.6

Note: See 'pyenv help global' for tips on allowing both
      python2 and python3 to be found.
$

なので、次のpyenv shellコマンドで使えるかどうか確認します

$ pyenv shell 3.10.6
$ python --version
Python 3.10.6

無事にPython 3.10.6が動くようになりました。なお、pyenv shellはこのシェル(コマンドウィンドウ)だけで動作させることができるpythonを指定することができます。
(pyenv globalでそのユーザだけを変えることもできるのですが、UbuntuではPythonがシステムで以外なところで使用されていたりするのでpyenv globalは出来るだけせずに古いpythonを使うときは逐一pyenv shellをしたほうが無難です)
ですが、今回はあくまで動作確認用です。

pyenv shellは使わず、webui-user.shを編集する方法を使います。

A1111-webUIのwebui-user.shを編集

stable-diffusion-webuiにあるwebui-user.shの頭に以下を追記します

# pyenv version (= pyenv shell 3.10.6)
export PYENV_VERSION=3.10.6

これは内容的にpyenv shell 3.10.6とやってることは同じです。
つまり、毎回シェルを開いてA1111 webuiを起動するときにpyenv shell 3.10.6と打たなくても済むようになります。

参考→Is there a preferred way to use pyenv in a shell script? #492

webuiを実行

ここまでできたら

$ cd stable-diffusion-webui
$ ./webui.sh --listen --port 7860 --allow-code --xformers --enable-insecure-extension-access --api

これでpytorchなど必要なものがインストールされ、 http://0.0.0.0:7860 に接続すればWebUIの画面が出ます。


ComfyUIを動かす

画像生成AIのアレその2です。
ローカル画像生成AI界隈(?)で定番のアプリはおおよそAutomatic 1111 WebUIとComfyUIで二分しており、片割れのほうになります
Automatic 1111(以後A1111とします)がダイアログのようなページのような普通に考えそうなGUIに対して、ComfyUIは機能ごとに箱があってそれらに線をつなげて(ノード)実現していくというような、よくあるノードベースのGUIになっています。

ノードベースということで、やや上級者向けになっています。
PythonでDiffuserを直接触って実行することを考えるとノードをGUIでつなげて色んな機能を実現できるわけで、生成が極まってくるとこちらのほうが良い…ということもあり、生成AIの仕組みの学習用途だとこちらのほうがいいのかもしれません。

ノードをプログラミングでいう「関数」と例えると、実質Stablediffusion用のノーコードツールとして捉えることができるかなと思います。

インストール手順は以下のとおりです(以下はGPUがnvidiaの場合)
ubuntu 24.04の標準であるPython 3.12の環境でも動いているので、A1111のようなPython 3.10環境を入れる複雑な手段を使わなくても良いです
ただ、venvの環境は最低でも作っておいたほうが無難です

  1. GPU用にnvidiaのドライバを入れます。
    この辺はA1111と同じなので略

  2. Python類を入れる

最低でもvenvは必要なので入れておきます

$ sudo apt install python3-pip python3-venv
  1. ComfyUIのソースをgithubから取ってくる
$ git clone https://github.com/comfyanonymous/ComfyUI.git

ComfyUIはA1111とは違い常に最新版を使うことが推奨されています
なにか問題があれば自分でgitを使って手戻りしないと行けないかもしれませんが、そのあたりはきっちり管理されてるようで基本そんなことは無いかなといった感じです

  1. venv環境の設定と依存パッケージをvenv環境に入れる
    A1111はこの辺を自動でやってくれますが、ComfyUIは自分でする必要があります。以下のようにするとOK
$ cd ComfyUI
$ python3 -m venv ./venv 
$ source venv/bin/activate
$ pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121
$ pip install -r requirements.txt
$ deactivate

まずvenvの環境をComfyUI/venvに作ってそこにComfyUIで使うためだけのPytorchなど色々入れています。
venvの環境で行うため、ホストUbuntuの環境を汚さなくてすみます。
UbuntuはPythonで他のアプリなんかにも使われていることが結構あるので、野良のものを入れる場合はできるだけvenv環境下でやったほうがいいでしょう。
venv環境から抜ける場合はdeactivateで抜けます。

  1. 実行
    venv環境に入ってから実行です。A1111だとあちらが用意してくれているシェルスクリプトで一発で動きますが、ComfyUIはひと手間かける必要があります
$ cd ComfyUI
$ source venv/bin/activate
$ python main.py --listen

これで http://0.0.0.0:8188 に接続すればComfyUIの画面が出ます。
入れている拡張機能によってはもしかしたらPython 3.12ではその拡張機能だけは動かないかもしれません。その場合はpyenvを使う方法で3.10に落とす必要があるかもしれませんね

・拡張機能マネージャ(ComfyUI-Manager)の入れ方

ワークフロー(ノードのつなぎかたのレシピなど)は公開されているのですが、たいていの場合はなんらかの拡張機能が使われていてそのままでは使えないパターンが多いです。
人のワークフローから使用されている拡張機能を探してgit cloneで取ってきて…となるとかなり面倒な作業になるのでComfyUI用の拡張機能マネージャこと「ComfyUI-Manager」を入れることが推奨されています。

以下手順で入れます

$ cd ComfyUI/custom_nodes
$ git clone https://github.com/ltdrdata/ComfyUI-Manager.git

Cloneできたら、ComfyUIをCtrl+Cなんかで終了させて再起動します。
画面右端のバーに「Manager」の項目ができるのでそこから拡張機能をインストールしたり、足りない拡張機能をインストールすることができます。


共有する 共有用にコピー