2026/04/02(木)Windows 11ノートPCセットアップメモ

更新日:
投稿日:

過去にWindows 11 HomeがプリインストールされていたノートPCをXubuntuにして運用していたが、Windowsに戻したくなったので、Windows 11 Homeをクリーンインストールするところからやった時のログ。

実際にやった作業を基に、こうしたらもっとうまくいくのではないかという内容に書き換えているため、上手く行く保証はないほか、実際の作業ではあっちこっち行っていたが、この記事を書くときに似た作業は同じ場所に固めている。

所要時間は三時間程度。

前提

  • 本端末はノートPC(NEC Lavie PC-GN20D72DYEDYH2YAA)
  • 本端末とは別にWindows 11 Proが動いている実機端末が一台ある
  • 過去にWindows 11 Homeがプリインストールされており、マイクロソフトアカウントでもデバイスに表示されている状態
    • 表示されているデバイスは二台あり、片方は別端末
  • Microsoft Office 2019のライセンスがマイクロソフトアカウントのサブスクリプションに二つあり、一つは前述の別端末で利用している

確認環境

Windows 11 Home 25H2(26200.8039)

やったこと

インストールイメージの入手

  1. Microsoft公式のダウンロードサイトを開き、「Windows 11 のインストール メディアを作成する」ツールをダウンロードする
  2. インストールメディアを作成する

OSのインストール

普通にインストールするだけだが、WiFiのところで詰まったので、それは後述のトラブルシューティング参照。

Windows Update

これを最も最初に行う。

理由としては初回のWindows Updateは大規模であり、設定やプリインストールされているアプリケーションが復活するため手戻りを減らすために、最も最初にやっておくべきだ。但しちゃんと検証したわけではないので、仮説である。

Windowsの基礎設定

Windowsの設定で行う各種設定。

  1. システム>ディスプレイでスケーリングを100%にする(拡大/縮小のこと)
  2. システム>クリップボードでクリップボードの履歴を有効化する
  3. Bluetoothとデバイス>キーボードでPrintScreenを使用して画面キャプチャを開くをOFF
  4. Bluetoothとデバイス>タッチパッドで、マウスの接続時にタッチパッドをオフにしないをOFF
  5. Bluetoothとデバイス>タッチパッドで、タップ・スクロールとズーム・3本指ジェスチャ・4本指ジェスチャを右クリックを残して、全て無効化
  6. Bluetoothとデバイス>タッチパッド>高度なジェスチャで全て無効化
  7. 個人用設定>背景で壁紙を変える
  8. 個人用設定>色でモードをカスタム、既定のWindowsモードをダーク、既定のアプリモードをライトにする
  9. 個人用設定>テーマでゴミ箱を非表示にする(前にエクスプローラーにピン止めしておくこと、内容はその他の設定で後述)
  10. 個人用設定>動的ライティングを全て無効化
  11. 個人用設定>ロック画面で背景画像を設定し、トリビアやヒントを表示しないようにし、ロック画面の背景を表示するようにする
  12. 個人用設定>スタートで余計なものを全てオフ
  13. 個人用設定>タスクバーで自動的に隠すようにする
  14. アプリ>インストールされているアプリで不要なアプリケーションを軒並み消す。参考までにここまで絞れた
  15. アプリ>アプリの詳細設定でアプリをアーカイブするをOFF
  16. アプリ>アプリの詳細設定>アプリ実行エイリアスでPython関係をOFFにする
  17. アプリ>スタートアップで余計なものをすべてOFF
  18. アプリ>再開で全てオフ
  19. 時刻と言語>言語と地域>Microsoft IME>全般
    • スペースを常に半角
    • 文字種の種類とセットでひらがな、全角カタカナ、ローマ字を有効にする
  20. 時刻と言語>入力>入力インサイトで入力インサイトをオフにする
  21. プライバシーとセキュリティ>Windowsセキュリティ>アプリとブラウザコントロール>スマートアプロコントロールをOFF
    • OFFにしないとMSYS2のzshが正常に動作しなくなる
マルチディスプレイに関する設定

外部モニタを繋いだ時に行うWindowsの設定。

  1. システム>ディスプレイで「表示画面を拡張する」にする
  2. 個人用設定>タスクバーで複数のディスプレイを使用する場合にタスクバーアプリを表示する場所を「開かれているウィンドウのタスクバー」にする

OneDriveを消す

実際は試行錯誤して消したので、この手順では上手く行かない可能性がある。手順を誤ると復活するので根気が必要。

  1. タスクトレイにいるOneDriveの設定を開き「このPCからリンクを解除する」
  2. OneDriveをアンインストールする
  3. %USERPROFILE%を開き、OneDriveというフォルダの中身を全て%USERPROFILE%に移し、OneDriveフォルダを消す

