Farseerfc的小窩 - archlinux//farseerfc.me/2019-02-07T02:14:00+09:00用 usbip 轉發 raspberry pi 的 USB 鍵盤鼠標給 Arch Linux 的 PC2019-02-07T02:14:00+09:002019-02-07T02:14:00+09:00farseerfctag:farseerfc.me,2019-02-07:/usbip-forward-raspberrypi.html<p>惠狐 <a class="reference external" href="/links.html#megumifox">megumifox</a> 寫了篇 <a class="reference external" href="https://blog.megumifox.com/public/2019/02/06/%E7%94%A8pulseaudio%E5%B0%86%E7%94%B5%E8%84%91%E7%9A%84%E5%A3%B0%E9%9F%B3%E7%94%A8%E6%89%8B%E6%9C%BA%E6%94%BE%E5%87%BA%E6%9D%A5/">用PulseAudio將電腦的聲音用手機放出來</a>
,文末提到想知道我怎麼用樹莓派轉發 USB 的,於是寫篇文章記錄一下。</p>
<div class="section" id="id1">
<h2>起因</h2>
<p>家裏有個裝了 Arch Linux ARM 的樹莓派3B 閒置着,裝了 Arch Linux ARM 偶爾上電更新一下,
不過因爲性能實在不適合做別的事情於是一直在吃灰。某日 <del>給老婆安利幻想萬華鏡</del><ins>和老婆看片</ins>
的時候, <del>老婆不吃安利於是遷怒鍵盤鼠標</del><ins>鍵盤鼠標被長長的 USB 線扯着感覺很難受</ins>
,於是偶發奇想,能不能利用一下樹莓派的多達 4 個 USB 2.0 端口接鼠標鍵盤呢,
這樣鼠標鍵盤就可以跟着樹莓派來回走,不用拖着長長的 USB 線了。</p>
<p>上網搜了一下, Linux 環境有個 usbip 工具正好能做到這個。原理也很直觀, usbip 能把 USB …</p></div><p>惠狐 <a class="reference external" href="/links.html#megumifox">megumifox</a> 寫了篇 <a class="reference external" href="https://blog.megumifox.com/public/2019/02/06/%E7%94%A8pulseaudio%E5%B0%86%E7%94%B5%E8%84%91%E7%9A%84%E5%A3%B0%E9%9F%B3%E7%94%A8%E6%89%8B%E6%9C%BA%E6%94%BE%E5%87%BA%E6%9D%A5/">用PulseAudio將電腦的聲音用手機放出來</a>
,文末提到想知道我怎麼用樹莓派轉發 USB 的,於是寫篇文章記錄一下。</p>
<div class="section" id="id1">
<h2>起因</h2>
<p>家裏有個裝了 Arch Linux ARM 的樹莓派3B 閒置着,裝了 Arch Linux ARM 偶爾上電更新一下,
不過因爲性能實在不適合做別的事情於是一直在吃灰。某日 <del>給老婆安利幻想萬華鏡</del><ins>和老婆看片</ins>
的時候, <del>老婆不吃安利於是遷怒鍵盤鼠標</del><ins>鍵盤鼠標被長長的 USB 線扯着感覺很難受</ins>
,於是偶發奇想,能不能利用一下樹莓派的多達 4 個 USB 2.0 端口接鼠標鍵盤呢,
這樣鼠標鍵盤就可以跟着樹莓派來回走,不用拖着長長的 USB 線了。</p>
<p>上網搜了一下, Linux 環境有個 usbip 工具正好能做到這個。原理也很直觀, usbip 能把 USB
端口上的數據封裝成 IP 協議通過網絡轉發出去,從而兩個網絡間相互聯通的電腦就可以遠程轉發 USB 了。
設置好的話,就像是一臺 PC 多了幾個位於樹莓派上的 USB 端口,插上樹莓派的 USB 設備統統作爲 PC
的設備。</p>
<p>這篇文章假設有一個裝了 Arch Linux 的 PC ,和一個裝了 Arch Linux ARM 的樹莓派,
並且兩者間能通過網絡互相訪問到。別的發行版上大概也可以這麼做,只是我沒有試過。 usbip
工具似乎普遍被發行版打包了,除此之外需要的也只是 Linux 內核提供好的功能而已。</p>
</div>
<div class="section" id="arch-linux-arm">
<h2>設置 Arch Linux ARM 的樹莓派端</h2>
<p>假設樹莓派上面網絡已經設置妥當,開機插電就能自動聯網。接下來安裝 usbip 工具:</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="gp">$</span> sudo pacman -Syu usbip</span>
</pre></div>
<p>然後需要記錄一下樹莓派的 IP 地址:</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="gp">$</span> ip addr</span>
<span class="code-line"><span class="go">3: wlan0: ......</span></span>
<span class="code-line"><span class="go">inet 192.168.0.117/24 brd 192.168.0.255 scope global noprefixroute wlan0</span></span>
<span class="code-line"><span class="go">......</span></span>
</pre></div>
<p>接下來給 udev 添加一個規則,當插入 usb 設備的時候,執行我的腳本 usbipall.sh
把 usb 設備通過 usbip 共享出去:</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="gp">$</span> cat /etc/udev/rules.d/usbipall.rules</span>
<span class="code-line"><span class="go">ACTION=="add", SUBSYSTEM=="usb", RUN+="/usr/bin/bash /usr/local/bin/usbipall.sh"</span></span>
</pre></div>
<p>這個 rules 文件 <a class="reference external" href="https://github.com/farseerfc/dotfiles/blob/master/usbiprpi/usbipall.rules">可以在我的 dotfiles 裏面找到</a> 。</p>
<p>然後規則調用的 usbipall.sh 我這麼寫的, <a class="reference external" href="https://github.com/farseerfc/dotfiles/blob/master/usbiprpi/usbipall.sh">文件同樣在我的 dotfiles 裏面</a> :</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="ch">#!/bin/sh</span></span>
<span class="code-line"><span class="o">(</span></span>
<span class="code-line"><span class="nv">allusb</span><span class="o">=</span><span class="k">$(</span>usbip list -p -l<span class="k">)</span></span>
<span class="code-line"><span class="k">for</span> usb in <span class="nv">$allusb</span></span>
<span class="code-line"><span class="k">do</span></span>
<span class="code-line"> <span class="nv">busid</span><span class="o">=</span><span class="k">$(</span><span class="nb">echo</span> <span class="s2">"</span><span class="nv">$usb</span><span class="s2">"</span> <span class="p">|</span> sed <span class="s2">"s|#.*||g;s|busid=||g"</span><span class="k">)</span></span>
<span class="code-line"> <span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$busid</span><span class="s2">"</span> <span class="o">=</span> <span class="s2">"1-1.1"</span> <span class="o">]</span></span>
<span class="code-line"> <span class="k">then</span></span>
<span class="code-line"> <span class="c1"># ignoring usb ethernet</span></span>
<span class="code-line"> <span class="k">continue</span></span>
<span class="code-line"> <span class="k">fi</span></span>
<span class="code-line"> <span class="nb">echo</span> <span class="s2">"</span><span class="k">$(</span>date -Iseconds<span class="k">)</span><span class="s2">: Exporting </span><span class="nv">$busid</span><span class="s2">"</span></span>
<span class="code-line"> usbip <span class="nb">bind</span> --busid<span class="o">=</span><span class="s2">"</span><span class="nv">$busid</span><span class="s2">"</span></span>
<span class="code-line"><span class="k">done</span></span>
<span class="code-line"><span class="o">)</span> >>/var/log/usbipall.log <span class="m">2</span>><span class="p">&</span><span class="m">1</span></span>
</pre></div>
<p>這個腳本做了這樣幾件事。</p>
<ol class="arabic simple">
<li>調用 <code class="code">
usbip list --local</code>
列出本地所有 usb 設備。</li>
<li>針對每個設備<ol class="arabic">
<li>取出它的 busid</li>
<li>判斷是不是樹莓派的 USB 以太網卡,不是的話繼續</li>
<li>通過 <code class="code">
usbip bind --busid=</code>
命令把這個 usb 設備導出到網上</li>
</ol>
</li>
<li>最後把所有輸出記錄到 /var/log/usbipall.log 日誌裏面</li>
</ol>
<p>樹莓派這邊設置就完成了。從此之後插入的 usb 設備就會統統導出出去。</p>
<p>這裏需要注意一下,啓用了 udev 規則之後,就沒法插鍵盤鼠標到樹莓派上控制它了……我都是從另一端 ssh
上樹莓派操作的。如果有什麼地方設置錯誤,可能需要把樹莓派的 SD 卡拔下來插到電腦上,刪除掉 rules
文件……</p>
<p>仔細檢查設置正確了之後,重新載入 udev 規則,或者重啓樹莓派:</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="gp">#</span> systemctl restart systemd-udevd</span>
</pre></div>
<p>這樣樹莓派這邊就設置好了。</p>
</div>
<div class="section" id="arch-linux-pc">
<h2>設置 Arch Linux 的 PC 端</h2>
<p>同樣假設 PC 這邊也已經聯網。接下來同樣安裝 usbip 工具:</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="gp">$</span> sudo pacman -Syu usbip</span>
</pre></div>
<p>然後我寫了個小腳本去鏈接樹莓派端, <a class="reference external" href="https://github.com/farseerfc/dotfiles/blob/master/usbiprpi/usbiprpi3.sh">這個文件 usbiprpi3.sh 也在我的 dotfiles</a>:</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="ch">#!/bin/sh</span></span>
<span class="code-line"><span class="nv">rpi3</span><span class="o">=</span><span class="s2">"192.168.0.117"</span></span>
<span class="code-line"></span>
<span class="code-line">modprobe vhci-hcd</span>
<span class="code-line"></span>
<span class="code-line"><span class="nv">allusb</span><span class="o">=</span><span class="k">$(</span>usbip list -p -r <span class="nv">$rpi3</span> <span class="p">|</span> cut -d<span class="s2">":"</span> -f1 -s <span class="p">|</span> sed <span class="s1">'s|^[ \t]*||;/^$/d'</span><span class="k">)</span></span>
<span class="code-line"><span class="k">for</span> busid in <span class="nv">$allusb</span></span>
<span class="code-line"><span class="k">do</span></span>
<span class="code-line"> <span class="k">if</span> <span class="o">[</span> <span class="s2">"</span><span class="nv">$busid</span><span class="s2">"</span> <span class="o">=</span> <span class="s2">"1-1.1"</span> <span class="o">]</span></span>
<span class="code-line"> <span class="k">then</span></span>
<span class="code-line"> <span class="c1"># ignoring usb ethernet</span></span>
<span class="code-line"> <span class="k">continue</span></span>
<span class="code-line"> <span class="k">fi</span></span>
<span class="code-line"> <span class="nb">echo</span> <span class="s2">"Attaching </span><span class="nv">$busid</span><span class="s2">"</span></span>
<span class="code-line"> usbip attach --remote<span class="o">=</span><span class="nv">$rpi3</span> --busid<span class="o">=</span><span class="s2">"</span><span class="nv">$busid</span><span class="s2">"</span></span>
<span class="code-line"><span class="k">done</span></span>
</pre></div>
<p>其中腳本第一行填入上面記錄下來的樹莓派的 IP 地址,接下來腳本做了這麼幾件事:</p>
<ol class="arabic simple">
<li>用 modprobe 確認加載 vhci-hcd 通用虛擬鍵鼠驅動</li>
<li>用 <code class="code">
usbip list --remote=</code>
列出遠程設備上已經導出了的 USB 設備,取出他們的 busid</li>
<li>對每個設備用 <code class="code">
usbip attach</code>
接上該設備</li>
</ol>
<p>然後就已經準備妥當,接下來是見證奇蹟的時刻:</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="gp">$</span> sleep <span class="m">10</span><span class="p">;</span> sudo ./usbiprpi3.sh</span>
<span class="code-line"><span class="go">Attaching 1-1.4.3</span></span>
<span class="code-line"><span class="go">Attaching 1-1.4.1</span></span>
</pre></div>
<p>因爲只有一套鍵盤鼠標,所以先 sleep 個 10 秒,在此期間快速把鍵鼠拔下來插到樹莓派的 USB 口上去。
如果對自己手速沒自信也可以把時間設長一點。然後用 root 權限執行 usbiprpi3.sh 。</p>
<p>一切正常的話,先能觀測插上樹莓派的鍵盤鼠標被樹莓派初始化了一下,比如鍵盤燈會亮,
然後這些設備會被導出出去,從而鍵盤燈滅掉,然後 10 秒等待結束後他們被遠程接到了 PC 端,
又會被初始化一下,同時 PC 端這邊會有上述 Attaching 的輸出。然後鍵盤鼠標就能像平常一樣用啦。</p>
</div>
<div class="section" id="id3">
<h2>使用體驗</h2>
<p>因爲就是通過 IP 轉發 USB 嘛,所以就和普通地接 USB 的體驗差不多,當然前提是網絡環境足夠穩定。
在我家間隔 5 米到無線路由器的環境下,基本感覺不到網絡延遲的影響。
通過這種方式聊天上網應該和直接接 USB 設備完全一樣。本文就是在通過樹莓派轉發的前提下用鍵盤打字寫的。</p>
<p>不過如果網絡負載本身就很大的話,可能會一些延遲,比如我開着 OBS 直播打東方的時候,原本就手殘
的我感覺更加手殘了……</p>
<p>試過拿着樹莓派在房間到處走,走到無線信號覆蓋不到的地方, usbip 會斷掉,PC 上的現象就像是 USB
設備被拔下來了……所以如果無線網絡不穩的話,可能需要對上面腳本做個循環?不過那樣可能會用起來很彆扭吧。</p>
<p>以及,上述操作 usbip 是走 TCP 3240 端口,數據包大概完全沒有加密,所以考慮安全性的話,
最好還是在內網環境使用。不過轉念一想,萬一有別人接上了我導出出去的 USB ,也就是截獲我的鍵盤,
PC 這邊沒法 attach 設備了,應該馬上會發現吧。我敲打 sudo 之類命令的時候 shell 裏面沒有回顯,
就不會再繼續敲密碼了。而且似乎對攻擊者也沒有什麼好處?要是他 usb attach 到了我的設備上,
我就能控制他的鍵盤了耶~</p>
</div>
archlinux 上用 chrome 實現 透明計算 遠程登錄2015-02-13T20:39:00+09:002015-02-13T20:39:00+09:00farseerfctag:farseerfc.me,2015-02-13:/arch-chrome-remote-desktop.html
<p><a class="reference external" href="http://news.sciencenet.cn/htmlnews/2015/1/311393.shtm">透明計算</a>
具體是什麼,因爲他們沒有公開技術細節所以我並不知道,只是看
<a class="reference external" href="http://v.qq.com/page/h/v/q/h0145ebh1vq.html">公開出來的演示視頻</a>
,感覺似乎只要能從手機上遠程登錄系統桌面,就能算是透明計算了。
如果透明計算真是這個意思,那麼我似乎已經用着這個技術很多年了嘛。</p>
<p>Xorg 上常用的遠程桌面工具有很多,基於 VNC 協議的、基於NX的和基於 RDP 協議的都能找到,
直接 ssh X forwarding 效果也不錯。只是這些方案的一個 <strong>不太易用</strong> 的地方在於,需要
通過 ip 訪問到遠程的電腦,所以在跨越 NAT 之類的情況下不太容易使用。</p>
<p>於是今天介紹一個使用方便設置也簡單的方法: 通過 chrome-remote-desktop 在 archlinux
上使用遠程桌面。這個方案的優勢在於,藉助 Google 的雲端服務器(內部貌似是XMPP協議下的握手)
方便地實現了 NAT 穿透,無論什麼網絡環境基本都能使用。當然,要支持遠程登錄,
位於遠端的登錄的計算機必須一直開着 …</p>
<p><a class="reference external" href="http://news.sciencenet.cn/htmlnews/2015/1/311393.shtm">透明計算</a>
具體是什麼,因爲他們沒有公開技術細節所以我並不知道,只是看
<a class="reference external" href="http://v.qq.com/page/h/v/q/h0145ebh1vq.html">公開出來的演示視頻</a>
,感覺似乎只要能從手機上遠程登錄系統桌面,就能算是透明計算了。
如果透明計算真是這個意思,那麼我似乎已經用着這個技術很多年了嘛。</p>
<p>Xorg 上常用的遠程桌面工具有很多,基於 VNC 協議的、基於NX的和基於 RDP 協議的都能找到,
直接 ssh X forwarding 效果也不錯。只是這些方案的一個 <strong>不太易用</strong> 的地方在於,需要
通過 ip 訪問到遠程的電腦,所以在跨越 NAT 之類的情況下不太容易使用。</p>
<p>於是今天介紹一個使用方便設置也簡單的方法: 通過 chrome-remote-desktop 在 archlinux
上使用遠程桌面。這個方案的優勢在於,藉助 Google 的雲端服務器(內部貌似是XMPP協議下的握手)
方便地實現了 NAT 穿透,無論什麼網絡環境基本都能使用。當然,要支持遠程登錄,
位於遠端的登錄的計算機必須一直開着 Chrome Remote Desktop 的後臺服務。</p>
<div class="panel panel-default">
<div class="panel-heading">
Chrome Remote Desktop 插件</div>
<div class="panel-body">
<img alt="Chrome Remote Desktop 插件" class="img-responsive" src="//farseerfc.me/images/chrome-remote-desktop-plugin.png"/>
</div>
</div>
<div class="section" id="chrome-remote-desktop">
<h2><a class="toc-backref" href="#id5">Chrome Remote Desktop 的客戶端</a></h2>
<p>雖然可能有很多人不知道,不過 Chrome 內包括遠程桌面的功能很久了。只是這個功能的界面默認
沒有提供界面,要使用它需要安裝 Google 官方出品的
<a class="reference external" href="https://chrome.google.com/webstore/detail/chrome-remote-desktop/gbchcmhmhahfdphkhkmpfmihenigjmpp">remote-desktop 插件</a> 。
裝好之後遠程桌面的客戶端就準備好,可以用來遠程訪問別的計算機桌面了(無論是 Windows/OS X
還是 Linux 都支持)。並且不光可以自己遠程訪問自己賬戶的桌面,還可以遠程協助朋友的桌面。</p>
</div>
<div class="section" id="archlinux">
<h2><a class="toc-backref" href="#id6">Archlinux 上設置遠程登錄的服務器</a></h2>
<p>有了客戶端之後還要設置一下纔能讓桌面作爲遠程登錄的服務器。Windows 和 OS X 上 Chrome
會自動下載需要的安裝包,無腦下一步就能裝好了。Linux上由於發行版衆多,桌面配置各異,
所以需要一點手動配置。官方的設置步驟記載在 <a class="reference external" href="https://support.google.com/chrome/answer/1649523">這裏</a>
其中給出了 debian 用的二進制包和 Ubuntu 12.10 上的設置方式,以下設置是參考官方步驟。</p>
<p>首先要安裝 chrome-remote-desktop 這個包,這個包實際上對應了 Windows/OS X 上用安裝程序
安裝的 Remote Desktop Host Controller。 archlinux 上開啓了
<a class="reference external" href="https://github.com/archlinuxcn/repo">[archlinuxcn]</a>
倉庫的話,可以直接安裝打好的包。或者可以從
<a class="reference external" href="https://aur.archlinux.org/packages/chrome-remote-desktop/">AUR</a> 裝。</p>
<pre><span class="code-line">$ pacman -Ss chrome-remote-desktop<br/><span style="color:purple;font-weight:bold;">archlinuxcn/</span><span style="font-weight:bold;">chrome-remote-desktop </span><span style="color:green;font-weight:bold;">40.0.2214.44-1</span><br/>Allows you to securely access your computer over the Internet through Chrome.</span></pre><p>裝好之後從會說這麼一段話:</p>
<blockquote>
<p>groupadd:无效的组 ID “chrome-remote-desktop”</p>
<p>Please create ~/.config/chrome-remote-desktop folder manually, if it doesn't exist, or else you can't use CRD.
The needed files are created by the Chrome app, inside the chrome-remote-desktop folder, after Enabling Remote Connections.
To {enable,start} the service use systemctl --user {enable,start} chrome-remote-desktop</p>
<p>You may need to create a ~/.chrome-remote-desktop-session file with commands to start your session</p>
<p>Go to <a class="reference external" href="https://support.google.com/chrome/answer/1649523">https://support.google.com/chrome/answer/1649523</a> for more information.</p>
</blockquote>
<p>那句報錯是 AUR 裏打的包還沒跟上上游 Google 的更改導致的錯誤,
首先我們需要把遠程登錄的用戶添加入 chrome-remote-desktop 這個用戶組裏。
新版本的 chrome remote desktop 提供了一個命令做這個事情,所以執行以下命令就可以了:</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="gp">$</span> /opt/google/chrome-remote-desktop/chrome-remote-desktop --add-user</span>
</pre></div>
<p>然後我們需要手動創建 <code class="code">
~/.config/chrome-remote-desktop</code>
這個文件夾,內容是空的
就好了,隨後 chrome 會往這裏面放 <code class="code">
host#.json</code>
文件用於身份驗證。</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="gp">$</span> mkdir ~/.config/chrome-remote-desktop</span>
</pre></div>
<p>然後我們要創建一個 shell 腳本 <code class="code">
~/.chrome-remote-desktop-session</code>
,這是遠程
登錄時的 .xinitrc ,內容麼就是啓動你想在遠程登錄時用的桌面環境。
這裏可以指定一個和你正在登錄的 WM/DE 不同的桌面,比如我啓動 xfce4:</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="gp">$</span> cat ~/.chrome-remote-desktop-session</span>
<span class="code-line"><span class="gp">#</span>!/bin/bash</span>
<span class="code-line"><span class="go">startxfce4</span></span>
<span class="code-line"><span class="gp">$</span> chmod <span class="m">755</span> .chrome-remote-desktop-session</span>
</pre></div>
<p>接下來需要從 Chrome 的插件裏啓用遠程桌面。打開 Chrome 的 Remote Desktop 插件,這時
應該可以看到一個「啓用遠程鏈接」的按鈕。</p>
<div class="figure">
<img alt="Chrome Remote Desktop 插件中「啓用遠程鏈接」的按鈕" class="img-responsive" src="//farseerfc.me/images/chrome-remote-desktop-enable-button.png"/>
<p class="caption">Chrome Remote Desktop 插件中「啓用遠程鏈接」的按鈕</p>
</div>
<div class="alert alert-warning compound">
<p>在撰寫本文的時候, Archlinux 官方源裏的 chromium 的版本和 aur/google-chrome
的版本尚且還是 40.0.2214.111 ,而 Chrome Web Store 中提供的 Chrome Remote
Desktop 的插件的版本是 41.0.2272.41 。雖然通常並不要求兩者版本一致,不過貌似最近
Chrome 內部的 Remoting 功能更改了 API 導致可能出問題。如果你找不到
「啓用遠程鏈接」的按鈕,請嘗試一下新版本的 Chrome 比如 google-chrome-dev 。
在這一步啓用之後,老版本的 chrome 應該也就能使用遠程桌面了。</p>
</div>
<div class="alert alert-warning compound">
<p>在32位的 Linux 版本上,最近更新的 Chrome Remote Desktop 插件可能無法正確識別 Host
的版本,具體 <a class="alert-link reference external" href="https://code.google.com/p/chromium/issues/detail?id=332930">參考這個 bug</a> 。</p>
</div>
<p>點擊「啓用遠程鏈接」,設定一個 PIN 密碼(不需要很複雜,這裏首先有 Google 帳號驗證保證只有
你纔能訪問),然後就能看到這套電腦的 hostname 出現在「我的電腦」列表裏。</p>
<div class="figure">
<img alt="啓用遠程鏈接之後的樣子" class="img-responsive" src="//farseerfc.me/images/chrome-remote-desktop-after-enabled.png"/>
<p class="caption">啓用遠程鏈接之後的樣子</p>
</div>
<p>同時,啓用了遠程鏈接之後,可以在剛剛創建的 ~/.config/chrome-remote-desktop
文件夾中找到記錄了驗證信息的文件。</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="gp">$</span> ls .config/chrome-remote-desktop</span>
<span class="code-line"><span class="go">chrome-profile host#8cfe7ecfd6bb17955c1ea22f77d0d800.json pulseaudio#8cfe7ecfd6</span></span>
</pre></div>
<p>然後就可以啓動對應的 systemd 用戶服務了,如果想自動啓動服務要記得 <code class="code">
systemctl --user enable</code>
:</p>
<div class="highlight"><pre><span class="code-line"><span></span><span class="gp">$</span> systemctl --user start chrome-remote-desktop.service</span>
</pre></div>
<p>如果上面的設置一切正常,就可以看到 chrome-remote-desktop 啓動了另外一個 Xorg 執行你
剛剛指定的桌面環境:</p>
<div class="figure">
<img alt="htop 中看到的 chrome-remote-desktop 啓動的另外一個 Xorg" class="img-responsive" src="//farseerfc.me/images/chrome-remote-desktop-htop.png"/>
<p class="caption">htop 中看到的 chrome-remote-desktop 啓動的另外一個 Xorg</p>
</div>
<p>然後就可以試着通過 Remote Desktop 插件登錄到這個新開的 Xorg 了:</p>
<div class="figure">
<img alt="「遠程」登錄到新的 XFCE4" class="img-responsive" src="//farseerfc.me/images/chrome-remote-desktop-xfce4.png"/>
<p class="caption">「遠程」登錄到新的 XFCE4</p>
</div>
</div>
<div class="section" id="linux-chrome-windows-os-x">
<h2><a class="toc-backref" href="#id7">Linux 版本的 Chrome遠程桌面 和 Windows/ OS X 上的區別</a></h2>
<p>通過上面的設置步驟也可以看出,Linux版本的遠程桌面會在後臺開一個獨立的 X 會話,而不能
復用現在已有的 X 會話。對遠程登錄的用法而言這還能接受,對遠程協助的功能而言有點問題,
因爲正在使用的人不能觀察協助者做了什麼,協助者也不能繼續請求協助的人的操作。</p>
<p>當然目前 Chrome 遠程桌面的 Linux Host Controller 還只是 beta 版本,官方只測試支持
Ubuntu 12.04 和 12.10 (14.04之後似乎有
<a class="reference external" href="https://code.google.com/p/chromium/issues/detail?id=366432">Bug</a>
),所以不能要求太多。希望以後能改善吧。</p>
</div>
<div class="section" id="bonus">
<h2><a class="toc-backref" href="#id8">Bonus: 手機遠程登錄</a></h2>
<div class="panel panel-default">
<div class="panel-heading">
手機上的 Chrome 遠程桌面 App</div>
<div class="panel-body">
<img alt="手機上的 Chrome 遠程桌面 App" class="img-responsive" src="//farseerfc.me/images/chrome-remote-desktop-android.png"/>
</div>
</div>
<p>通過上面的設置就可以從任何一個 Chrome 遠程桌面客戶端登錄剛剛設置的這臺電腦了。
因爲 Chrome 在三大桌面系統 Windows / OS X / Linux 上都有,所以應該能覆蓋大多數桌面
系統了。</p>
<p>除了桌面的 Chrome 之外還有一個客戶端是 Android 上的
<a class="reference external" href="https://play.google.com/store/apps/details?id=com.google.chromeremotedesktop">Chrome 遠程桌面 App</a> 經過上面的設置之後,從這個 App 也能看到並登錄:</p>
<div class="figure">
<img alt="手機遠程登錄" class="img-responsive" src="//farseerfc.me/images/chrome-remote-desktop-android-logined.png"/>
<p class="caption">手機遠程登錄</p>
</div>
<p>好啦,開始享受國家自然科學一等獎的透明計算技術吧!</p>
</div>