お知らせ

現在サイトのリニューアル作業中のため、表示が崩れているページが存在することがあります。
2025/09/07 11:24 ジャンル::自作PC

Noctuaのヒートシンクに素手で触れるとめちゃくちゃ指紋が付いてきたなく見えるので、それを除去していく。

こういう指紋汚れを取る。

指紋が付いたばかりのケース

無水エタノールを含ませたティッシュなどで拭うと簡単に取れる。

これは指紋が付いた直後に拭いたときのもの。

指紋が付いて数年経過したケース

無水エタノールで拭いてもほとんど取れない場合は、食器洗い用中性洗剤をティッシュなどにつけ、原液のままま強めにこすると取れやすい。

そのままだと洗剤が残ってしまうため、最後は水拭きして洗剤を取り去る。

洗浄前 洗浄後

これは5年ほど積もり積もった指紋の山だが、大分綺麗になったと思う。写真では判らないがよく見ると完全には取り切れていない。

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. Edgeのdebを落としてきてインストール

    sudo apt install ./microsoft-edge-stable_139.0.3405.125-1_amd64.deb
    
  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. 取り敢えず使いそうなもの入れる

    php
    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.0-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

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

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でウィンドウスクショが撮れるようにする。

  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の三本指クリック
    • ちゃんと中クリックとして認識された

Amazonや公式サイトにある情報が本当に正しいとは限らないので実地検分。

やり方

# これでCPUの情報が取れる
cat /proc/cpuinfo

# これでメモリの情報が取れる
opkg install dmidecode
dmidecode -t 17

# これでCPU, NICの情報が取れる
opkg install hwinfo
hwinfo

# これでeMMCのベンダ情報が取れる
cat /sys/class/mmc_host/mmc0/mmc0:0001/name
cat /sys/class/mmc_host/mmc0/mmc0:0001/manfid

調査ログ

CPU

cat /proc/cpuinfoの結果から取得した情報。

model name : Intel(R) Celeron(R) N5105 @ 2.00GHz

メモリ

dmidecode -t 17の結果から取得した情報。

MicronのLPDDR4でDDR4-3200相当であるとわかる。

Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: None
Maximum Capacity: 8 GB
Error Information Handle: Not Provided
Number Of Devices: 2

Memory Device
Array Handle: 0x003A
Size: 4 GB
Form Factor: Row Of Chips
Locator: Controller0-ChannelA
Type: LPDDR4
Speed: 3200 MT/s
Manufacturer: Micron Technology

NIC(RJ45)

hwinfoの結果から取得した情報。

pci 0x125cはI226-VなのでIntel Ethernet controller I226-V

Hardware Class: network
Model: "Intel Ethernet controller"
Vendor: pci 0x8086 "Intel Corporation"
Device: pci 0x125c
SubVendor: pci 0x8086 "Intel Corporation"
SubDevice: pci 0x0000
Revision: 0x04
Driver: "igc"
Driver Modules: "igc"
Device File: eth2

NIC(SPF+)

以前分解したときのラベルと、hwinfoの結果から取得した以下の情報と突き合わせるとMellanox ConnectX-3 En10*2 Gigabit Ethernet CX341Aであることが分かる。

Hardware Class: network
Model: "Mellanox MT27500 Family [ConnectX-3]"
Vendor: pci 0x15b3 "Mellanox Technologies"
Device: pci 0x1003 "MT27500 Family [ConnectX-3]"
SubVendor: pci 0x15b3 "Mellanox Technologies"
SubDevice: pci 0x0113
Driver: "mlx4_core"
Driver Modules: "mlx4_core"
Device File: eth3

ストレージ(eMMC)

以下の結果から、name: SCA128, manfid: 0x0000dfであることから、メーカー不詳のSCA128という製品であることが分かる。ググってもメーカー情報は不明だった。

cat /sys/class/mmc_host/mmc0/mmc0:0001/name
cat /sys/class/mmc_host/mmc0/mmc0:0001/manfid

まとめ

公式サイト?の情報やAmazonの情報と比べると微妙に差異があり、また、書いてない情報も取れたので調べてよかったなと思った。

構成 製品 備考
CPU Intel Celeron N5105 6T6C, 2.00GHz, TDP10W
MEM Micron LPDDR4-3200 4GB * 2
Storage SCA128 128G EMMC
NIC Intel Ethernet controller I226-V RJ45 2.5GbE * 3
NIC Mellanox ConnectX-3 En10*2 Gigabit Ethernet CX341A SPF+ 10GbE * 2

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のロゴが洗練されたスタイルに変わった。今までは結構古臭かったように思う。

GNOMEは重いのでXfceに変更する。

XfceはDebianに昔あった懐かしいUIで劇的に軽くなった。

環境

Ubuntu 24.04.3 LTS

やり方

XfceのインストールとGNOMEの削除

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

xrdpのXfce化

echo "startxfce4" > ~/.xsessionrc

トラブルシューティング

日本語入力が出来ない

右上のタスクバーにある「JA」をクリックして「mozc」に変更すると「全角/半角」キーが使えるようになり、日本語入力が可能になる。

タスクバーを上から下に移動する

タスクバーを右クリック→パネル→パネルの設定で固定解除するとハンドルが出るのでドラッグしてもっかい固定するといい。

デフォだとパネル2がドックとしてあるが、邪魔なので消す。