その他の設定

  1. ドライブのプロパティからインデックスを外す
  2. コンパネ>電源オプションで電源オプションでパフォーマンスが最大になるようにする
  3. コンパネ>電源オプション>電源ボタン
    • 高速スタートアップの無効化
    • 休止状態の有効化
    • バッテリー駆動時
      • 電源ボタン押下:スリープ
      • カバーを閉じたとき:スリープ
    • 電源接続時
      • 電源ボタン押下:スリープ
      • カバーを閉じたとき:何もしない
  4. スタートメニューのビューをグリッドにする
  5. Windows 11のエクスプローラーの右クリックメニューを従来のWindowsと同じ表示形式にする
  6. Windows 11の新しいメモ帳を消して古いメモ帳を使うようにする
  7. ゴミ箱をデスクトップから消し、エクスプローラーのピン止めに移動する
  8. ゴミ箱のプロパティを開き、削除時確認を有効にする
  9. フォルダオプションの全般タブを開き、エクスプローラーで開くを「PC」に設定し、プライバシーを全てOFF
  10. フォルダーオプションの表示タブを開き
    • 開いてるフォルダーまで展開 on
    • 隠しファイルを表示 on
    • 登録されている拡張子は表示しない off
    • 同期プロバイダーの通知を表示する off

.ps1ファイルを使えるようにする

Powershellを管理者権限で開き以下を流す

Set-ExecutionPolicy RemoteSigned

Windows側のアプリケーション導入

ExpLzhのインストール
  1. 公式サイトの更新情報からExplzh for Windows Ver 9.94のインストーラーを落としてインストール[1]
  2. 既存環境から新環境へ設定ファイルを持ってきて適用する。regファイル以外はゴミなので無視してよい
  3. 解凍オプション>基本設定を開きZoneIDを維持する際、確認ダイアログを表示しないをON
Chocolateyのインストール

Powershellを管理者権限で起動して以下を流す。

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

内容的には公式サイトのコピペ。

Gitのインストール
Gpg4Winのインストール

公式サイトから落として入れる。

MSYS2のインストール

MSYS2のセットアップメモ

PowerShell 7のインストール

Windows 11にPowershell 7を入れる

古いPowershellはUTF8やLF改行でコーディングするとまともに扱えなかったり、エラーハンドリングがクソだったりで使いづらいため、こちらのほうが便利。

VSCodeのインストール
  1. 公式サイトからインストーラーを落としてインストール
    • シェルエクステンションを有効化する設定を行うこと
  2. HKEY_CURRENT_USER¥Software¥Microsoft¥Windows¥CurrentVersion¥App Paths¥code.exeを消す
  3. 既存環境のVSCodeでcode --list-extensionsを叩きインストールされている拡張機能の一覧を取得
  4. 上の結果の行頭にcode --install-extension を追記し、次のようなテキストを生成
    code --install-extension 13xforever.language-x86-64-assembly
    code --install-extension 42crunch.vscode-openapi
    code --install-extension anthropic.claude-code
    ...
    
  5. 新環境でVSCodeを開き、このテキストをターミナルに流す
  6. Ctrl+Shift+Pを押下し、「Configure Display Language」を引き出し、日本語設定にする
nvm-windowsのインストール
  1. 公式GitHubのReleaseからインストーラーを落としてインストール
  2. zshで以下を流す
    nvm install lts
    nvm on
    
Edgeの設定移行
  1. Edgeを一度起動する
  2. 既存環境の%USERPROFILE%\AppData\Local\Microsoft\Edge\User Dataの中身をコピーしてくる
  3. 新環境の同じパスに貼り付ける
  4. Microsoftの宣伝機能、おせっかい機能、検索周りは無視されるので一通り設定をチェックしていい感じにする
  5. Edgeのクライアント領域に角丸のフレームが出る問題を解消する
  6. 検索エンジンにhttps://google.com/search?q=%s&udm=14を追加し、既定にする[2]
Thunderbirdのインストールと設定移行
  1. 公式サイトからインストーラーを落としてインストール
  2. 既存環境でThunderbirdを起動し、メニューボタンをクリックし、ヘルプをクリックして、トラブルシューティング情報を開く
  3. プロファイルフォルダーの横にあるフォルダを開くボタンを押す
  4. 中身を全てコピーする
  5. 新環境で同様の手順でプロファイルフォルダを開き、Thunderbirdを終了する
  6. 新環境に既存環境の設定ファイルを貼り付ける
RLoginのインストールと設定移行
  1. 公式サイトからバイナリを落としてくる
  2. 既存環境から設定をエクスポートして新環境でインポートする
Rcloneのインストールと設定

Windows 11でパスフレーズ付きの公開鍵認証SFTPをマウントする

XnViewMPの配置と設定移行

設定ファイルはXnViewMPのプログラムディレクトリ配下にあるものとする。

  1. 既存環境からプログラムフォルダを丸ごと持ってくる
  2. 設定>統合環境からコンテキストメニューにXnViewで開くを追加をONにする
  3. Windowsの設定>アプリ>既定のアプリ>ファイルの種類で規定値を選択する、からjpg, jpeg ,png, bmp, gif辺りを適当に関連付ける
その他のインストールや設定移行
  • JTrim
    • 既存環境からプログラムフォルダを丸ごと持ってくればOK
  • MS Office 2019
    • Microsoft accountを開き、サブスクリプションにいるオフィスをインストールする

トラブルシューティング

Windows OSインストール時にWiFiのドライバがなくて先に進まない

LAN線が挿せない端末ではUSBテザリングをすることで解決できる。

エクスプローラーを開くとクイックアクセスやお気に入り、共有が開く

