Как дважды щелкнуть Java Jar и запустить его без sudo
Моя текущая ситуация:
- мой компьютер работает под управлением Xubuntu 16.04
- приложение java jar на рабочем столе Xubunutu
- термопринтер USB (модель: DigiPOS 920) подключен через USB к моему ПК
- Java-приложение общается с термопринтером через Java-POS, а не через CUPS.
Мой вопрос:
Я могу печатать, но только если я запустил свое приложение через терминал как su. Если я просто дважды щелкну по файлу jar, я могу запустить приложение, но оно не найдет принтер, поэтому не будет печатать. Ребята, девочки, пожалуйста, дайте мне подсказку о:
Как я могу запустить приложение java jar без необходимости sudo? Или есть даже лучший подход для этого случая?
2 ответа
Добавьте своего пользователя в
dialout
группа, так как эта группа имеет разрешение на чтение / запись последовательных устройствtty*
или жеserial*
,sudo usermod -a -G dialout $USER
Ссылка: Как мне разрешить не-root доступ к /ttyUSB0 12.04?
Если он имеет интерфейс параллельного порта
lp*
(как в текущем случае с DigiPOS 920) добавьте своего пользователя вlp
группа.sudo usermod -a -G lp $USER
Выход / Войти
Дальнейшие инструкции: если это не сработало, продолжайте с шагами ниже
Бежать
watch lsusb
подключите и отключите принтер, отредактируйте вопрос и добавьте информационную строку принтера, как показано в выводе.Бежать
watch "find /dev/ -iregex '.*lp.*' -printf '%p '; find /dev/ -iregex '.*tty.*' -printf '%p '"
Подключите и отключите принтер, отредактируйте вопрос и добавьте узел устройства, созданный при подключении принтера.
Добавьте вывод:
ls -l /dev/... udevadm info /dev/... udevadm info -a /dev/...
Быстрая проверка, изменение разрешения
sudo chmod +rw /dev/tty...
Попробуйте свою программу без
sudo
, это работает?Теперь мы должны добавить правило udev, чтобы сделать его постоянным.
У вас есть 4 варианта от наименее безопасного до наиболее безопасного:
Бежать
java
от имени пользователя root:а. маркировка
java
как корень setuid. ИЛИ ЖЕб. С помощью
sudo
сказать, что приложение может быть запущено от имени пользователя root без пароля. УвидетьNOPASSWD
вариант в/etc/sudoers
; или жеПредоставьте всем пользователям доступ к упомянутому USB-устройству:
а. Пометить устройство как доступное для чтения и записи всем пользователям; или же
б. Отметив устройство как корень setuid.
Зависит от того, как приложение обращается к устройству, и какая опция будет работать. Я рекомендую сначала попробовать вариант 2a и продвигаться вверх по списку.
Обратите внимание, что когда вы помечаете что-либо как setuid root, вы должны найти /usr/lib/java-....-/bin/java
, setuid-root-ing символическая ссылка "альтернативы" работать не будет.