Я могу печатать, но только если я запустил свое приложение через терминал как su. Если я просто дважды щелкну по файлу jar, я могу запустить приложение, но оно не найдет принтер, поэтому не будет печатать. Guys 'n Girls, пожалуйста, дайте мне подсказку о:
Как я могу запустить приложение java jar без необходимости sudo? Или есть даже лучший подход для этого случая?
Добавьте своего пользователя к dialout
у группы как эта группа есть разрешение к последовательным устройствам чтения-записи tty*
или serial*
.
sudo usermod -a -G dialout $USER
Ссылка: Как я предоставляю некорневой доступ к/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
как корень:
a. Отмечание java
как setuid корень. ИЛИ
b. Используя sudo
, чтобы сказать, что приложение может быть запущено как корень без пароля. См. NOPASSWD
опция в /etc/sudoers
; или
Предоставляют весь пользовательский доступ к USB-устройству, упомянул:
a. Путем маркировки устройства как чтение-запись всеми; или
b. Путем маркировки устройства как setuid корень.
Это зависит , как приложение получает доступ к устройству, относительно которого будет работать опция. Я рекомендую пробовать опцию 2a сначала и проложить себе путь список.
Примечание, что при маркировке чего-либо как setuid корень, необходимо найти фактический двоичный файл /usr/lib/java-....-/bin/java
. setuid-root-ing символьная ссылка "альтернатив" не собирается работать.