如何双击 Java Jar 并在没有 sudo 的情况下启动它

如何双击 Java Jar 并在没有 sudo 的情况下启动它

我目前的情况:

  • 我的电脑运行的是 Xubuntu 16.04
  • Xubunutu 桌面上的 Java Jar 应用程序
  • USB 热敏打印机(型号:DigiPOS 920)通过 USB 连接到我的电脑
  • Java 应用程序通过 Java-POS 而不是通过 CUPS 与热敏打印机通信

我的问题:

我可以打印,但前提是我已通过终端以 su 身份启动了我的应用程序。如果我双击 jar 文件,我可以启动应用程序,但它找不到打印机,因此无法打印。各位,请给我一点提示:

如何在不需要 sudo 的情况下启动 java jar App?或者对于这种情况还有更好的方法吗?

答案1

  1. 将您的用户添加到dialout组,因为该组有读/写串行设备tty*或的权限serial*

    sudo usermod -a -G dialout $USER
    

    参考:如何在 12.04 上允许非 root 访问 /ttyUSB0?

    如果它具有并行端口接口lp*(如 DigiPOS 920 的当前情况)请将您的用户添加到lp组中。

    sudo usermod -a -G lp $USER
    
  2. 登出/登录


进一步说明:如果不行,请继续以下步骤

  1. 运行watch lsusb,插入和拔下打印机,编辑问题并添加打印机信息行,如输出中所示。

  2. 跑步

    watch "find /dev/ -iregex '.*lp.*' -printf '%p '; find /dev/ -iregex '.*tty.*' -printf '%p '"
    

    插入和拔下打印机,编辑问题并添加插入打印机时创建的设备节点。

  3. 添加输出:

    ls -l /dev/...
    udevadm info /dev/...
    udevadm info -a /dev/...
    
  4. 快速测试,更改权限

    sudo chmod +rw /dev/tty...
    

    尝试一下不使用你的程序sudo,它可以工作吗?

  5. 现在,我们应该添加一个 udev 规则来使其永久生效。

答案2

您有 4 个选项,从最不安全到最安全:

  1. java以 root 身份运行:

    a. 标记java为 setuid root。或者

    b. 使用sudo表示应用程序可以以 root 身份运行而无需密码。请参阅NOPASSWD中的选项/etc/sudoers;或

  2. 授予所有用户访问上述 USB 设备的权限:

    a. 将设备标记为所有人可读写;或者

    b. 将设备标记为 setuid root。

这取决于如何应用程序正在访问设备以确定哪个选项有效。我建议先尝试选项 2a,然后按照列表逐步尝试。

请注意,当将任何内容标记为 setuid root 时,您必须找到实际的二进制文件 /usr/lib/java-....-/bin/java。setuid-root-ing“替代”符号链接将不起作用。

相关内容