Virtualbox

點擊 Gnu/Linux 主機中的文件,以使用安裝在 VirtualBox 中的 MS-Windows 來賓中的應用程序打開

  • April 2, 2019

我希望能夠在 Oracle VirtualBox 的 Windows 客戶機中安裝的應用程序中打開 Linux 主機中的文件(點兩下)。

**詳細資訊:**我在 Linux 主機的 ~/Documents 文件夾中有 myfile.docx,MS Word 應用程序安裝了 Windows 來賓作業系統。目錄 ~/Documents 也安裝在 Windows 客戶機中的 Y:\ 路徑下,具有完全讀寫訪問權限。我還設置了 Windows 客戶機以與 Linux 主機無縫模式工作(這是 VBox 非常有吸引力的部分)。

現在,一旦我啟動了 Windows 客戶機,我就不想再為此煩惱了。我只想在 Linux 主機中點兩下 myfile.docx 以便它在 MS Word 中打開,僅此而已!(讓我們不要打擾這個 MS Word 的來源)。

事實上,作為第一步,我在 Linux 主機終端中使用以下命令打開了 myfile.docx 部分成功:

VBoxManage guestcontrol "Win07" run --exe "C:\\Program Files (x86)\\Microsoft Office\root\\Office16\\WINWORD.EXE" --username sbnwl --password myPassword -- WINWORD/arg0 "Y:\myfile.docx"

該文件立即在 MS Word 中打開。完美的!請注意,上述命令末尾的參數 (“Y:\myfile.docx”) 需要 Windows 樣式的絕對路徑。

現在我正在嘗試在路徑 ~/.local/shrare/applications 中創建一個桌面配置文件,內容如下:

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Type=Application
Name=word
NoDsiplay=true
Exec=VBoxManage guestcontrol "Win07" run --exe "C:\\Program Files (x86)\\Microsoft Office\root\\Office16\\WINWORD.EXE" --username sbnwl --password myPassword -- WINWORD/arg0 HOW-TO-SUPPLY-WINDOWS-STYLE-PATH-TO-THE-FILE-BEING-DOUBLE-CLICKED? 
Name[en]=Word
Icon=/usr/share/icons/word.png

有人知道如何在行尾用 Exec= 完成這個論點嗎?

感謝所有查看這裡並發表評論的人……

管理使用來賓應用程序點擊打開主機文件。現在,在使用 virtualbox 的 Linux 主機上,這是一種奇妙的體驗。

這是完整的解決方案!

步驟總結如下:

STEP1–> 確保滿足以下要求:

  1. 要打開的文件位於主機 LINUX 文件系統上(也支持子目錄)
  2. 主機的文件目錄安裝為 Y:\ 在 WINDOWS GUEST 中(最好具有寫入權限)
  3. 主機的下載目錄安裝為 Z:\ 在 WINDOWS GUEST 中(最好具有寫入權限)
  4. 主機的 $HOME 目錄在 WINDOWS GUEST 中安裝為 X:\(最好具有隻讀權限)

STEP2–> 您需要在 $HOME/.local/share/applications 路徑中創建一個名為“Word.desktop”(不帶引號)的桌麵條目文件,內容如下:

[Desktop Entry]
Version=1.0
Encoding=UTF-8
Type=Application
Name=Word 365
NoDsiplay=true
Exec=$HOME/.local/share/applications/muScripts/runWord %u
Name[en]=Word 365 ProPlus
Icon=/usr/share/icons/MSWord.png

在上面用使用者路徑替換 $HOME,例如 /home/user

STEP3–> 製作一個名為“runWord”(不帶引號)的執行檔,包含以下內容並將其放在目錄 $HOME/.local/share/applications/muScripts/

#!/bin/bash

# THIS PROGRAM (runWord) OPENS *.docx FILES ON LINUX HOST, WITH MS Word APPLICATION
# INSTALLED ON A WINDOWS GUEST (IN VirtualBox).

## STEP1--> CHECK FOLLOWING REQUIREMENTS ARE MET:
# 1. THE FILES ARE EITHER IN Documents OR Downloads OR any other DIRECTORY/SUB-DIRECTORY 
#    OF THE HOST FILESYSTEM (SUB-DIRECTORIES also supported)
# 2. THE host's Documents DIRECTORY IS MOUNTED AS Y:\ IN THE WINDOWS GUEST (preferably with write permissions)
# 3. THE host's Downloads DIRECTORY IS MOUNTED AS Z:\ IN THE WINDOWS GUEST (preferably with write permissions)
# 4. THE host's     $HOME directory IS MOUNTED AS X:\ IN THE WINDOWS GUEST (prefer with read-only permissions)

## STEP2--> YOU NEED TO CREATE A DESKTOP ENTRY FILE WITH FOLLOWING CONTENTS, IN THE
# $HOME/.local/share/applications PATH:
#
#[Desktop Entry]
#Version=1.0
#Encoding=UTF-8
#Type=Application
#Name=Word 365
#NoDsiplay=true
#Exec=/home/hostuser/.local/share/applications/muScripts/runWord %u
#Name[en]=Word 365 ProPlus
#Icon=/usr/share/icons/MSWord.png
#

## STEP3--> PLACE THIS FILE IN THE DIRECTORY $HOME/.local/share/applications/muScripts/

