Linux 下用 Wine 運行 Windows 程序,可以完成撥號上網、修改桌面解析度之類的操作嗎?

我是小白,聽說 Wine 模擬器可以模擬 Windows 程序,很好奇那可否操作 Linux 系統本身的一些東西諸如撥號上網,例如修改桌面解析度什麼的?因為我覺得 Wine 是不是相當於虛擬一個Windows 的環境,就相當於生成了一個 Windows 虛擬機,在這個虛擬機中運行 Windows 程序,沒辦法涉及到 Linux 本身。


  1. Wine 不是虛擬機,它是個翻譯器。如果 Wine 的作者高興給你加改解析度的東西並且你許可權夠,bingo。
  2. 問題是你沒有啊 233。
  3. 哦,撥號上網有時是可行的。一些為 Win9x 設計的登錄器似乎可以在 wine 裡面使目前機器上網。

有些人可能會糾結於題主將 Wine 稱作為模擬器的說法,其實這種說法按照 Wine 的原名 WINdows Emulator 看是可行的。然而,後來硬體模擬器崛起,Wine 便傲嬌地做出 Is Not 的強調來和這些 NDS GBA 模擬器、或者是一些虛擬機區分。看到題主的問題,我大概是知道為什麼了。很隨意地指出幾點不對的地方吧:

  • 虛擬機這種東西其實沒有什麼人用很徹底的隔離環境。就像文件共享,大部分人總歸還是要搞一個的。你只要有從虛擬機向外發出命令的方式,並且宿主機有東西接收,就足夠做各種操作了。最簡單粗暴的方法就是虛擬機播放熊孩子錄像,然後發出語音「不改解析度就打死你」。
  • Wine 虛擬的東西比虛擬機少得多了。Wine 只翻譯一下 ELF 文件,把裡面用到的 Windows 的東西轉換到對 X11、系統本身的直接命令之類的身上,而不是全套顯卡硬碟 CPU BIOS 都給你虛擬了然後在上面跑個 Windows。
  • Wine 默認的文件共享範圍是全局的,這點夠你爽了。
  • 正因為不虛擬硬體而直接翻譯,Wine 更能用好 3D 加速。例如,Wine 能完全支持 D3D9 硬體操作(所以你可以流暢地玩歐洲卡車模擬器)、能使用顯卡執行 CUDA 運算。
  • 然後問題回到你這玩意有沒有給對應的翻譯。問題就是沒有,至少我沒聽說過。
  • Wine 內部對於懶得找或者不方便找對應的東西有一套策略,那就是造個 Stub 擺著。例如我們有個 bool 類的函數,我們就讓它常年 return false。這樣用到它的程序不會死得很難看,只不過是某個操作常年像在 Windows 的某些情況下(例如沒裝印表機)那麼失敗而已,不至於直接崩掉(當然要是二逼程序員沒想到這點那我也沒轍)。


推薦閱讀:

一位貓奴的編程傳奇
dingo:一個安全可靠的DNS代理
2017 年成為 Linux 專家的 4 個熱門技能
應用層協議那些事
非 NTFS 的日誌式文件系統上,比如Ext4,能實現類似 Everything 這個軟體的利用日誌進行快速搜索的功能么?

TAG:Linux | Ubuntu | Wine應用 | 撥號上網 |