これが出てくるがドライブの一覧を出したい場合

フォルダオプションで、エクスプローラーで開くを「PC」に設定すると

初期表示をここにできるようになる。

VSCodeでcode --install-extension ...を流すとVSCodeのGUIが起動する

HKEY_CURRENT_USER¥Software¥Microsoft¥Windows¥CurrentVersion¥App Paths¥code.exeを消すと直る。

消費したディスク容量について

クリーンインストール直後の占有容量が38GBで、全セットアップ完了後の占有容量は49GBだった。

バッテリー消費について

バッテリー充電100%時点でコンセントを抜いた時の表示がこれ。いきなり96%になるのはバッテリーがヘタってるのだろうか…?

3時間52分と出ており、電源がなければ使い物にならないレベルである。

あとがき

毎年最低一回は何かしらの理由でWindowsのセットアップをしている気がしているが、お陰で大分洗練されてきた気がしたので、再現性の確保の意味合いも込めて、一度まとめてみたのが本記事である。

ちなみに本記事は出先で、本記事でセットアップしたノートPCのみを使って書いているが、二日掛けて累計で9時間ほど掛けて書いているため、電源がなければ書ききれていなかった。やはりもう少しバッテリーがどうにかなってほしいところである…。

しかしノートPCにしてはマシなキーボードを使っているとはいえ、Ctrlキーの位置や、Fnを使わないとHome, Endが打てないこと、これらの誤爆による誤操作によって執筆効率は悪く、モニタも一枚しかないため工数増に拍車がかかっているのが地味に辛い。

勿論、多少の不自由があれど出先のサブマシンで作業できるだけ十分ではあるのだが、肌感としては自宅作業時と比べると1.25~1.5倍ほどはかかっている印象だ。


  1. 10.00以降はバグがあり、「書庫内にファイル(フォルダ)が1この場合はフォルダを作成しない」が機能せず、余計なフォルダが生成されるため。残念ながら作者が逝去しているため修正は期待できない
  2. 検索結果に出てくるAI解説を出さない様にする為のもの

2025/09/15(月)Dockerを使ってMastodonの開発環境を作る

更新日:
投稿日:

なんか昔のやり方が使えなくなってたので調べたメモ。

確認環境

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してもよい。

検証ユーザーの作成

  1. 次のコマンドでユーザーを作る
    ./bin/tootctl accounts create hoge --email hoge@example.com --confirmed
    
  2. ユーザーの承認を行い、必要に応じてパスワードを使いやすいものに変更する
    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.developmentALTERNATE_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環境が欲しくて作ってみたが昔と変わっていて地味にハマった…。

2025/09/09(火)WindowsにSSHDを立てる

投稿日:

Windows標準のOpenSSHを利用してSSHDを立てる方法。

SSHサーバーをインストールする

20分くらいかかるので、気長に待つ。

# 有効なバージョンの確認
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
# インストール
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

SSHDサービスを構成する

# SSHDサービスの開始
Start-Service sshd
# 自動起動に設定
Set-Service -Name sshd -StartupType 'Automatic'

# 構成状況の確認
Get-Service -Name sshd
(Get-Service -Name "sshd").StartType

SSHDを鍵認証できるように設定する

%programdata%\ssh\sshd_configに設定ファイルがあるので、これを触る。

Ubuntuと同じOpenSSHであるため、設定方法は基本的に過去に書いたSSHDの設定方法と同じだが、管理者であればAuthorizedKeysFileのコメントを外す必要はない。

管理者である場合、authorized_keysadministrators_authorized_keysというファイル名にして%programdata%\sshに置く。

書き換えたらRestart-Service sshdで再起動する。

上手く繋がらない場合は、Stop-Service sshdでサービスを止めたうえでsshd.exe -ddd -eで直に起動するとデバッグログが見れるので参考にする。

ファイアーウォールへの穴開け

  1. コントロールパネル→Windows Defender ファイアウォール→詳細設定を開く
  2. 受信の規則にOpenSSHが登録されているが、ポート番号が変更不能なため削除する
  3. 次のコマンドを流し、規則を作りなおす

    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort <ポート番号>
    

2025/09/06(土)Ubuntu 24.04.3 LTSデスクトップ環境構築メモ

更新日:
投稿日:

Windowsノートに課題を長らく感じており、Ubuntuにしたら改善するのではないかという閃きでやってみたログ。

解決したかった課題

  • 120GB/256GBとストレージを食いすぎている
  • メモリが16GBしかなく、WSLをまともに使えない
  • 発熱が酷い
  • 電源を落として放置してると一週間でバッテリーが空になる
    • 高速スタートアップとか、電気を食いそうなのは軒並みOFFにしているつもりなのだが…

目指す環境

  • Windows 11っぽいデスクトップ環境
  • VSCodeを使った簡単なWeb開発や、Markdownライティングが可能
  • SSHで任意のサーバーに接続できる
  • PHPとNode.jsが動く
  • Xfce4を使った軽量なデスクトップ
  • スクショが撮れる
  • リサイズやモザイク、トリミングなどの簡単な画像編集が出来る

対象端末

NEC Lavie PC-GN20D72DYEDYH2YAA

環境構築

