นี่คือกรณีของฉัน ฉันมี .war ที่ฉันรันด้วยจาวาและใช้งานได้เฉพาะในโฟลเดอร์เท่านั้น:
ซีดี /opt/myappdir/
java -jar myapp.war
หมายเหตุ: มันไม่ทำงานเช่นนั้น:
java -jar /opt/myappdir/myapp.war
ฉันได้สร้างสคริปต์ทุบตี (sudo /opt/myappdir/run.sh
) เพื่อเปิดใช้คำสั่งนี้
#!/usr/bin/env ทุบตี
ซีดี /opt/myappdir/
java -jar myapp.war
จนถึงตอนนี้ทุกอย่างทำงานได้ ตอนนี้ปัญหา:
ฉันต้องการเปิดใช้งานจากทางลัดบนเดสก์ท็อป นี่คือทางลัดบนเดสก์ท็อปของฉันเพื่อเริ่มสงครามแอปของฉัน
[รายการเดสก์ท็อป]
การเข้ารหัส=UTF-8
เวอร์ชัน=1.0
ชื่อ = MyApp
ความคิดเห็น = เรียกใช้ MyApp
Type=ใบสมัคร
Exec=/opt/myappdir/run.sh
ไอคอน=/opt/myappdir/myapp.ico
เส้นทาง=/opt/myappdir/
เทอร์มินัล = เท็จ
แต่ตั้งแต่ myapp.war
ต้องรันด้วย sudo และใน มายแอปดีร์
ฉันแก้ไขของฉัน run.sh
สคริปต์ดังต่อไปนี้
#!/usr/bin/env ทุบตี
ซีดี /opt/myappdir/
dir=$(dirname $(readlink -m $BASH_SOURCE))
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY QT_X11_NO_MITSHM=1 java -jar myapp.war
ทำไมต้องไลน์ด้วย dir=$(dirname $(readlink -m $BASH_SOURCE))
?
เพราะฉันต้องแน่ใจว่า myapp.war
กำลังวิ่งเข้าไปข้างใน มายแอปดีร์
ทำไมต้องไลน์ด้วย pkexec
?
เพราะเมื่อดับเบิลคลิกที่ทางลัดบนเดสก์ท็อป ชวา
จำเป็นต้องดำเนินการด้วย ซูโด
ออก:
ข้อผิดพลาด: ไม่สามารถเข้าถึง jarfile myapp.war
บางคน ที่นี่ เสนอวิธีแก้ปัญหาสำหรับคำถามที่คล้ายกัน แต่ไม่ได้ผลสำหรับฉัน (แก้ไขข้อเสนอ :)
#!/usr/bin/env xdg-เปิด
[รายการเดสก์ท็อป]
เวอร์ชัน=1.0
Type=ใบสมัคร
เทอร์มินัล = เท็จ
Exec=java -jar 'myapp.war'
เส้นทาง=/opt/myappdir/
ชื่อ=myapp
ความคิดเห็น = myapp
ไอคอน=/opt/myappdir/myapp.ico
ฉันจะแก้ไขของฉันได้อย่างไร run.sh
สคริปต์ที่จะเรียกใช้ myapp.war
กับ ซูโด
ข้างใน มายแอปดีร์
และเรียกจากทางลัดบนเดสก์ท็อป? ขอบคุณ
อัปเดต
ตามที่มีคนอธิบาย ที่นี่, pkexec
ไม่ทำงานในไดเร็กทอรีเดียวกัน (ฉันเดาว่าเป็นสาเหตุที่ทำให้หาไม่พบ myapp.war
ไฟล์). ดังนั้นวิธีแก้ไขคือเรียกใช้คำสั่งที่จะบังคับให้เรียกใช้จาวาในไดเร็กทอรี แต่ฉันลองแล้วและล้มเหลว