我想在 ubuntu 上打开一些来自 Windows 的文件。我转到 Windows 桌面并找到了我需要的文件,但它们都是 .lnk。Ubuntu 无法识别这些文件,所以我无法追溯它们的来源并使用 wine 打开它们。我使用的是 15.10 版本,但我很快就会升级到 16.04 版本。
答案1
在 Ubuntu 上,使用
Windows 快捷方式文件
(又名
.lnk
文件或
外壳链接) 的缺点是它们可能指向 Ubuntu 上不存在的路径,例如C:\Program Files
。相对路径可能类似,但存在路径分隔符问题(\
和/
)、不区分大小写的语义(在 Windows 上,“Program Files”和“program files”是同一个文件夹)和编码问题(如果路径包含除 ASCII 之外的字符怎么办?)。因此,即使 Ubuntu 上的文件管理器支持
专有格式
获取文件路径,但这并不意味着快捷方式可以在 Ubuntu 上运行,因为路径并不总是可移植的。
这就是说,
file
命令将为您提供有关链接文件的基本信息。
$ file 'Program Files - Shortcut.lnk'
Program Files - Shortcut.lnk: MS Windows shortcut, Item id list present, Points to a file or directory, Has Relative path, Read-Only, Directory, ctime=Tue Jul 14 09:20:08 2009, mtime=Wed Apr 24 03:36:46 2019, atime=Wed Apr 24 03:36:46 2019, length=12288, window=hide
如需更详细信息,您可以使用
lnkinfo
程序来自
liblnk-utils
包裹。查找“本地路径”和“相对路径”来追踪它们指向的位置。下面是输出示例,lnkinfo
以说明我的意思:
$ lnkinfo 'Program Files - Shortcut.lnk'
lnkinfo 20171101
Windows Shortcut information:
Contains a link target identifier
Contains a relative path string
Link information:
Creation time : Jul 14, 2009 03:20:08.555426400 UTC
Modification time : Apr 23, 2019 21:36:46.017274100 UTC
Access time : Apr 23, 2019 21:36:46.017274100 UTC
File size : 12288 bytes
Icon index : 0
Show Window value : 0x00003000
Hot Key value : 12288
File attribute flags : 0x00000011
Is read-only (FILE_ATTRIBUTE_READ_ONLY)
Is directory (FILE_ATTRIBUTE_DIRECTORY)
Drive type : Fixed (3)
Drive serial number : 0x0e1909c6
Volume label : Local Disk
Local path : C:\Program Files
Relative path : ..\..\..\Program Files
Link target identifier:
Shell item list
Number of items : 3
Shell item: 1
Item type : Root folder
Class type indicator : 0x1f (Root folder)
Shell folder identifier : 20d04fe0-3aea-1069-a2d8-08002b30309d
Shell folder name : My Computer
Shell item: 2
Item type : Volume
Class type indicator : 0x2f (Volume)
Volume name : C:\
Shell item: 3
Item type : File entry
Class type indicator : 0x31 (File entry: Directory)
Name : PROGRA~1
Modification time : Apr 23, 2019 21:36:48
File attribute flags : 0x00000011
Is read-only (FILE_ATTRIBUTE_READ_ONLY)
Is directory (FILE_ATTRIBUTE_DIRECTORY)
Extension block: 1
Signature : 0xbeef0004 (File entry extension)
Long name : Program Files
Localized name : @shell32.dll,-21781
Creation time : Jul 14, 2009 03:20:10
Access time : Apr 23, 2019 21:36:48
NTFS file reference : MFT entry: 878, sequence: 1
Distributed link tracking data:
Machine identifier : nathaniel-pc
Droid volume identifier : b2638d5e-f5b8-480c-bda0-fdb25ab91131
Droid file identifier : 968b84a2-a646-11e9-a124-0021cc6948e3
Birth droid volume identifier : b2638d5e-f5b8-480c-bda0-fdb25ab91131
Birth droid file identifier : 968b84a2-a646-11e9-a124-0021cc6948e3
答案2
默认情况下,Windows 中的程序安装到以下两个位置之一:
C:\Program Files
C:\Program Files (x86)
(仅当您安装 64 位时才会存在第二个。)
在 Ubuntu 上,这些路径转换为:
WindowsDriveName >> /Program Files
WindowsDriveName >> /Program Files (x86)
您将能够在任一文件夹中找到您的程序。
记住:许多 Windows 程序只能在安装它们的环境中运行。这意味着在 Ubuntu 中打开已安装在 Windows 中的程序可能无法正常工作,甚至根本无法正常工作。
最好的办法就是使用 Wine 运行您想要的应用程序的安装程序,这样它在 Ubuntu 中就有自己的环境。
答案3
这是安装 Epic Games Launcher 时创建的桌面条目的示例,这只是一个示例。
[Desktop Entry]
Comment[en_US]=
Comment=
Exec=env WINEPREFIX="/home/whitequill/Games/epic-games-store" wine C:\\\\Users\\\\whitequill\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start\\ Menu\\\\Programs\\\\Epic\\ Games\\ Launcher.lnk
GenericName[en_US]=
GenericName=
Icon=ED2E_EpicGamesLauncher.0
MimeType=
Name[en_US]=Epic Games Launcher
Name=Epic Games Launcher
Path=/home/whitequill/Games/epic-games-store/drive_c/Program Files (x86)/Epic Games/Launcher/Portal/Binaries/Win64/
StartupNotify=true
StartupWMClass=EpicGamesLauncher.exe
Terminal=false
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=
从示例中可以看出,Exec 下的命令是:
Exec=env WINEPREFIX="/home/whitequill/Games/epic-games-store" wine C:\\\\Users\\\\whitequill\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start\\ Menu\\\\Programs\\\\Epic\\ Games\\ Launcher.lnk
这显示了从桌面脚本执行 lnk 文件的过程,就像执行 lnk 文件一样。我建议遵循以下信息: Ubuntu 20.04 - WineHQ 6.0 - 为程序创建 .lnk 快捷方式 其中有以下脚本:
lnk () {
cat <<EOF > /tmp/shortcut.vbs
Set FSO = CreateObject("Scripting.FileSystemObject")
TargetPath = FSO.GetAbsolutePathName(WScript.Arguments(0))
WorkingDirectory = FSO.GetParentFolderName(TargetPath)
Set lnk = CreateObject("WScript.Shell").CreateShortcut(WScript.Arguments(1))
lnk.TargetPath = TargetPath
lnk.WorkingDirectory = WorkingDirectory
lnk.Save
EOF
wine wscript '//B' 'Z:\tmp\shortcut.vbs' "$@" 2> /dev/null
local exit_code=$?
sync; rm -f /tmp/shortcut.vbs; sync
return $exit_code
}
以下用于创建 lnk 文件的脚本用于创建新的 lnk,因为 lnk 可能无法正常工作。在此示例中,我尝试运行 Epic Games 商店,我需要创建一个新的链接,如下所示:
lnk 'Z:\home\whitequill\Games\epic-games-store\drive_c\Program Files (x86)\Epic Games\Launcher\Portal\Binaries\Win64\EpicGamesLauncher.exe' 'Z:\home\whitequill\Games\epic-games-store\drive_c\Users\whitequill\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Epic Games Launcher.lnk'
这就是您可以创建运行 Windows 快捷方式 (.lnk) 文件的桌面条目的方法。