Linux 下用 Wine 運行 Windows 程序,可以完成撥號上網、修改桌面解析度之類的操作嗎?
01-26
我是小白,聽說 Wine 模擬器可以模擬 Windows 程序,很好奇那可否操作 Linux 系統本身的一些東西諸如撥號上網,例如修改桌面解析度什麼的?因為我覺得 Wine 是不是相當於虛擬一個Windows 的環境,就相當於生成了一個 Windows 虛擬機,在這個虛擬機中運行 Windows 程序,沒辦法涉及到 Linux 本身。
- Wine 不是虛擬機,它是個翻譯器。如果 Wine 的作者高興給你加改解析度的東西並且你許可權夠,bingo。
- 問題是你沒有啊 233。
- 哦,撥號上網有時是可行的。一些為 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 這個軟體的利用日誌進行快速搜索的功能么?