透過 SSH X11 轉發時,GUI 應用程式無法啟動
依照上一篇文章的步驟建立了 SSH X11 轉發環境,xeyes 順利顯示在 Windows 端。然而 nautilus 卻怎麼都啟動不了。這是一篇記錄「明明 DISPLAY 已經正常運作,為什麼偏偏這個應用程式會當掉」的排查過程。
依照上一篇文章的步驟建立了 SSH X11 轉發環境,xeyes 順利顯示在 Windows 端。然而 nautilus 卻怎麼都啟動不了。這是一篇記錄「明明 DISPLAY 已經正常運作,為什麼偏偏這個應用程式會當掉」的排查過程。
這台 Fedora 43 Server 既沒有安裝 X 伺服器,也沒有安裝桌面環境。現在想從這台機器把 GUI 應用程式顯示到 Windows 電腦上。這是一篇不安裝桌面環境,改用 SSH X11 轉發只傳送「單一應用程式」的紀錄。
本文整理了將 document.tex(採用 ltjsarticle 文件類別,以 LuaTeX-ja 為前提)以 LuaLaTeX 轉換成 PDF 所需的環境建置步驟。以 Windows + winget 為前提。
在嘗試透過 myhost.local (mDNS) 存取同一區域網路內的 Fedora Server 時,遇到了唯獨名稱解析失敗的狀況。透過 tcpdump 直接觀察封包進行排查後,發現原因是 firewalld 封鎖了 mDNS 的傳入流量。
2026 年 6 月,Microsoft 正式公開了 Coreutils for Windows。
winget install Microsoft.Coreutils
透過這個指令可安裝的 Microsoft.Coreutils,是 Microsoft 官方專案,可讓 Linux 與 macOS 日常使用的 ls、cp、rm、cat 等 UNIX 系指令,能在 Windows 上以原生方式執行。
本文將整理專案概要、支援指令、限制事項,以及與 WSL 和 PowerShell 的差異。
Microsoft.Coreutils 是由 Microsoft 維護、面向 Windows 的命令列工具集。
其內部是以以下專案為基礎構建:
並以 Rust 實作。
Microsoft 將此專案的目的說明為:
降低在 Linux、macOS、WSL、容器、Windows 之間來回切換的開發者摩擦
可透過 WinGet 輕鬆導入。
winget install Microsoft.Coreutils
WinGet 是 Windows 內建的套件管理員,可自動下載並安裝指定套件。
安裝後即可作為一般指令使用。
ls
cat file.txt
grep keyword log.txt
cp source.txt backup.txt
代表性的指令如下。
| 分類 | 指令範例 |
|---|---|
| 檔案列表 | ls |
| 檔案複製 | cp |
| 檔案移動 | mv |
| 檔案刪除 | rm |
| 內容顯示 | cat |
| 目前工作目錄 | pwd |
| 建立目錄 | mkdir |
| 休眠 | sleep |
| 管線處理 | tee |
| 搜尋 | grep, find |
對 Linux 使用者來說,熟悉的指令可直接使用。
這裡是最大的注意點!
PowerShell 內已經存在同名的別名或內建指令。
例如:
| 指令 | 問題 |
|---|---|
| ls | 與 PowerShell 別名衝突 |
| cp | 與 Copy-Item 衝突 |
| cat | 與 Get-Content 衝突 |
| rm | 與 Remove-Item 衝突 |
| pwd | 與 Get-Location 衝突 |
因此,
ls
即使執行了,也不一定會呼叫 Coreutils 版本。
Microsoft 建議使用 PowerShell 7.4 以上版本。
雖然目標是相容 Linux,但仍存在因 Windows 機制造成的限制。
Linux 的
kill
SIGTERM
SIGKILL
機制在 Windows 中不存在。
因此,
kill
timeout
目前尚未提供。
Linux:
grep error log.txt > /dev/null
Windows:
grep error log.txt > NUL
會是這樣。
Windows 是以 ACL 為基礎的權限管理。
因此,
chmod
chown
chgrp
等指令不會提供。
雖然可以讀取,但若要新建立,則需要:
Microsoft 有意排除了一部分指令。
最常被比較的是 WSL(Windows Subsystem for Linux)。
| 項目 | Microsoft.Coreutils | WSL |
|---|---|---|
| 導入成本 | 非常低 | 需要建置 Linux 環境 |
| 啟動速度 | 原生 | 有虛擬環境層 |
| Linux 相容性 | 部分 | 非常高 |
| Bash 環境 | 無 | 有 |
| apt 可用性 | 不可 | 可 |
| Shell 腳本相容性 | 有限制 | 高 |
WSL 是「Linux 環境本身」,而 Coreutils 則是「在 Windows 上使用類 Linux 指令的工具集」。
選擇「具名管道」,並將管道名稱設定為「COM1」。