#
##--CODE DEVELOPERS/CONTRIBUTORS -- andpy73, sbnwl
##-- andpy73 https://forums.virtualbox.org/memberlist.php?mode=viewprofile&u=50134
##-- sbnwl https://forums.virtualbox.org/memberlist.php?mode=viewprofile&u=116543
##-- Original post at https://forums.virtualbox.org/viewtopic.php?f=7&t=91799
#

clear

#
# Check that we have got the correct number of parameters.
#
if [ "$#" -ne 1 ]; then
  echo "Warning: Remote script requires one parameter to be passed!"
#   exit
fi

#
# Check if the file exists in the host file system incase we are
# called from a terminal.
#
if [ ! -f "$1" ]; then
  echo "Warning: File not found in the host file system!"
  echo '         Make sure the file' $1 'exists!'
#   exit
fi

#
# Get the filename part from the full path given.
#
FILE=$(basename "$1")
nixPATH=$(dirname "$1")
echo 'Full UNIX path is:' $nixPATH

echo 'Opening' $FILE ' ...'
echo 'Full UNIX path of the file is:' $1

#
# Make a new executable file having WINDOWS_PATH as argument at the end of 
# VBoxManage command and write the command sting in it.
#
mkdir ~/.tmp
cd ~/.tmp
rm tmpfile
touch tmpfile
chmod +x tmpfile
printf 'VBoxManage guestcontrol "Win10" run --exe "C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\WINWORD.EXE" --username myWindowsUsername --password myWindowsPassword -- WINWORD/arg0 ' >> tmpfile

if [[ $1 == "$HOME/Documents/"* ]]; then
  echo "The file is in Documents folder, i.e., in Y:\ of Windows host!"
  prefix="$HOME/Documents"
  partPATH=${nixPATH#"$prefix"}
  echo 'Partial UNIX path is:' $partPATH
  winPATH=${partPATH//\//\\}
  echo 'Partial WINDOWS path is:' $winPATH
  echo 'Full WINDOWS path is:' '"'Y:\\$partPATH\\$FILE'"'
  echo '"'Y:\\$partPATH\\$FILE'"' >> tmpfile

elif [[ $1 == "$HOME/Downloads/"* ]]; then
  echo "The file is in Downloads folder, i.e., in Z:\ of Windows host!"
  prefix="$HOME/Downloads"
  partPATH=${nixPATH#"$prefix"}
  echo 'Partial UNIX path is:' $partPATH
  winPATH=${partPATH//\//\\}
  echo 'Partial WINDOWS path is:' $winPATH
  echo 'Full WINDOWS path is:' '"'Z:\\$partPATH\\$FILE'"'
  echo '"'Z:\\$partPATH\\$FILE'"' >> tmpfile

else
  echo "The file is elsewhere, i.e., in X:\ of Windows host! (If $HOME is mounted as X:\)"
  prefix="$HOME"
  partPATH=${nixPATH#"$prefix"}
  echo 'Partial UNIX path is:' $partPATH
  winPATH=${partPATH//\//\\}
  echo 'Partial WINDOWS path is:' $winPATH
  echo 'Full WINDOWS path is:' '"'X:\\$partPATH\\$FILE'"'
  echo '"'X:\\$partPATH\\$FILE'"' >> tmpfile
fi

#
# Show the contents of tmpfile (for only debugging purpose)
#
echo '-------------------------------------------------------------------------'
echo 'This is the content of tmpfile for debugging purpose:'
echo ' '
cat tmpfile
echo ' '
echo '-------------------------------------------------------------------------'

#
# Run the commands in tmpfile for opening the double-clicked file!
#
./tmpfile &
rm tmpfile

請確保在上述腳本文件中以printf ‘VBoxManage guestcontrol開頭的特定行中進行以下更改

  1. 將字元串Win10替換為安裝了 MS Office的Windows 來賓虛擬機的名稱。
  2. myWindowsUsername替換為您在 Windows 來賓作業系統上的登錄使用者名
  3. myWindowsPassword替換為您在 Windows 來賓作業系統上的登錄密碼

STEP4–> 將*主機文件系統中的 .docx 和 .doc 文件與程序“Word”相關聯。操作方法如下: 1. 轉到Linux 主機文件管理器中的任何文件 MS Word 文件 (.docx)(例如 nautilus、nemo、dolphin 等) 2. 右鍵點擊 *.docx 文件並點擊“屬性”在上下文菜單中。將彈出一個視窗。3. 點擊“打開方式”選項卡並滾動瀏覽可用應用程序列表。選擇“Word 365 ProPlus”,然後點擊視窗右下角的“設為預設值”。

就這樣!

下次只需在無縫模式下在 virtualbox 中啟動 Windows 機器(登錄後按 CTRL+L)就可以了。

*您只需在 Linux 文件管理器中直接點兩下 .docx 文件即可。

瞧,它們將立即在 MS Word 應用程序中打開。

看起來你已經完成了主要工作。現在您需要轉換名稱。我建議寫一個腳本。讓您的桌麵條目使用 Unix 文件名啟動腳本,然後讓腳本轉換名稱,並呼叫 VBoxManager(就像您在範例中所做的那樣)。

sed是你轉型中的朋友。

引用自:https://unix.stackexchange.com/questions/500708