Ubuntuの入手とインストール

  1. Ubuntu公式からAMD64向けのイメージをダウンロード
  2. RufusでUSBメモリに焼く
  3. ノートPCにUSBメモリを挿す
  4. ノートPCを起動しF2を連打
  5. BIOSからUbuntuの入ったUSBを起動
  6. 普通にインストールする

ブラウザとVSCodeの導入

  1. Microsoftのリポジトリを登録してEdgeをインストールする。公式サイトからdebを落としてきても出来るがアップデートが面倒なのでaptで入れたほうが楽

    curl -fSsL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft-edge.gpg
    
    echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft-edge.gpg] https://packages.microsoft.com/repos/edge stable main" | sudo tee /etc/apt/sources.list.d/microsoft-edge.list
    
    sudo apt update
    sudo apt install microsoft-edge-stable
    
  2. アプリセンターからFirefoxを消す

  3. VSCodeのdebを落としてきてインストール

    sudo apt install ./code_1.103.2-1755709794_amd64.deb
    

VSCodeの設定

拡張機能のインストール

普段使ってるマシンで拡張機能のインストールコマンドを生成

code --list-extensions | grep -E -v 'powershell|wsl' | perl -ne 'print "code --install-extension $_"'

結果をノートPC側に流す

code --install-extension 13xforever.language-x86-64-assembly
code --install-extension 42crunch.vscode-openapi
code --install-extension bmewburn.vscode-intelephense-client
code --install-extension dbaeumer.vscode-eslint
code --install-extension docker.docker
code --install-extension eamodio.gitlens
code --install-extension esbenp.prettier-vscode
code --install-extension golang.go
code --install-extension gruntfuggly.todo-tree
code --install-extension jebbs.plantuml
code --install-extension jock.svg
code --install-extension lokalise.i18n-ally
code --install-extension ms-azuretools.vscode-containers
code --install-extension ms-azuretools.vscode-docker
code --install-extension ms-ceintl.vscode-language-pack-ja
code --install-extension ms-vscode-remote.remote-containers
code --install-extension ms-vscode-remote.remote-ssh
code --install-extension ms-vscode-remote.remote-ssh-edit
code --install-extension ms-vscode.remote-explorer
code --install-extension mushan.vscode-paste-image
code --install-extension redhat.vscode-commons
code --install-extension redhat.vscode-yaml
code --install-extension robberphex.php-debug
code --install-extension shd101wyy.markdown-preview-enhanced
code --install-extension swordev.phpstan
code --install-extension vscode-icons-team.vscode-icons
code --install-extension yzhang.markdown-all-in-one
settings.json
{
  "terminal.integrated.defaultProfile.linux": "zsh",
  "terminal.integrated.profiles.linux": {
    "zsh": {
      "path": "zsh"
    }
  },
  "terminal.integrated.allowChords": false,
  "terminal.integrated.commandsToSkipShell": [
    "-workbench.action.quickOpenView",
    "-workbench.action.terminal.focusFind"
  ],
  "workbench.startupEditor": "newUntitledFile",
  "workbench.iconTheme": "vscode-icons",
  "workbench.editor.decorations.badges": false,
  "workbench.editor.decorations.colors": false,
  "workbench.tree.enableStickyScroll": false,
  "workbench.layoutControl.enabled": false,
  "workbench.editor.empty.hint": "hidden",
  "files.eol": "\n",
  "files.trimTrailingWhitespace": true,
  "files.insertFinalNewline": true,
  "scm.showIncomingChanges": "never",
  "scm.showOutgoingChanges": "never",
  "git.autorefresh": true,
  "git.autoStash": true,
  "git.suggestSmartCommit": false,
  "git.mergeEditor": false,
  "git.openRepositoryInParentFolders": "never",
  "remote.autoForwardPortsSource": "hybrid",
  "diffEditor.ignoreTrimWhitespace": true,
  "diffEditor.renderGutterMenu": false,
  "explorer.confirmDragAndDrop": false,
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": "explicit"
  },
  "editor.stickyScroll.enabled": false,
  "[markdown]": {
    "editor.tabSize": 4,
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.formatOnSave": true
  },
  "php.validate.run": "onSave",
  "vsicons.dontShowNewVersionMessage": true,
  "pasteImage.path": "${currentFileDir}/${currentFileNameWithoutExt}.assets",
  "todo-tree.filtering.excludeGlobs": ["**/node_modules/**/*"],
  "todo-tree.highlights.customHighlight": {
    "TODO": {
      "foreground": "#f8ff96",
      "type": "text-and-comment"
    },
    "FIXME": {
      "foreground": "#ff9696",
      "type": "text-and-comment"
    }
  },
  "todo-tree.general.tags": ["TODO", "FIXME"],
  "todo-tree.regex.regex": "(//|#|<!--|/\\*|^\\s*\\*)\\s*($TAGS)",
  "gitlens.currentLine.format": "${author, }${date}${' via 'pullRequest}${ • message|50?}",
  "gitlens.statusBar.format": "${author}, ${date}${' via 'pullRequest}",
  "gitlens.statusBar.tooltipFormat": "${avatar} &nbsp;__${author}__, ${date}${' via 'pullRequest}\n\n${message}${\n\n---\n\nfootnotes}\n\n${commands}",
  "gitlens.hovers.detailsMarkdownFormat": "${avatar} &nbsp;__${author}__, ${date}${' via 'pullRequest}\n\n${message}${\n\n---\n\nfootnotes}\n\n${commands}",
  "gitlens.views.formats.stashes.description": "${date}",
  "gitlens.views.formats.commits.description": "${author, }${date}",
  "gitlens.defaultDateFormat": "YYYY-MM-DD",
  "terminal.integrated.shellIntegration.decorationsEnabled": "never",
  "security.workspace.trust.untrustedFiles": "open",
  "explorer.copyRelativePathSeparator": "/",
  "typescript.tsserver.log": "off",
  "gitlens.ai.experimental.generateCommitMessage.enabled": false,
  "redhat.telemetry.enabled": true,
  "chat.commandCenter.enabled": false,
  "gitlens.views.scm.grouped.views": {
    "commits": true,
    "branches": true,
    "remotes": true,
    "stashes": false,
    "tags": true,
    "worktrees": true,
    "contributors": true,
    "repositories": false,
    "searchAndCompare": false,
    "launchpad": false
  },
  "workbench.secondarySideBar.defaultVisibility": "hidden",
  "docker.extension.enableComposeLanguageServer": false,
  "workbench.localHistory.maxFileEntries": 500,
  "editor.acceptSuggestionOnCommitCharacter": false,
  "workbench.settings.showAISearchToggle": false,
  "gitlens.ai.enabled": false,
  "chat.agent.enabled": false,
  "remote.SSH.experimental.chat": false,
  "scm.showInputActionButton": false,
  "typescript.updateImportsOnFileMove.enabled": "always",
}
keybindings.json
// Place your key bindings in this file to override the defaults
[
    {
        "key": "ctrl+[BracketLeft]",
        "command": "workbench.action.terminal.toggleTerminal",
        "when": "terminal.active"
    },
    {
        "key": "ctrl+shift+r",
        "command": "typescript.restartTsServer"
    },
    {
        "key": "ctrl+shift+e",
        "command": "eslint.restart"
    },
    {
        "key": "alt+down",
        "command": "workbench.action.compareEditor.nextChange",
        "when": "textCompareEditorVisible"
    },
    {
        "key": "alt+up",
        "command": "workbench.action.compareEditor.previousChange",
        "when": "textCompareEditorVisible"
    },
    {
        "key": "ctrl+k enter",
        "command": "-workbench.action.keepEditor"
    },
    {
        "key": "ctrl+q",
        "command": "workbench.action.keepEditor"
    }
]