使用 sudo nano /etc/default/grub 開啟 GRUB 設定檔。
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,115200n8"
儲存後,執行以下指令套用 GRUB 設定:
sudo update-grub
設定服務以允許透過序列埠登入。
sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service
以系統管理員身分啟動。

以系統管理員身分啟動。
| 序列線路 | 速率 | 連線類型: |
|---|---|---|
| \.\pipe\COM1 | 115200 | Serial |
設定以上項目。


以系統管理員身分啟動。

[System.Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
[System.Console]::InputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
plink.exe -serial \\.\pipe\COM1 -sercfg 115200,8,n,1,N
按 Ctrl + C 結束。
這篇備忘錄記錄了 PLINK。
PLINK (PuTTY Link) 是 PuTTY 套件中的一個命令行工具,主要用於在 Windows 環境下通過命令行執行 SSH、Telnet 和 Rlogin 連接。它對於腳本化和自動化遠端操作非常有用。
與 PuTTY GUI 相比,PLINK 提供了無需圖形界面的方式來連接遠端伺服器,非常適合在批處理文件、PowerShell 腳本或 CI/CD 環境中使用。
PLINK 是 PuTTY 套件的一部分。你不需要單獨安裝它,只需下載 PuTTY 官方網站提供的 PuTTY 套件。
plink.exe:你可以選擇下載獨立的 plink.exe 可執行文件,或者下載整個 PuTTY 安裝程式。plink.exe 放置到 PATH 路徑:為了方便在任何地方調用 plink,建議將 plink.exe 所在的目錄添加到 Windows 的環境變量 PATH 中。PLINK 的基本語法與 SSH 類似,但有其特有的選項。
plink [user@]host [command]
範例:連接到遠端伺服器並執行 ls -l 命令。
plink user@example.com ls -l /var/www
如果沒有指定命令,PLINK 會啟動一個交互式 Shell 會話。
使用 -P 選項指定端口(注意是大寫 P)。
plink -P 2222 user@example.com
PLINK 支持使用 PuTTY 專有的 .ppk 格式的私鑰文件進行身份驗證。你需要使用 PuTTYgen 工具將 OpenSSH 格式的私鑰轉換為 .ppk 格式。
plink -i C:\path o\your\private_key.ppk user@example.com
你可以將 PLINK 執行的遠端命令的輸出重定向到本地文件。
plink user@example.com "cat /etc/nginx/nginx.conf" > nginx_config.txt
通過將命令用引號括起來,可以在遠端執行多個命令。
plink user@example.com "cd /var/www/html && git pull origin main"
為了實現免密碼登錄,你需要:
生成 OpenSSH 密鑰對 (如果還沒有)。
在 Linux/WSL/Git Bash 中:ssh-keygen -t rsa -b 4096
將公鑰部署到遠端伺服器。
使用 ssh-copy-id 或手動將公鑰內容添加到遠端伺服器的 ~/.ssh/authorized_keys 文件中。
使用 PuTTYgen 將私鑰轉換為 .ppk 格式。
Load,選擇你的 OpenSSH 私鑰文件 (id_rsa)。Save private key,將其保存為 .ppk 格式。你可以選擇不設置密碼。使用 PLINK 和 .ppk 文件連接。
plink -i C:\path o\your\id_rsa.ppk user@example.com "your_command"
-ssh:強制使用 SSH 協議。-batch:防止 PLINK 提示用戶輸入密碼或接受主機密鑰(適用於腳本)。-pw password:直接在命令行中提供密碼(不安全,應盡量避免)。-N:不執行遠端命令,僅用於端口轉發(隧道)。-L, -R, -D:用於本地、遠端、動態端口轉發(SSH 隧道)。PLINK 在自動化任務中非常有用。
deploy.bat)@echo off
set HOST=user@example.com
set KEY="C:\path o\your\private_key.ppk"
set REMOTE_DIR=/var/www/html
echo 連接到 %HOST% 並部署...
plink -i %KEY% %HOST% "cd %REMOTE_DIR% && git pull origin main && npm install && npm run build"
if %ERRORLEVEL% NEQ 0 (
echo 部署失敗!
exit /b %ERRORLEVEL%
)
echo 部署成功!
PLINK 是 Windows 用戶在命令行環境中執行 SSH 和其他遠端連接的強大工具。它在自動化腳本、CI/CD 流程以及無需圖形界面的遠端操作中扮演著重要角色。通過理解其基本用法和如何與私鑰文件結合,可以大大提高遠端管理的效率和安全性。