nplの小部屋 (original) (raw)
「中古のSurface Pro 6を入手したものの、Windows版Inkscapeが想像以上に重かったためWSL版Ubuntuをインストールした」というメモ。
WSL Ubuntuをインストール
wsl --install
再起動を要求される
再起動後、ユーザー名とパスワードの設定を要求されるので入力する。
neofetch
でUbuntu 22.04 LTSがインストールされていることが確認できる。
sudo apt update sudo apt upgrade -y sudo apt install neofetch -y
(いつのまにかneofetch
が開発終了していた)
Windows 11のスタートメニューにInkscape(Ubuntu)が追加されていることを確認
Inkscapeをインストール
ただAPTコマンドを入力するのみ。
sudo apt install inkscape -y
Windows 11のスタートメニューにInkscape(Ubuntu)が追加されていることを確認
日本語フォントをインストールして適用する
なんともいえないフォールバックフォント(中国)が適用されていたためざっくりNoto Fonts CJK JPに変更。
Noto Fontsのインストール
sudo apt install fonts-noto-cjk-extra -y
Noto Fontsの存在証明
fc-list | grep "Noto" | grep "JP"
テキストエディタを開く
sudo nano /etc/fonts/local.conf
下記を記述。
sans Noto Sans CJK JP serif Noto Serif CJK JP sans-serif Noto Sans CJK JP mono Noto Sans Mono CJK JPfc-cache -f
不具合
リストメニューが画面外に消えてしまうことがある(右下にメニューボックスなどで要注意)。
モニターに接続してウィンドウの表示可能領域を広げるか、ウィンドウの前画面状態を解除して可能な限り縮めてから開く…などの対応が必要になる。
結論
動作はすこしカクカクしているがWindows版に比べれば快適な動作になった。どうしてこうなった。
Windows 11上のWSL UbuntuでInkscapeを動かしている様子
追記
将来のため(GIMPとか)にもっと日本語化を厳密に行いたい場合はこの辺を読むといいかもしれない。
(◕‿‿◕) < わけがわからないよなお筆者はまどマギをよく知らない
Ubuntu 24.04を試したかっただけなのに
もうすぐUbuntu 24.04 LTSリリースの季節ということで、本来はUbuntu 24.04の開発版を触ってみる予定でした。
が、5GB以上あるISOファイルが何故か4GBでダウンロードが止まったり、Vivaldiブラウザがダウンロードの再開操作を受け付けず1からダウンロードし直そうとしたり(wget -c
で解決)、Regolith Desktopが認証ウィンドウを表示してくれなかったり(GNOMEに移動して解決)と、準備段階からしてグダグダな状態が続いていました。
そしていざUbuntu 24.04が書き込まれたUSBメモリを空き状態のノートパソコンに挿してみたところ、Ubuntu自体起動しないという問題に直面して大きなショックを受けたため、気分直しにUbuntu 23.10を入れることにしました。
Ubuntu 23.10をインストールするのは今回が初めてです。
ibusを蹴ってfcitx5を入れて終わる予定だった
個人的にはUbuntuにおけるibusの体験があまり良くなく(Ctrl+Backspaceをすると即クラッシュとか)、Wayland上で日本語入力するならFcitx 5の方がいいという曖昧な印象でFcitx 5を使用するつもりでいました。
とりあえず以下のコマンドでFcitx 5のインストールと切り替え操作を行いました。
sudo apt install fcitx5-mozc im-config -n fcitx5
本来であれば再起動後にはFcitx 5を利用して普通に日本語入力ができるはずでした。
が…
Snapか…
起動後、Fcitx 5が起動していることを確認し、端末上でも日本語入力ができることを確認していました。
が、その後Firefoxを開いたところ、日本語入力ができなくなっていることに気が付きました。
この時点で内心「Snapか…」という思い初めていました。
重症患者がいた
直後にもう一つのSnapアプリケーションである「アプリセンター」を開いたところ、こちらは日本語入力ができないどころか、Fcitx 5が起動している状態だと文字入力そのものができないという事態に陥っており、この時点でUbuntu24.04インストール失敗の仕切り直しという気分ではなくなっていました。
AppArmorか…
この問題を調べるため、Firefoxを端末で起動してみたところ、起動直後から入力に関する問題がエラーとして表示されていました。
Create input context failed: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: An AppArmor policy prevents this sender from sending this message to this recipient; type="method_call", sender=":1.317" (uid=1000 pid=68181 comm="/snap/firefox/3836/usr/lib/firefox/firefox " label="/snap/firefox/3836/usr/lib/firefox/firefox (enforce)") interface="org.freedesktop.IBus" member="CreateInputContext" error name="(unset)" requested_reply="0" destination="org.freedesktop.IBus" (uid=1000 pid=16975 comm="fcitx5 -d " label="unconfined").
アプリセンターでも同様のログが表示されていた他、キーを押す毎に
ibus_im_context_filter_keypress: assertion 'ibusimcontext->cancellable != NU++ || ibus_bus_is_connected (_bus) == FALSE' failed
というエラーが吐き出されていました。
結論を焦った筆者
※ここには盛大な勘違いが記載されているので畳んでいます。
情報不足
このエラーについてDuckDuckGoで調べてもFirefoxを公式バイナリ版にする話やあまり関係ない内容のみであり、Twitter(現X)で同様の報告は3件しかありませんでした(そもそもFcitx 5に切り替えたユーザーが少ない?)。
多分無闇にやってはいけない
このときの自分は問題の解決に対する気力はなくなっていたため、AppArmorを無効にすることで一時的解決を図りました。
gihyo.jpの記事を参考に以下のコマンドを実行して再起動しました。
sudo systemctl stop apparmor.service sudo systemctl disable apparmor.service
再起動後、再びSnapアプリを起動してみたところ、無事Fcitx 5で入力をすることができました。
真相は闇の中へ
しばらくしてから、この問題について(勉強も兼ねて)バグ報告をしようと、以下のコマンドで有効にしなおしました。
sudo systemctl enable apparmor.service
しかし、困ったことに、再起動後には同様の手順を踏んでも、文字入力ができないという問題は解消されてしまい、エラーも発生しなくなっていました。
結論?
何もしてないのに壊れた後、大したこともしてないのに直ってしまった。
「結論とは…?」と疑問に思うような内容ですが、「こんなことがあった」という備忘録です。
筆者がアホだった
筆者は記事作成前、雑な調査でAppArmorを無効にしたことで問題を解決したつもりになっていましたが、もう一度Ubuntu 23.10を入れたときに再発し、AppArmorを無効にしても直らなかったので再調査をしたところ、非常にかんたんな方法で修正することができました。
sudo apt autoremove ibus-mozc
…競合ですね。
結論(再)
fcitx5入れたらibusを吹き飛ばす(か、無効にする)
Misskeyを開いたら、それはミス廃への片道切符。もう、後戻りはできない―――。 …ふざけました。NPLです。
今回はMisskey専用クライアントアプリ「Miria」のSnapパッケージ化の記録を簡単にまとめていきます。
Advent Calenderの季節ですが、特に関係はありません。
注意
この記事の内容はほとんどプログラミングをしたことが無い人間によって書かれています。間違った内容が紛れている可能性が高いため、後述する参考記事や、その他複数の情報を参考にしながら読み進めてください。特に、この記事では解説していない内容も多数存在するため、Snapcraft.ioのドキュメントを参考にしてください
Miriaとは
Miriaは、そらいろ氏が開発した、FlutterベースのMisskeyクライアントアプリです。
Misskeyに特化した機能開発による「複数アカウントのタブ切り替え」や「(初の)MFMの互換表示」などの特徴が存在します。
タブには通常のHTLやLTLに限らず、リスト・アンテナ・チャンネル・ロールなどを割り当てることもできます。また、Misskeyクライアントとしては珍しい_WebViewを使わない_MFM互換表示を利用することができます。
そんなMiriaですが、Flutterをベースに開発されていることから、Android・Windows・iOS/iPadOS/macOSでサポートされています。
そして、Flutter SDKを利用すれば、Linux用アプリを同一のコードでビルドすることができます。
今回は、MiriaをSnapパッケージで利用できるようにするため、snapcarft
に挑戦してみることにしました。
注意:MiriaのSnapパッケージを作成する話であり、現在Snap Storeを検索してもMiriaは存在しません。
Snapパッケージについて
SnapパッケージはUbuntuの開発元Canonicalが推奨しているパッケージです。debパッケージと違い、必要な依存関係を開発元が本体のパッケージにまとめて配布する方式です。snap
コマンドやSnap Store(Snapcraft.io)からパッケージのインストールを行うことができます。
debパッケージやrpmパッケージの方がユーザー数は多いとは思いますが、Flutter公式ドキュメントにSnapパッケージ化の方法が存在することや、Snapcraft側にもドキュメントが揃っていることから、Snapパッケージを選択しました。
Flatpakじゃだめだったの?
日本語記事が少ない時点で諦めました。
一応パッケージ化することはできたものの、仕様の理解が進まなかった故、維持管理に問題のある状態の設定ファイルが出来上がってしまったため、お蔵入りになりました。
参考
この記事の内容のほとんどは、gihyo.jpの「Snapパッケージ入門」を参考にしています。この記事を読む前に、参考記事の方を読むことをオススメします(この記事より詳細なことが書かれており、そちらの方が理解しやすいため)。
MiriaをSnapパッケージ化する
ここでは、Flutter公式ドキュメントに従ったパッケージングを行います。
これからFlutterアプリをSnapパッケージにするときはSnapcraftのドキュメントを読むことをオススメします。(理由)
1, プロジェクトフォルダ内にSnapパッケージ用ファイルを作成する
ここではmiria-snap
ディレクトリをプロジェクトフォルダとして作業を行います。
事前にsnapcraft
をSnapでインストールしておきます。
~$ sudo snap install snapcraft --classic
プロジェクトフォルダに入り、Snapパッケージ作成のためのファイルを追加します。
~$ mkdir miria-snap && cd miria-snap ~/miria-snap$ snapcraft init
これでプロジェクトフォルダ内にsnap
フォルダとsnap/snapcraft.yaml
ファイルが作成されました。
2, snapcraft.yaml
をドキュメントに習って編集する
初期状態のsnapcraft.yaml
の中身はこのようになっています。
name: my-snap-name # you probably want to 'snapcraft register ' base: core22 # the base snap is the execution environment for this snap version: '0.1' # just for humans, typically '1.2+git' or '1.3.2' summary: Single-line elevator pitch for your amazing snap # 79 char long summary description: | This is my-snap's description. You have a paragraph or two to tell the most important story about your snap. Keep it under 100 words though, we live in tweetspace and your description wants to look good in the snap store.
grade: devel # must be 'stable' to release into candidate/stable channels confinement: devmode # use 'strict' once you have the right plugs and slots
parts: my-part: # See 'snapcraft plugins' plugin: nil
まずはこのファイルをFlutterドキュメントに合わせたものに変更します。
- name: my-snap-name # you probably want to 'snapcraft register '
- name: miria-snap
- base: core22 # the base snap is the execution environment for this snap
- base: core18
- version: '0.1' # just for humans, typically '1.2+git' or '1.3.2'
- version: '1.0.13+87'
- summary: Single-line elevator pitch for your amazing snap # 79 char long summary
- summary: Misskey Client for Mobile description: |
- This is my-snap's description. You have a paragraph or two to tell the
- most important story about your snap. Keep it under 100 words though,
- we live in tweetspace and your description wants to look good in the snap
- store.
- Misskey Client App built with Flutter grade: devel # must be 'stable' to release into candidate/stable channels confinement: devmode # use 'strict' once you have the right plugs and slots
parts:
- my-part:
- miria-snap:
See 'snapcraft plugins'
plugin: nil
plugin: flutter
source: https://github.com/shiosyakeyakini-info/miria.git
flutter-target: lib/main.dart
- apps:
- miria-snap:
command: miria
extentions: [flutter-stable]
今はFlutterドキュメントに合わせて
core22
からcore18
に変更していることを覚えておいてください。
基本的に前半部分はアプリの名前や説明欄などを編集しています。
confinement
はユーザーに対するアプリのセキュリティ設定であり、開発中はdevmode
を選択しますが、リリース時にはstrict
で動くようにしなければなりません(ただし、エディターなどのファイルの書き込みの制限を緩める必要のある場合にはclassic
が使用できます)。
parts
では、パッケージに含めるプログラムの追加などを行います。今回の場合、miria-snap
のパーツとして、MiriaのソースコードをGitHubから取得し(source)、Flutterのビルド環境を用意して(plugin)、lib/main.dart
を対象としたビルドを行う(flutter-target)ように記述しています。
apps
では、実際に実行するコマンドの記述などを行います。今回はアプリ名がmiria-snap
であるため、apps:miria-snap:
の並びで作成します。アプリのインストール後に端末からmiria-snap
を入力してアプリを実行することができるようになります。
apps:command:
には、実際に実行されるプログラムのコマンドを入力します。ここではビルドしたmiria
の実行ファイル名"miria
"を入力します。
Flutterはビルド成果物をbuild/linux/x64/release/bundle
以下にlib, data, miria
を生成しますが、snapcraft
はそれらをSnapアプリのフォルダのルートに配置します。つまり、コマンドの内容は{Snapパッケージのフォルダルート}/miria
のような配置になります。
apps:miria:
としてしまった場合、アプリ名とコマンド名が一致せず、端末からの実行時にmiria-snap.miria
と入力しなければならないため、apps
以下の名前とsnapcraft.yaml
先頭のname
は一致するようにします。
apps:miria-snap:extentions:
には、Flutterに関連するplugs
や環境変数などを自動的に追加するためflutter-stableを入力します。
基本的な内容はこれで書き終えたので、このままsnapcraft build
を実行すればSnapパッケージのビルドが開始されます。
ただし、このままではMiriaのビルドは完了しません。
3, 依存関係を追加する
ログを確認すると、Snapパッケージのビルド中の"Miria本体のビルド"が完了できていません。これは依存関係が不足していることが原因です。
Miriaではflutter_secure_storageとmedia_kitが使用されており、ビルド時にはlibsecret-1-dev, libmpb-dev
が、ユーザーの使用時にはlibsecret-1-0, libmpv1
が必要となります。
このため、ビルド専用の依存関係と、Snapパッケージに同梱する用の依存関係を追加します。
依存関係をparts:miria-snap:
以下のそれぞれbuild-packages
とstage-packages
に記述しました。
[...] parts: miria-snap: [...]
- build-packages:
- libsecret-1-dev
- libmpv-dev
- stage-packages:
- libsecret-1-0
- libmpv1
参考1: flutter_secure_storage | Flutter Package libjsoncpp
は最近のバージョンから不要になりました。
参考2: media_kit | Dart Package mpv
をstage-packages
に含めるとMPVプレーヤーがデスクトップアプリとして一緒にインストールされてしまうのでlibmpv
のみで十分です。
これで再度snapcraft build
を実行すると、Miria本体のビルドまで実行することができます。
これ以降のステップに進むには、一旦生成されたSnapパッケージをインストールして、動作を確認しながら進めていくことをおすすめします。
~/miria-snap$ sudo snap install --dangerous --devmode ./miria-snap_1.0.13+87_amd64.snap
4, セキュリティレベルをstrict
にする
ある程度動くものになってきたため、今度はconfinement
をdevmode
からstrict
に切り替え、必要な機能の洗い出しを行います。
[...]
- confinement: devmode
- confinement: strict
Snapでは必要な機能のみをplug
で接続する必要があります。
extentions
にflutter-stable
を設定しているので、desktop, desktop-legacy, gsettings, opengl, wayland, x11
は、自動的に接続されます。
この時点で再度ビルドを実行し、すべての機能が動作するか確認します。Miriaの場合、"動画の音声が聞こえない"、"ログイン情報が保存されていない"という、2つの不具合がみつかりました。
音声の再生は、audio-playback
というプラグ、ログイン情報の保存はpassword-manager-service
というプラグによって管理されているため、この2つをapps:
以下に追加します。
[...] apps: [...]
- plugs:
- audio-playback
- password-manager-service
参考: The flutter extension | Snapcraft documentation
ただし、password-manager-service
は機密情報を扱うプラグであるため、アプリをインストールしても自動ではプラグが機能しないようになっています。 ユーザーにアプリを公開する前に、password-manager-service
へのアクセスを許可する操作を行うよう告知することを忘れないでください。
$ sudo snap connect miria-snap:password-manager-service
参考: Snapcraft.yaml reference | Snapcraft documentation
5, ファイル選択ダイアログを表示できるようにする
Miriaには画像ファイルをノートに添付して投稿する機能がありますが、SnapにしたMiriaではファイル選択のメニューが表示されなくなっています。
Miriaのファイル選択機能はflutter_file_pickerによって呼び出されていますが、flutter_file_picker
内部ではzenity --file-selection
(もしくは、qarma
やkdialog
でそれに類するコマンド)を呼び出しています。
Ubuntu Desktop自体にはzenity
が含まれているものの、Snapからは呼び出すことができないため、zenity
をパッケージに含めるようにする必要があります。
FLutterはGTKを使用したアプリであるため
zenity
で統一しました。
[...] parts: [...]
- zenity:
plugin: nil
stage-packages:
- zenity
prime:
- usr/bin/zenity
- usr/share/zenity/*
parts
以下に、miria-snap
とは別にzenity
を作成し、zenity
を用意して、prime
でパッケージに関連するファイルをSnapパッケージに含めるように指定しました。
参考: Inform users with custom dialogs - doc - snapcraft.io
6, デスクトップアイコンを追加する
今のままでは_デスクトップアプリなのにアプリのメニューボタンが存在しない_状態になってしまうので、デスクトップエントリーファイルとアイコン画像を追加します。
デスクトップエントリーファイルとアイコン画像は次のコマンドでsnap/gui
ディレクトリを作成して、そこに追加します。
~/miria-snap $ mkdir -p snap/gui ~/miria-snap $ touch snap/gui/miria-snap.desktop
デスクトップエントリーファイルには以下の内容を追加します。
[Desktop Entry] Version=1.0 Name=Miria Snap GenericName=Misskey Client Type=Application Exec=miria-snap Icon=${SNAP}/meta/gui/miria-snap.png Comment=Misskey client app for mobile (Linux build) Comment[ja]=モバイル向けのMisskeyクライアントアプリ(Linux向けビルド) Keywords=Misskey;Miria;みりあ Terminal=false StartupNotify=false
Exec
にはアプリ名を追加します。Icon
はsnap/gui/mria-snap.png
を使用する場合、snap
以下のファイルはSnapパッケージ作成時に${SNAP}/meta
以下にコピーされるため${SNAP}/meta/gui/miria-png.png
を指定します。
keywords
は、Firefoxのデスクトップエントリーを見たところ、各言語ごとに分ける必要がありそうです(キーワードが多くなければ1つにまとめたままでもいいとは思いますが…)。
7, バージョン情報を自動で取得する
現在はversion
を直接記述しています(version: 1.0.13+87
はこの記事作成時の最新バージョン)が、Snapパッケージビルド時にこのバージョンを手動で書き換えるのは面倒なので、毎回バージョン情報を自動で取得するように変更します。
1, 直接記述されたバージョン情報を削除
[...]
- version: 1.0.13+87
- adopt-info: miria-snap
version
を削除する代わりに、バージョンを取得する処理を行うパーツ名(今回はmiria-snap
)をadopt-info
に追加します。
2, ソースコード取得の処理を上書き
本来自動的に行われるソースコードの取得処理に変更を加えます。
[...] parts: miria-snap:
override-pull: |
snapcraftctl pull
VERSION=$(cat pubspac.yaml | grep "version[:]" | cut -d " " -f 2)
snapcraftctl set-version "$VERSION"
snapcraftctl pull
は本来行われるソースコードの取得処理を行うコマンドです。
VERSION
変数に、pubspac.yaml
に記述されたバージョンを代入して、snapcraftctl set-version
に渡しています。
Miriaでは
flutter pub run cider version
でバージョン情報のみを取得する適切な方法がありますが、この時点ではFlutterのセットアップが済んでいないため利用できません。そのため、cat, grep, cut
を駆使した酷いコードになっています。
参考1: 第660回 自作のsnapパッケージをSnap Storeに公開する | gihyo.jp
参考2: Override build steps | Snapcraft documentation
完成(のはずだった)
これにてリリース可能なMiria Snapパッケージが完成しました。お疲れ様でした。
…で終わらなかった。
core18
からの脱却
ここまで作ってきたSnapパッケージはcore18
というUbuntu 18.04 LTSベースのビルドが行われていました(Snapパッケージビルド時に起動するLXDコンテナもUbuntu 18.04です)。
しかし、Ubuntu 18.04 LTSのサポート期限はリリースから5年の2023年であり、MiriaのSnapパッケージを作成し始めた頃にはサポート終了の直前でした。Snapcraftも同様にcore18
のサポートを終了することは容易に予想でき(そして的中し)たので、Ubuntu 22.04 LTSベースのcore22
に移行する必要があります。
core22
に移行する
core18
からcore22
の間にはいくつか変更点があります。
1, Flutter Extentionの廃止
core18
ではextentions
にflutter-stable
を設定することでplug
などが自動的に接続されていましたが、core22
では用意されていません。
代わりとしてgnomeを選択する必要があります。
flutter-stable
とgnome
のプラグの内容はほとんど同じなので不要だったのかもしれない。
2, snapcraftctl
の廃止
override-pull
やoverride-build
内で処理を上書きするときに、既定の処理を呼び出すsnapcraftctl
が廃止され、代わりにcraftctl
を利用するようになりました。
override-pull
内でsnapcraftctl pull
としていたコマンドやoverride-build
内でsnapcraftctl build
としていたコマンドなどは、どちらもcraftctl default
に置き換えられます。
参考: Using the craftctl tool | Snapcraft documentation
置き換える
上記の2つを置き換えていきます。
extentions
[...] apps: [...]
- extentions: [flutter-stable]
- extentions: [gnome]
上記で記した通り、flutter-stable
をgnome
に置き換えるだけです。使用するplugs
に変更はないのでそのままです。
snapcraftctl
[...] parts: miria-snap: [...]
snapcraftctl pull
VERSION=$(cat pubspac.yaml | grep "version[:]" | cut -d " " -f 2)craftctl default
snapcraft set-version $VERSION
craftctl set version=$VERSION
上記で記したsnapcraftctl pull
→craftctl default
の他、set-version
オプションをset version=<version>
に置き換える必要があります。
これでコマンドの置き換えなどが完了しました。
これにてMiriaのSnapパッケージ化は_一旦_完了です。
まとめ
今回は、MiriaをSnapパッケージにするまでの流れを解説(記録?)しました。
基本的にはgihyo.jpの記事を参考に大まかに内容を理解してから、Snapcraftのドキュメントを参考に詳細を埋めていく形でMiriaをSnapパッケージにすることができました。
作ってみた感想としては、「とりあえずパッケージ化して動くものを作りたい」という面では悪くない選択肢ではないかと思います。
また、「もう少し日本でSnapパッケージを利用する記事増えないかな〜?」と期待しています。
今後
今回はパッケージ化するところ(「とりあえず動くものを作る」段階)まで記事にしましたが、今のままでは_起動時間が長い_ことや_パッケージサイズが200MBとちょと大きい_という問題を抱えているため、これを改善する(「細かい調整」の段階)内容を_時間があれば_まとめていきたいと思います。
Ubuntu Touchを仮想環境で試す方法について調べたことを簡単にまとめていきます。
Ubuntu Touchって何ぞや
Ubuntu Touchとは、Ubuntuの開発元であるCanonicalが、iOSやAndroidに対抗するために作ったモバイルOSです。
現在は開発方針についてなんやかんやあった結果、UBportsが管理しています。
Ubuntu TouchはAndroidのカスタムROMと同じような方法で、対応する端末にインストールすることができます。
Ubuntu Touchの仮想イメージ
開発者向けにUbuntu Touchの仮想環境が提供されていないか、Ubuntu Touchの開発者向けドキュメントを読んだり(ついでに翻訳したり)していたところ、utqemu
という、Ubuntu TouchのQEMU環境が提供されているのを見つけました。
GitHub - ubports/utqemu: Ubuntu touch qemu virtual machine
utqemu
はsnapで提供されています。
とりあえず手元の環境で試す
環境
手順
1, 端末を開き、utqemu
をインストール
sudo snap install utqemu --edge
2, qemu-virgilをインストール
README.mdでインストールする項目として書かれていないものの、インストールする必要があります。
sudo snap install qemu-virgil --devmode
3, 接続
sudo snap connect utqemu:kvm
utqemu create
5, 以下のコマンドで起動
README.mdには「utqemu start
を使え」と書かれていますが、以下のコマンドでなければ起動しないことがIssueで報告されています。
qemu-virgil -enable-kvm -m 2G -device virtio-vga,virgl=on -display sdl,gl=on -netdev user,id=ethernet.0,hostfwd=tcp::10022-:22 -device rtl8139,netdev=ethernet.0 ~/snap/utqemu/common/ubuntu-touch-mainline-generic-amd64.img
ちなみにqemu-virgl
なしだと以下のエラーで止まります。
$ utqemu start qemu-system-x86_64: -device virtio-vga,virgl=on: Property '.virgl' not found
これでUbuntu Touchの仮想イメージが起動します。
ざっくりとした使用感
OSバージョン
どこにもOSのバージョン情報が書かれておらず、いつビルドされたものかもわかりません。
とりあえずTerminalでuname -a
を入力してみたところ、
Linux ubuntu-phablet 4.15.0-142-generic 146~16.04.1-Ubuntu SMP Tue Apr 13 09:27:15 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
と帰ってきました。少なくともUbuntu16.04 LTSベースである模様。
一方、ファイルアプリを開くと、ファイルの作成(最終アクセス?)日は2022年となっています。
2022年にビルドされたものなのでしょうか...?
とりあえずここまで。
追記(10月5日)
一応utqemu
はQEMUのバイナリなどを持っているなので、本当はutqemu
だけで完結するはずのパッケージのようです。
でも、qemuのパスを直接指定して使った結果は以下のとおり…
$ /snap/utqemu/current/usr/bin/qemu-system-x86_64 -enable-kvm -m 2G -device virtio-vga,virgl=on -display sdl,gl=on -netdev user,id=ethernet.0,hostfwd=tcp::10022-:22 -device rtl8139,netdev=ethernet.0 ~/snap/utqemu/common/ubuntu-touch-mainline-generic-amd64.img /snap/utqemu/current/usr/bin/qemu-system-x86_64 -enable-kvm: error while loading shared libraries: libbrlapi.so.0.6: cannot open shared object file: No such file or directory
ライブラリ不足…(ソースコードを見るとstage-packageにちゃんと入ってるので謎)
wiki.misskey.ioで作ったリストですが肝心のWikiが落ちてるのでここにコピーしておきます。多分CCいくつとかのライセンスだと思います。 -> CC-BYでした。
注意:記事の内容は少し古くなり始めているので、元の記事を読むことをオススメします
Misskeyクライアントアプリ一覧
特定のプラットフォームで使えるかどうかだけ書いてあります。App名には各公式サイトURL、Yesの項目にはダウンロードURLが貼ってあります。
なお、「このビッグウェーブに乗り遅れるわけにはいかない!」のノリで書いたのでリンク切れがある場合があります。
App | iOS/iPadOS | Android | Windows | macOS | Linux | Web | Language | Source Code |
---|---|---|---|---|---|---|---|---|
Kaiteki | No | Yes | Yes | No | Yes | Yes | de, el, en, es, fr, he, id, it, ja, lv, pl, ru, zh | Kaiteki-Fedi/Kaiteki on GitHub |
Kimis | Yes | No | No | Yes | No | No | en-US | Lakr233/Kimis on GitHub |
Milktea | No | Yes | No | No | No | No | ja-JP | pantasystem/Milktea on GitHub |
Miria | Yes | Yes | Yes | Yes | Yes | No | ja-KS, ja-OJ | shiosyakeyakini-info/miria on GitHub |
MissCat | Yes | No | No | No | No | No | ja? | YuigaWada/MissCat on GitHub |
MissLI | No | No | No | No | No | Yes | ja? | uboar/missli on GitHub |
MissRirica | Yes | Yes | No | No | No | Yes | en, ja, ko | fruitriin/missRirica-client on GitHub |
PSkey | No | Yes | No | No | No | No | ja-JP | ibuki2003/pskey - GitHub |
SocialHub | Yes | No | No | No | No | No | en, ja | uakihir0/SocialHub on GitHub |
SoraSNS | Yes | No | No | No | No | No | fr, ja, kr, es, zh-CN, zh-TW | - |
Takesama | Yes | Yes | No | No | No | Yes | en, ja | - |
TootRain | No | No | No | Yes | No | No | en, ja | b123400/TootRain on GitHub |
ZonePane | No | Yes | No | No | No | No | ja-JP | - |
※: 開発中のアプリであり、不具合が頻発する可能性があります。
おまけ
特殊な環境下で動くMisskeyクライアントです。ノリが某有名俳優公式サイトのそれ。
App | Target Platdorm | Source Code |
---|---|---|
Citraskey | 3DS browser | GitHub - CyberRex0/citraskey |
misskey-cli | CLI System (Go) | GitHub - mikuta0407/misskey-cli |
Misskey Client for Visual Studio Code | Visual Studio Code | GitHub - mikankari/msky4vscode |
MisT | TUI System (Python) | GitHub - 35enidoi/MisT |
Teramisu | host server: Running Node.js, client: Telnet Client | GitHub - castella-cake/teramisu-server |
vimskey | vim/neovim | GitHub - Allianaab2m/vimskey |
もふきー | Windows 95+ | - |
参考
この記事の更新履歴
2023/07/02 - リンク切れを多数起こしていたため修正、注意事項を追記
2023/07/03 - 特殊なクライアントを追加
2023/07/09 - クライアントを追加
2023/07/10 - 特殊なクライアントを追加
2023/07/12 - 特殊なクライアントを追加
2023/07/13 - wiki.misskey.ioが復旧してた
2023/07/20 - 祝・miria for iOSの正式リリース
2023/07/28 - 祝・miria for Androidの正式リリース
2023/09/05 - クライアントの追加と言語の追加
2023/09/06 - クライアントを追加
2024/02/10 - 一部クライアントを削除、wiki.misskey.ioへの誘導
2024/03/26 - 特殊なクライアントを追加
2024/04/17 - 特殊なクライアントを追加