Xubuntu化

sudo apt install xubuntu-desktop
sudo apt purge gnome-desktop
sudo apt search gnome
sudo apt purge ubuntu-gnome-desktop gnome-shell
sudo apt autoremove

基本環境のセットアップ

  1. 土台となる環境をインストールする

    # 基礎環境の導入
    sudo apt update -y
    sudo apt upgrade -y
    sudo apt install -y \
        zsh \
        ssh \
        net-tools \
        traceroute \
        unzip \
        mariadb-server \
        nginx \
        git
    
    # chsh
    sudo apt -y install unzip traceroute
    chsh -s $(which zsh)
    
    # dotfiles
    wget https://github.com/Lycolia/my-dotfiles/archive/refs/heads/main.zip
    unzip main.zip
    cp -R my-dotfiles-main/. .
    rm -Rf my-dotfiles-main main.zip
    
  2. chshを効かせるためにOSを再起動

  3. Dockerをインストール

    # Docker
    for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
    
    # Add Docker's official GPG key:
    sudo apt -y update
    sudo apt -y install ca-certificates curl
    sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
    sudo chmod a+r /etc/apt/keyrings/docker.asc
    
    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
    $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt update
    
    sudo apt -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    
    # sudo緩和
    sudo usermod -aG docker $USER
    
  4. Node.jsをインストール
    # Node.js @ nvm
    export NVM_DIR="$HOME/.nvm" && (
      git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR"
      cd "$NVM_DIR"
      git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
    ) && \. "$NVM_DIR/nvm.sh"
    nvm install --lts
    
  5. dotfilesのセクションで拾ってきた.zshrcを開き、nvmが動くようにコメントを外す

SSH環境の作成

  1. 鍵置き場を作り、鍵を配置する
    mkdir ~/.ssh
    chmod 700 ~/.ssh
    touch config
    chmod 600 <鍵ファイル>
    
  2. 接続情報を書く
    Host hoge
      User foo
      Hostname git1.example.com
      IdentityFile ~/.ssh/config/id_ed25519_foo
      Port 22222
    Host piyo
      User bar
      Hostname git2.example.com
      IdentityFile ~/.ssh/config/id_ed25519_bar
      Port 20202
    

LibreOfficeのバージョンを上げる

LibreOfficeのバージョンを最新まで上げるとOnedriveに繋げるようになるらしいので上げてみたが、「LibreOffice OneDrive the specified device invalid」のようなエラーメッセージが出て実際には使えなかった。Google Driveでも同様の問題があるらしい

バージョンの上げ方

公式サイトからdebをダウンロードしてきて展開し、debが詰まったディレクトリでsudo dpkg -i *.debするとインストールできる。

