2015-12-10 56 views
9

Tôi đang sử dụng gnome-terminal để tạo ứng dụng dành cho máy tính để bàn có thể nhấp. Ứng dụng phải được tải xuống trong thư mục zip, với một thư mục con bin chứa số myapp.desktop của tôi. Tôi muốn có một thư mục khác nhau somedir trong tệp zip chứa tập lệnh ứng dụng chính và biểu tượng cho ứng dụng. Tuy nhiên, gnome-terminal dường như không hoạt động với các đường dẫn tương đối. Ở đây tôi myapp.desktop:ứng dụng dành cho máy tính để bàn với gnome-terminal: đường dẫn tương đối đến tập lệnh và biểu tượng

[Desktop Entry] 
Exec=gnome-terminal -e "bash -c -i 'exec $SHELL --init-file ../somedir/myscript.sh'" 
Icon=../somedir/myicon.gif 
Terminal=true 
Type=Application 

Câu hỏi của tôi là: làm thế nào tôi có thể vượt qua các thư mục mà từ đó các biểu tượng ứng dụng được nhấp để gnome-desktop? Hoặc làm cách nào để tôi có thể tổ chức thư mục của mình sao cho tôi không phải có myicon.gifmyscript.sh trong cùng một thư mục với số myapp.desktop?

Tôi biết đối số --working-directory đến gnome-terminal và cố gắng vượt qua $PWD, mà không thành công.

EDIT:

câu hỏi liên quan: Desktop Launcher for Python Script Starts Program in Wrong Path (Linux)

Một con đường có thể được xác định trong tập tin .desktop, nhưng một lần nữa, nó dường như không để đối phó với đường dẫn tương đối. Nếu tôi thêm Path=., thì không tìm thấy.

+2

Đây không phải là một câu hỏi gnome-terminal. Đây là câu hỏi về trình khởi chạy '.desktop'. Câu hỏi đặt ra là thông tin gì về tệp '.desktop' đang được khởi chạy, trình khởi chạy cung cấp cho quá trình sinh sản và nó có sẵn như các biến/etc. để sử dụng ** trong ** tệp '.desktop'. Tôi sẽ đoán rằng câu trả lời là không nhiều mà là sử dụng cho bạn cho việc này. –

+0

Đối với biểu tượng, tôi đồng ý, đó là sự cố trình khởi chạy '.desktop'. Nhưng sự kiện nếu tôi thực thi lệnh 'gnome-terminal' ở trên mà không có trình khởi chạy, nó chỉ tìm thấy' --init-file' 'myscript.sh' của tôi nếu nó nằm trong cùng thư mục với' myapp.desktop' của tôi hoặc nếu tôi đưa ra một con đường tuyệt đối. – user1981275

+0

Gọi một trình bao có tệp init, ví dụ: 'bash --init-file ../ somedir/myscript.sh' hoạt động tốt, nhưng dường như không hoạt động chính xác với các đường dẫn trong' gnome-terminal' – user1981275

Trả lời

4

Dựa trên điều này document và câu trả lời khác về hỏi ubuntu (như this hoặc this), tôi nghĩ rằng bạn không thể sử dụng đường dẫn tương đối trực tiếp trong ứng dụng máy tính để bàn. Tuy nhiên, bạn có thể giữ các tệp trong các thư mục mong muốn và bao gồm trong gói một kịch bản cấu hình sao chép tệp thực thi và biểu tượng trong đường dẫn mặc định, như được chỉ định trong tài liệu ($ PATH cho tệp thi hành và/usr/share/pixmaps cho biểu tượng).

Ngoài ra, here có cách giải quyết tốt. Và here một giải pháp giống như giải pháp tôi đã đề xuất.

Mọi người dường như đồng ý rằng nó không phải là có thể sử dụng đường dẫn tương đối nhưng ...

... tìm kiếm hơn một chút có vẻ như rằng có khả năng sử dụng các thư mục chính là điểm khởi đầu cho đường dẫn tương đối bằng cách bỏ dấu gạch chéo về phía trước trên đường dẫn. Dựa trên trang này (link) này:

Exec="${HOME}/bin/scripts/UNIX/Prototype.bash" 
    Path=${HOME}/bin/scripts/UNIX 

không hoạt động

Nhưng điều này:

Exec="Prototype.bash" 
    Path=bin/scripts/UNIX 

nên.

+0

Có thể có những tình huống mà môi trường nơi trình khởi chạy không nằm trong thư mục chính của bạn, nhưng là một bản hack nhanh và bẩn, điều này hứa hẹn một chút. – tripleee

1

Make rằng Exec như giống như thế này:

Exec=gnome-terminal -e "bash -c -i 'set > /tmp/env_vars.log'" 

Sau đó kiểm tra trên các tập tin log các biến sẵn (ví dụnơi nó đang chạy từ), và điều chỉnh đường dẫn tương đối của bạn cho phù hợp. Nếu không có bất cứ điều gì hữu ích, có thể sử dụng dirname trên một số biến hiện có để lấy đường dẫn đầy đủ vv

Bạn cũng có thể chạy như:

Exec=gnome-terminal -e "bash -c -i 'pwd' > /tmp/curdir.log" 

Và sử dụng đường dẫn tìm thấy trong curdir.log như một trong những liên quan đến.

+0

Tôi tìm thông tin từ nơi tập lệnh được khởi chạy trong tệp nhật ký ở đâu? Tôi đã tìm kiếm 'launcher' và 'gnome-terminal', nhưng không thể tìm thấy gì cả. – user1981275

+2

Nhật ký chỉ chứa đầu ra chính xác mà lệnh của bạn tạo ra. Lệnh 'set' chỉ đơn giản là in môi trường của bạn, tuy nhiên trong Bash bao gồm giá trị của' PWD'. Bạn có thể bao gồm 'date',' pwd' và các lệnh khác trong nhật ký để làm cho nó hữu ích hơn. Tuy nhiên, đây không phải là mạnh mẽ chống lại nhiều trường hợp đồng thời được bắt đầu trong kế nhanh chóng. – tripleee

+0

Đã cập nhật câu trả lời của tôi. – Eduardo

2

Phương pháp này không hoạt động vì $ PWD bên trong tệp .desktop, trỏ tới thư mục chính. Do đó bạn nên tạo tập lệnh cài đặt để tạo "myapp.desktop" và sao chép cả "myapp.desktop" và "icon.png "vào thư mục cụ thể. sao chép tập lệnh này vào thư mục gốc của ứng dụng của bạn và chạy nó!

install.sh

#!/bin/bash 

home_local=$HOME/.local/share 
icon_dir=$home_local/icons/hicolor/48x48/apps 

myapp_desktop=$home_local/applications/myapp.desktop 
myapp_dir=$PWD 
myapp=$myapp_dir/bin/myapp.sh 
myapp_icons=$myapp_dir/icons/myapp.png 

echo "[Desktop Entry]" > $myapp_desktop 
echo "Name=MyApp" >> $myapp_desktop 
echo "Exec=bash -c 'cd $myapp_dir;bash $myapp;exec bash'" >> $myapp_desktop 
echo "Icon=myapp.png" >> $myapp_desktop 
echo "Terminal=true" >> $myapp_desktop 
echo "Type=Application" >> $myapp_desktop 

cp $myapp_icon $icons_dir 
+0

cả giải pháp của bạn và @terence hill trông rất hứa hẹn, không thể kiểm tra nó trong các ngày lễ mặc dù vì Tôi không có máy ubuntu (với X) – user1981275

Các vấn đề liên quan