单击 Gnu/Linux 主机中的文件,使用 VirtualBox 中 MS-Windows 客户机中安装的应用程序打开

单击 Gnu/Linux 主机中的文件,使用 VirtualBox 中 MS-Windows 客户机中安装的应用程序打开

我希望能够在 Oracle VirtualBox 的 Windows 客户机中安装的应用程序中打开 Linux 主机中的文件(双击)。

细节:我在 Linux 主机的 ~/Documents 文件夹中有 myfile.docx,并且 MS Word 应用程序安装了 Windows 客户操作系统。目录 ~/Documents 也安装在 Windows guest 虚拟机中的 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= 开头的行尾完成这个参数吗?

答案1

看起来你已经完成了主要部分。现在您需要转换名称。我建议写一个脚本。让您的桌面条目使用 Unix 文件名启动脚本,然后让脚本转换名称,并调用 VBoxManager(如您在示例中所做的那样)。

sed是您转型中的朋友。

答案2

感谢所有看过这里并发表评论的人......

设法使用访客应用程序单击打开主机文件。它是很棒的经历现在在 Linux 主机上使用 virtualbox。

这是完整的解决方案!

步骤总结如下:

STEP1--> 确保满足以下要求:

  1. 要打开的文件位于主机 LINUX 文件系统上(也支持子目录)
  2. 主机的文档目录在 WINDOWS 来宾中安装为 Y:\(最好具有写入权限)
  3. 主机的下载目录在 WINDOWS 来宾中安装为 Z:\(最好具有写入权限)
  4. 主机的 $HOME 目录在 WINDOWS GUEST 中安装为 X:\(最好具有只读权限)

步骤 2--> 您需要在 $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 'VBox管理访客控制

  1. 替换字符串WIN10和你的名字Windows 来宾虚拟机已安装 MS Office。
  2. 代替我的Windows用户名和你的登录用户名在 Windows 来宾操作系统上
  3. 代替我的Windows密码和你的登录密码在 Windows 来宾操作系统上

STEP4--> 将 *.docx 与主机文件系统中包含程序“Word”的 .doc 文件。操作方法如下: 1. 转到任何文件 MS Word 文件 (在 Linux 主机文件管理器(如 nautilus、nemo、dolphin 等)中打开 *.docx 文件 2. 右键单击​​ *.docx 文件,然后单击上下文菜单中的“属性”。将弹出一个窗口。 3. 单击“打开方式”选项卡并滚动浏览可用应用程序列表。选择“Word 365 ProPlus”,然后单击窗口右下角的“设为默认值”。

就这样!

下次只需以无缝模式在 virtualbox 中启动 Windows 计算机(登录后按 CTRL+L),然后就不用管它了。

您所需要做的就是直接在 Linux 文件管理器中双击 *.docx 文件。

瞧,它们将立即在 MS Word 应用程序中打开。

相关内容