そのままではXubuntuのLibreOfficeと競合するため以下のコマンドで古い方を消す。

sudo apt remove libreoffice-common
sudo apt autoremove

PHP8.4のインストール

  1. 取り敢えず使いそうなもの入れる

    sudo add-apt-repository ppa:ondrej/php
    sudo apt update
    sudo apt install -y php8.4 \
        php8.4-bz2 \
        php8.4-cgi \
        php8.4-cli \
        php8.4-common \
        php8.4-curl \
        php8.4-dev \
        php8.4-ds \
        php8.4-fpm \
        php8.4-gd \
        php8.4-http \
        php8.4-imagick \
        php8.4-intl \
        php8.4-ldap \
        php8.4-mbstring \
        php8.4-mcrypt \
        php8.4-mysql \
        php8.4-oauth \
        php8.4-odbc \
        php8.4-pgsql \
        php8.4-smbclient \
        php8.4-snmp \
        php8.4-soap \
        php8.4-sqlite3 \
        php8.4-uuid \
        php8.4-vips \
        php8.4-xdebug \
        php8.4-xml \
        php8.4-xmlrpc \
        php8.4-yaml \
        php8.4-zip \
        php8.4-zstd
    sudo sed -i -e 's/;listen.mode = 0660/listen.mode = 0666/' /etc/php/8.4/fpm/pool.d/www.conf
    sudo service php8.4-fpm start
    
  2. nginxでfpmが動くか動作確認するために/etc/nginx/conf.d/test.confを作成し、以下を記述

    server {
      listen 80;
      listen [::1]:80;
    
      location ~ ^/.*$ {
        root /usr/share/nginx/html;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      }
    }
    
  3. sudo service nginx restart

  4. /usr/share/nginx/html/に適当なPHPスクリプトを置いて動いてるのが確認出来たらOK

GitとGitHubの設定

デスクトップを使いやすくする

Windows 11っぽくする。

日本語入力できるようにする

タスクバーの右上にある「JA」をクリックしてMozcに変える

タスクバーを下に下げる

  1. タスクバーを右クリックし、パネル→パネルの設定を開く
  2. パネルをロックするを解除する
  3. タスクバーを画面下までドラッグする
  4. パネルをロックするをチェックする

スタートメニューや起動中のウィンドウを真ん中に寄せてラベルを消す

ウィンドウボタン

  1. パネルの設定を開き、アイテムタブに移る
  2. ウィンドウボタンをダブルクリック
  3. ボタンラベルを表示するのチェックを外す
  4. フラットボタンで表示するのチェックを入れる
  5. 取っ手を表示するのチェックを外す
  6. 並び変え順をタイムスタンプにする
  7. 基本的に画像の通りになってればOK
Whisker Menu

基本的に設定しなくてよいが、ラベルが出ている場合は表示をアイコンにすればよいと思う。

中央寄せにする

  1. セパレーターを追加し、セパレーター・Whisker Menu・ウィンドウボタンの順にする
  2. セパレーターをダブルクリックし、拡張するにチェックを入れる
  3. すると中央寄せになる
アイコンを大きめにする

  1. パネルの設定から表示タブを開く
  2. 行サイズを40にする
  3. 外観タブを開く
  4. 固定されたアイコンサイズを32にする
ワークスペースを一個にする

ウィンドウボタンの中央寄せを意識した場合に邪魔なのと、ウィンドウドラッグで他のデスクトップに勝手に飛んでいき、飛んでいくと戻すのが面倒なので、無効化する。

  1. パネルにあるワークスペーススイッチャの設定を開き一個にする
  2. ワークスペーススイッチャを消す(四つの窓と、画面右端にもう一個ある)

WindowsキーでWhisker Menuが、他のキーコンビネーションと干渉せずに開くようにする

愚直にやるとSuper+Eなどのキーとの同時押しと干渉するのでWindowsキー単体押下時のキーコードをいじるユーティリティ、KSUPERKEYを入れて解決する。

  1. 依存関係のインストールとビルド及びインストールコマンドを流す
    sudo apt install -y git gcc make libx11-dev libxtst-dev pkg-config
    git clone https://github.com/hanschen/ksuperkey.git
    cd ksuperkey
    make
    sudo make install
    
  2. 設定マネージャー→セッションと起動を開く
  3. ksuperkeyを追加する
  4. OSを再起動する。OS再起動後、Windowsキー単体の割り当てがSuperからAlt+F1に変更される
  5. 設定マネージャー→キーボードを開く
  6. xfce4-popup-whiskermenuの割り当てをAlt+F1に変更する
  7. Alt+F1にあるxfce4-popup-applicationsmenuと、Alt+Pauseにあるxfce4-popup-whiskermenuはゴミなので消す
  8. Windowsキーを押したときにWhisker Menuが開き、Windows + Eではファイラが開き、お互いが干渉しないことを確認できればOK

スクショを取りやすくする

PrintScreenで画面全体、Windows + Shift + Sで矩形スクショ、Alt + Insertでウィンドウスクショが撮れるようにする。但し、AltL+Insは何故か機能させられなかった。

  1. 設定マネージャー→キーボードを開く
  2. xfce4-screenshooter系のコマンドの最後に -cを追加し、ダイアログなしでクリップボードに飛ばすようにする
  3. Windowsと同様のキーバインドを設定する

