使用 .desktop 文件启动 node.js 应用程序

使用 .desktop 文件启动 node.js 应用程序

在 Ubuntu 16.04 中,我(最终)想要将一个文本文件拖放到桌面图标上并运行 Node.js 应用程序,处理拖放的文件并输出一个新文件。

我已经发现了.desktop文件,并正在尽力了解如何使用基本设置使该过程正常工作。我目前有三个文件:两个文件位于目录中,/home/blackslate/Utilities/一个文件位于我的桌面上。

实用程序文件

convert.js名为:的文本文件

const fs = require('fs');
const crypto = require('crypto');
const random = crypto.randomBytes(4).toString('hex');
const filename = random + '.txt'

fs.appendFile(filename, 'Hello ' + random + '!', function (err) {
  if (err) throw err;
  console.log(filename + ' saved');
});

名为的可执行文件convert.sh

#!/bin/sh
node ./convert.js

gnome-terminal -e "bash -c 'echo hello world; sleep 3'"

桌面文件

名为的可执行文件convert.desktop

[Desktop Entry]
Exec=gnome-terminal -e "/home/blackslate/Utilities/convert.sh \"%u\""
Icon=utilities-terminal
Type=Application
Name=Convert

事情的经过如下:

  1. 如果我node ./convert.js从终端窗口调用,我会看到:

    • 将创建一个新文件,其名称将显示在“终端”窗口中
  2. 如果我./convert.sh从终端窗口调用,我会看到:

    • 将创建一个新文件,并且其名称将显示在同一个终端窗口中
    • 第二个终端窗口打开,并显示hello world3 秒后关闭
  3. 如果我单击转换桌面文件,我会看到:

    • 打开一个终端窗口,显示一堆文本,然后立即关闭
    • 第二个终端窗口打开,并显示hello world3 秒后关闭
    • 没有创建新的文本文件

显然convert.sh文件中的第二个命令正在执行,但第一个命令似乎出了问题。我可以采取哪些步骤来调试和修复这个问题?

答案1

.desktop 可以轻松运行 bash 脚本

你应该在你的文件中进行以下更改convert.sh

#!/bin/bash
# set prompt to the working dir with cd
cd /home/blackslate/Utilities/
node ./convert.js

# You want some text notification? Use notify-send
notify-send -t 3000 'echo hello world'

请注意,您可以将节点./convert.js的输出重定向到变量并将其用作通知文本......
MYVAR=$(node ./convert.js)然后notify-send -t 3000 "Convert" "$MYVAR"

你可以在.desktop文件中做一些更改
在那里找到图标/usr/share/icons

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Exec='/home/blackslate/Utilities/convert.sh'
Name=Convert
Icon=utilities-terminal

相关内容