Как дважды щелкнуть Java Jar и запустить его без sudo

Моя текущая ситуация:

  • мой компьютер работает под управлением Xubuntu 16.04
  • приложение java jar на рабочем столе Xubunutu
  • термопринтер USB (модель: DigiPOS 920) подключен через USB к моему ПК
  • Java-приложение общается с термопринтером через Java-POS, а не через CUPS.

Мой вопрос:

Я могу печатать, но только если я запустил свое приложение через терминал как su. Если я просто дважды щелкну по файлу jar, я могу запустить приложение, но оно не найдет принтер, поэтому не будет печатать. Ребята, девочки, пожалуйста, дайте мне подсказку о:

Как я могу запустить приложение java jar без необходимости sudo? Или есть даже лучший подход для этого случая?

2 ответа

Решение
  1. Добавьте своего пользователя в dialout группа, так как эта группа имеет разрешение на чтение / запись последовательных устройств tty* или же serial*,

    sudo usermod -a -G dialout $USER
    

    Ссылка: Как мне разрешить не-root доступ к /ttyUSB0 12.04?

    Если он имеет интерфейс параллельного порта 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, чтобы сделать его постоянным.

У вас есть 4 варианта от наименее безопасного до наиболее безопасного:

  1. Бежать java от имени пользователя root:

    а. маркировка java как корень setuid. ИЛИ ЖЕ

    б. С помощью sudo сказать, что приложение может быть запущено от имени пользователя root без пароля. Увидеть NOPASSWD вариант в /etc/sudoers; или же

  2. Предоставьте всем пользователям доступ к упомянутому USB-устройству:

    а. Пометить устройство как доступное для чтения и записи всем пользователям; или же

    б. Отметив устройство как корень setuid.

Зависит от того, как приложение обращается к устройству, и какая опция будет работать. Я рекомендую сначала попробовать вариант 2a и продвигаться вверх по списку.

Обратите внимание, что когда вы помечаете что-либо как setuid root, вы должны найти /usr/lib/java-....-/bin/java, setuid-root-ing символическая ссылка "альтернативы" работать не будет.

Другие вопросы по тегам