ファイル保存は-s 'ピクチャ/Screenshots/'のようなオプションを生やすと可能になるが毎回ダイアログが出るので指定しない方がいい。

また今回の方式ではコンテキストメニューやドロップダウンメニューが開いている場合は機能しなくなるが、回避方法は不明。

Flameshotという便利そうなツールもあるが、あいにくXfceのキーバインド機能に依存させるしかなく、xfce4-screenshooter以上のことはできない

クリップボードマネージャーを有効にする

セッションと起動の自動開始アプリケーションに移り、Clipmanにチェックを入れる。

フォルダ右クリックでVSCodeを開けるようにする

  1. フォルダを右クリックしアプリケーションで開く→他のアプリケーションで開く
  2. Visual Studio Codeを選択
  3. 以後、VSCodeが選択肢に出てくるようになる

WindowsとUbuntuのパフォーマンス比較

セットアップ後のUbuntuのCPU・メモリ・ストレージの各使用率を比較してみた。

双方VSCode, Edge, Discordを起動している状態で比較している。WindowsはCPUとメモリをタスクマネージャー、ストレージをエクスプローラ。UbuntuはCPUをタスクマネージャー、メモリをfree -h、ストレージをdfで見ている。

占有対象 Windows Ubuntu
CPU 30% 2%
MEM 6.6GB/15.4GB (43%) 3.6GiB/14GiB (26%)
ストレージ 113GB/236GB (48%) 17GB/213GB (8%)

圧倒的な軽さ。Windowsだと基本熱を持っていたマシンが随分穏やかな温度になり、夏場でも負荷をそこまで気にせず使えそうだった。

また、まだ今日セットアップしたばかりなので見れていないが、シャットダウン時の電力消費が著しく低い気配がしているので、一週間放置してたらバッテリー切れてたというのもなさそうな予感がしている。

ここはWindowsとの比較が出来ていないが、OSの起動が20秒、終了は4秒と、終了が異様に早い気がした。

単純比較はできないものの、遥かにスペックの高いメインマシンでは起動に2分、終了に20秒を要した事を考えると、かなり早い。

解決した課題

  • 120GB/256GBとストレージを食いすぎている問題
    • 使用量が17GBになり、何ら問題なくなった
  • メモリが16GBしかなく、WSLをまともに使えない問題
    • そもそもLinuxなのでVMが不要なため必然的に解決
    • メモリ使用量もWindowsでは6.6GB/15.4GBだったところ、3.6GB/16.1GBに若干改善した
  • 発熱が酷い問題
    • アイドル時のCPU使用率が30%から2%に落ち、ほとんど熱を持たなくなった
  • 電源を落として放置してると一週間でバッテリーが空になる問題
    • 現時点で6hしか放置できていないため不明だが、ほぼ減ってないように見えるので大丈夫かもしれない

目指す環境との乖離

  • Windows 11っぽいデスクトップ環境
    • 大まかにはそれっぽくなった
  • VSCodeを使った簡単なWeb開発や、Markdownライティングが可能
    • 出来る状態になっている
  • SSHで任意のサーバーに接続できる
    • 確実に可能
  • PHPとNode.jsが動く
    • 確実に可能
  • Xfce4を使った軽量なデスクトップ
    • 達成済み
  • スクショが撮れる
    • 手間がかかる部分もあるが、概ね問題ない。プルダウンメニューやコンテキストメニューもタイマーを書ければスクショできるし、そもそもそこをスクショする機会もそうないだろう
  • リサイズやモザイク、トリミングなどの簡単な画像編集が出来る
    • デフォルトでGIMPが入っているのでOK(JTrimにはどうしても劣るが、偶に使う程度であれば支障なし)

完成したデスクトップ環境

タスクバーが中央寄せの大きなアイコン表示で、起動順、アプリケーションごとにグループ化されてて、そこそこWindows11ぽさを出せてると思う。

サブでたまに使う程度なら全然許容という感じ。

懸念していたが大丈夫だった部分

  • マウス接続時のタッチパッド無効化
    • これ自体は難しそうだったが、キーボード入力中にタッチパッドが無効化されており、あまり気にならなかった。Ctrl押しながらタッチパッドはいけたので実用性で問題になることはないだろう
  • Surface Ark Mouseの三本指クリック
    • ちゃんと中クリックとして認識された

2025/09/02(火)Ubuntu 24.04.3 LTSにxrdp 0.10系を入れる

更新日:
投稿日:

Ubuntu 24.04.3 LTSのxrdpはバグがあり、セッション管理が不安定らしいのでバージョンを上げて解決する。

事象

Windowsのリモートデスクトップから接続すると、xrdpのログイン後に画面が真っ暗になっており、毎回pkill gnome-sessionを余儀なくされ面倒だった。

~/.xsession-errorsを開くと、無限にこのログが出ていた。

