完全には解消していないが、とりあえず日本語が打てるようになったので記す。
確認環境
Ubuntu 24.04.3 LTS
起きていた事象
Ubuntu Serverとして導入した環境をUbuntu Desktop(GNOME)に置き換え、Xubuntu Desktopにマイグレーションしたところ、Ubuntu Desktopでは問題なかった日本語入力ができなくなった。
状況
IbusとMozcが自動起動せず、手動で起動させても日本語が打てず、systemctl --user show-environment
を叩いたときに以下の内容が出る状況だった。
HOME=/home/hoge
LANG=ja_JP.UTF-8
LOGNAME=hoge
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
SHELL=/usr/bin/zsh
USER=hoge
XDG_RUNTIME_DIR=/run/user/1000
GTK_MODULES=gail:atk-bridge
QT_ACCESSIBILITY=1
XDG_DATA_DIRS=/usr/local/share/:/usr/share/:/var/lib/snapd/desktop
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
DISPLAY=:10.0
GSM_SKIP_SSH_AGENT_WORKAROUND=true
SSH_AUTH_SOCK=/tmp/ssh-80h84ldKtdNU/agent.2702
XAUTHLOCALHOSTNAME=
参考までに正常に動作する環境では以下の出力となる。こちらはUbuntu Desktop→Xubuntu Desktopと辿ってきており、Server由来要素がない環境だ。
HOME=/home/hoge
LANG=ja_JP.UTF-8
LOGNAME=hoge
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
SHELL=/usr/bin/zsh
USER=hoge
XDG_RUNTIME_DIR=/run/user/1000
GTK_MODULES=gail:atk-bridge
QT_ACCESSIBILITY=1
XDG_DATA_DIRS=/usr/share/xfce4:/usr/share/xubuntu:/usr/share/gnome:/usr/local/share:/usr/share:/var/lib/snapd/desktop
CLUTTER_BACKEND=x11
CLUTTER_IM_MODULE=ibus
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
DEBUGINFOD_URLS=$'https://debuginfod.ubuntu.com '
DESKTOP_SESSION=xubuntu
DISPLAY=:0
GDMSESSION=xubuntu
GDM_LANG=ja_JP
GPG_AGENT_INFO=/run/user/1000/gnupg/S.gpg-agent:0:1
GSM_SKIP_SSH_AGENT_WORKAROUND=true
GTK_IM_MODULE=ibus
GTK_OVERLAY_SCROLLING=0
IM_CONFIG_PHASE=1
LANGUAGE=ja_JP
PWD=/home/hoge
QT_IM_MODULE=ibus
QT_QPA_PLATFORMTHEME=gtk2
SHLVL=0
SSH_AUTH_SOCK=/run/user/1000/gnupg/S.gpg-agent.ssh
XAUTHLOCALHOSTNAME=
XAUTHORITY=/home/hoge/.Xauthority
XDG_CONFIG_DIRS=/etc/xdg/xdg-xubuntu:/etc/xdg
XDG_CURRENT_DESKTOP=XFCE
XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/hoge
XDG_SESSION_CLASS=user
XDG_SESSION_DESKTOP=xubuntu
XDG_SESSION_TYPE=x11
XMODIFIERS=@im=ibus
_=/usr/bin/dbus-update-activation-environment
対処法
/etc/environment
に以下の内容を追記し、OS起動ごとにWhinsker MenuからIbusの設定を叩いて起動させることにした。自動起動の実現は結構面倒そうだったので試していない。
GTK_IM_MODULE=ibus
QT_IM_MODULE=ibus
XMODIFIERS=@im=ibus
あとがき
本来あるべき姿で起動させたいが方法が全くわかっていないのが厳しい…。何より環境変数が圧倒的に足りていないので、色々不都合が起きてそうだ。
まぁ当該端末をデスクトップユースで使うことは滅多にないのでいいっちゃいいのだが…。
コネクタを傷めないための備忘録。
死ぬほど硬いのでなかなか抜けなかったり、挿したつもりが刺さっていなかったりする。
抜き方
こう刺さっている場合、手前の凹の出っ張り部分に爪楊枝を差し込み、てこの原理で持ち上げるとロックが外れるので、この状態で紐を真っすぐに引っ張る。
引っ張るだけで抜ける場合は別にやらなくてよい。
挿し方
まず刺さっているかどうかの確認方法。確認環境はUbuntu 24.04.3 LTS。
ethtool enp1s0f0np0
の出力に以下の内容が含まれることを確認Speed: Unknown!
Duplex: Unknown! (255)
Link detected: no- 以下のコマンドでカーネルレベルで抜けていることを確認
sudo dmesg | grep -i 'mlx5' | grep -i 'Cable unplugged'
- NICのコネクタのランプが点灯していなければ挿しなおす
ハマったので残しておく。
前提条件
- GitHubにMastodon本家をForkしたリポジトリがあり、そこをベースに運用している。
git remote -v
の状態が以下の通りで、origin/mainが本番運用ブランチ。mastodon https://github.com/mastodon/mastodon.git (fetch) mastodon https://github.com/mastodon/mastodon.git (push) origin https://github.com/Lycolia/lycodon.git (fetch) origin https://github.com/Lycolia/lycodon.git (push)
やり方
- マージブランチを作る
git checkout -b merge-latest
- 本家を取ってくる
git fech mastodon
- マージブランチにマージする
git merge mastodon/main
- セットアップする
# swich user sudo su - mastodon # install bundle install yarn install # DBがアカンことがあるので叩いておく RAILS_ENV=production bundle exec rails db:migrate # いつものリビルド RAILS_ENV=production bundle exec rails assets:clobber RAILS_ENV=production bundle exec rails assets:precompile exit # 再起動 sudo systemctl restart mastodon-web mastodon-sidekiq mastodon-streaming
- 動作確認OKなら
git push
してGitHub上で自分のところのmainにマージする。デフォルトでは本家に向くので注意 - もう一度、前述4番のセットアップコマンド一式を流し、問題なければ終わり
トラブルシュート
正常に動いていない場合
ジャーナルを見てエラー原因を特定する。新規要素がらみのパラメーターが出てたらDBが怪しいのでRAILS_ENV=production bundle exec rails db:migrate
で直る可能性がある。
sudo journalctl -u mastodon-web -f
なんか昔のやり方が使えなくなってたので調べたメモ。
確認環境
Env | Ver |
---|---|
OS | Ubuntu 24.04.3 LTS |
Docker | version 28.1.1, build 4eba377 |
Docker Compose | v2.35.1 |
Mastodonのバージョン | v4.5.0-alpha.2 |
Mastodonのコミットハッシュ | 06803422da3794538cd9cd5c7ccd61a0694ef921 |
手順
DEVELOPMENT.md#dockerの手順通りにやると行ける。
docker compose -f .devcontainer/compose.yaml up -d
docker compose -f .devcontainer/compose.yaml exec app bin/setup
docker compose -f .devcontainer/compose.yaml exec app bin/dev
コンテナへのアタッチ方法
# 方法1
docker compose -f .devcontainer/compose.yaml exec app zsh
# 方法2
cd .devcontainer
docker compose exec app zsh
VSCodeがあるならDockerやRemoteほげほげ系の拡張を使い、devcontainer-appにAttach Shellしてもよい。
検証ユーザーの作成
- 次のコマンドでユーザーを作る
./bin/tootctl accounts create hoge --email hoge@example.com --confirmed
- ユーザーの承認を行い、必要に応じてパスワードを使いやすいものに変更する
rails console user = Account.find_by(username: 'hoge').user user.approve! # PW変更ここから user.password = 'password' user.skip_confirmation! # PW変更ここまで user.save! quit
フロントエンドのビルドとサーバー起動
bin/rails assets:precompile
bin/dev
トラブルシューティング
localhostではアクセスできるが、マシンのホスト名やhoge.testのようなローカルドメインでアクセスできない
.env.development
にALTERNATE_DOMAINS=hoge.test
の行を追加することで他のドメインでもアクセスできる。
この設定があるとMastodonを別環境で動かしててリモートからドメインアクセスする場合に便利。
ActiveRecord::PendingMigrationErrorなど、ActiveRecord関係のエラーが出る
コンテナの中でrails db:setup
を叩くことで解決する。
Unable to load application: NameError: uninitialized constant LetterOpenerWebというエラーが出る
リポジトリルートにあるdocker-compose.yml
を使うと発生するので、.devcontainer/compose.yaml
を使う事で解決する。
あとがき
検証用にバニラなMastodon環境が欲しくて作ってみたが昔と変わっていて地味にハマった…。
こんな感じにフォーカスが当たるとOS標準の枠が出て、矢印キーの左右で選択状態を切り替えられる<input type="radio" />
要素の作り方。
大まかには<label><input type="radio" /></label>
の構造にして、UI上はラベルを疑似要素的に表示し、ラジオボタン本体はUI上見えなくするが、display: none;
にせず、画面に残すことによってタブ遷移できるフォーカス可能要素として設計する内容。
サンプルコード
CSS
/* ラジオボタンを等間隔に整列し、左右に余計な空白を持たせない */
.radio-container {
display: flex;
column-gap: 0.25rem;
}
.hidden-radio {
/* チェックを消す */
appearance: none;
/* 非推奨要素を使っているが、iOS Safari対策 */
position: absolute;
clip: rect(0, 0, 0, 0);
pointer-events: none;
/* デフォルトマージンがチェックボックスの位置にあるので消す */
margin: 0;
}
.radio-label {
/* 文字列要素を綺麗に中央寄せする */
display: flex;
justify-content: center;
align-items: center;
/* 枠装飾、基本的にフォーカス枠が角丸であり、違和感がないようにborderも角丸にしておく */
padding: 5px;
border: 1px solid #60bce9;
border-radius: 4px;
/* 見かけ上ボタンなのでカーソルをボタン用にする */
cursor: pointer;
}
/* ラジオチェック時にラベルの背景色を変化させる */
.radio-label:has(.hidden-radio:checked) {
background-color: #60bce9;
}
/* ラジオフォーカス時にラベルのフォーカス枠を出す */
.radio-label:has(.hidden-radio:checked):focus-within {
outline: auto;
}
HTML
<form>
<div class="radio-container">
<label class="radio-label">
<input name="r2" type="radio" class="hidden-radio" value="1" checked />
<span>道明寺</span>
</label>
<label class="radio-label">
<input name="r2" type="radio" class="hidden-radio" value="2" />
<span>長命寺</span>
</label>
</div>
</form>