(tracker-extract-3:5784): GLib-GIO-WARNING **: 08:39:48.131: Error creating IO channel for /proc/self/mountinfo: 無効な引数です (g-io-error-quark, 13)
Xlib:  extension "DPMS" missing on display ":10.0".
Xlib:  extension "DPMS" missing on display ":10.0".
Xlib:  extension "DPMS" missing on display ":10.0".
Xlib:  extension "DPMS" missing on display ":10.0".
Xlib:  extension "DPMS" missing on display ":10.0".

確認環境

GNOMEはxrdp的にあまりよろしくないらしいので、ついでにxfceに変えてしまった方がいい可能性がある。変える場合はUbuntu 24.04.3 LTSをGNOMEからXfceに移行するを参考にする。

Env Ver
ディストリ Ubuntu 24.04.3 LTS
デスクトップ環境 xfce 4.18
更新前 xrdp 0.9.24-4
更新後 xrdp 0.10.4.1 + lightdm 1.30.0

やり方

公式マニュアルに忠実にやっていく。

xrdpの依存環境のインストール

sudo apt purge xrdp

wget https://raw.githubusercontent.com/neutrinolabs/xrdp/refs/tags/v0.10.4.1/scripts/install_xrdp_build_dependencies_with_apt.sh
chmod +x install_xrdp_build_dependencies_with_apt.sh
sudo ./install_xrdp_build_dependencies_with_apt.sh max

xrdpのビルドとインストール

wget https://github.com/neutrinolabs/xrdp/releases/download/v0.10.4.1/xrdp-0.10.4.1.tar.gz
tar xvzf xrdp-0.10.4.1.tar.gz
mv xrdp-0.10.4.1 xrdp
cd xrdp
https://raw.githubusercontent.com/neutrinolabs/xrdp/refs/tags/v0.10.3/scripts/install_xrdp_build_dependencies_with_apt.sh

./bootstrap
./configure --with-systemdsystemunitdir=/usr/lib/systemd/system \
    --enable-ibus --enable-ipv6 --enable-jpeg --enable-fuse --enable-mp3lame \
    --enable-fdkaac --enable-opus --enable-rfxcodec --enable-painter \
    --enable-pixman --enable-utmp -with-imlib2 --with-freetype2 \
    --enable-tests --enable-x264 --enable-openh264 --enable-vsock
make

sudo make install
sudo ln -s /usr/local/sbin/xrdp{,-sesman} /usr/sbin

sudo adduser --system --group --no-create-home --disabled-password --disabled-login --home /run/xrdp xrdp

実行環境の整備

  1. /etc/xrdp/xrdp.iniを開き以下の行のコメントを外す
    runtime_user=xrdp
    runtime_group=xrdp
    
  2. /etc/xrdp/sesman.iniを開き以下の行のコメントを外す
    SessionSockdirGroup=xrdp
    
  3. 証明書を作成する

    sudo chmod 640 /etc/xrdp/rsakeys.ini
    sudo chown root:xrdp /etc/xrdp/rsakeys.ini
    
    sudo make-ssl-cert generate-default-snakeoil
    sudo ln -sf /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/xrdp/cert.pem
    sudo ln -sf /etc/ssl/private/ssl-cert-snakeoil.key /etc/xrdp/key.pem
    sudo usermod -a -G ssl-cert xrdp
    
  4. 以下を叩いて全部OKなのを確認
    sudo /usr/local/share/xrdp/xrdp-chkpriv
    
  5. サービスの有効化
    sudo systemctl enable --now xrdp xrdp-sesman
    

xorgxrdpのビルドとインストール

XをRDP用に差し替えるxrdpのバックエンドシステムらしい?

  1. ビルドとインストール
    # scripts/install_xorgxrdp_build_dependencies_with_apt.shがないのでビルド時にエラーになった分を入れている
    sudo apt install xserver-xorg-dev libgbm-dev libepoxy-dev
    ./bootstrap
    ./configure --enable-glamor
    make
    sudo make install
    
  2. /etc/xrdp/sesman.iniを開き以下のように書き換える
    ;param=Xorg
    param=/usr/lib/xorg/Xorg
    

ゴミ掃除と最後の設定

rm -Rf xorgxrdp xrdp xorgxrdp-0.10.4.tar.gz install_xrdp_build_dependencies_with_apt.sh xrdp-0.10.4.1.tar.gz

# GNOMEなどxfceでない場合は適宜書き換える
echo "startxfce4" > ~/.xsessionrc

トラブルシューティング

Authentication is required to create a color managed deviceというダイアログが何度も出る

Ubuntu 24からpolkitのバージョンが上がっているようで、従来の手段が通じなくなっている。

  1. /etc/polkit-1/localauthority/50-local.dにcolorが付いたファイルがあれば中身を確認し、関係ありそうな場合削除する
    • この設定ファイルは古く使われていないはずだが念のため消す
  2. /etc/polkit-1/localauthority.conf.d/02-allow-colord.confがなければ作成し、以下の内容を記述
    polkit.addRule(function(action, subject) {
    if (action.id.startsWith('org.freedesktop.color-manager')) {
        return polkit.Result.YES;
    }
    });
    
  3. sudo service polkit restartでpolkitを再起動する

この作業をしても起動直後だけは出るので、キャンセル連打で無視すると良い。二回目以降は出なくなるはずだ。

あとがき

アップデートするとxrdpのロゴが洗練されたスタイルに変わった。今までは結構古臭かったように思う。