Tại sao một số ứng dụng đang mở xuất hiện dưới dạng câu hỏi của Wap đánh dấu tên trong trình khởi chạy Unity?


22

Tôi gặp vấn đề với một vài chương trình có các trình khởi chạy thống nhất nhưng sau đó tạo một biểu tượng riêng sau khi khởi chạy. Có thể cho trình khởi chạy để theo dõi các cửa sổ mà nó sinh ra để tổ chức tốt hơn? Hay đây là một lỗi trong chính Unity?

nhập mô tả hình ảnh ở đây

Nó có thể không quan trọng nhưng chương trình cụ thể này là một chương trình đơn âm và biểu tượng được sinh ra được liệt kê dưới dạng bảng điều khiển.


@ j-johan-edwards: Tôi không chắc chương trình nào sẽ liên kết đến nhưng đó là KeePass2 có sẵn trong Trung tâm phần mềm.
Andrew Redd

Trong một số trường hợp, bạn có thể giảm bớt điều này bằng cách đặt thuộc StartupWMClasstính trong trình khởi chạy ứng dụng trên máy tính để bàn của ứng dụng: askubfox.com/questions/36434/ mẹo
Glutanimate

Câu trả lời:


23

Chuyện gì đang xảy ra

Các vấn đề như thế này liên quan đến khung kết hợp ứng dụng của Unity. Để đơn giản hóa các chi tiết kỹ thuật, cửa sổ chương trình và ứng dụng là hai thứ riêng biệt với Ubuntu. Ubuntu cần phải 'đoán' ứng dụng nào sở hữu một cửa sổ cụ thể. Và đôi khi đoán đó thất bại, và một dấu hỏi xuất hiện trong trình khởi chạy.

Sự thất bại có thể là do:

  1. Một lỗi trong BAMF (khung phù hợp với ứng dụng được đề cập ở trên).
  2. Mô tả ứng dụng bị lỗi (còn gọi là tệp '.desktop').
  3. Việc thiếu bất kỳ mô tả ứng dụng nào cả. Các tệp thực thi khởi chạy windows không có siêu dữ liệu này.

Ứng dụng hiển thị trong câu hỏi (KeePass2) bị sự cố loại 1 đã được báo cáo cho trình theo dõi lỗi thích hợp .

Ví dụ về các vấn đề

Các ví dụ dưới đây là kỹ thuật, nhằm vào các lập trình viên muốn ứng dụng của riêng họ hiển thị đúng trong trình khởi chạy Ubuntu.

Vấn đề 3 - Không có mô tả ứng dụng

Để ứng dụng được tích hợp với Unity, nghĩa là, có thể tìm kiếm trong Dash và được đặt trong launcher, nó cần phải có một mục trên máy tính để bàn. Entry như vậy được đặt trong /usr/share/applications/, /usr/local/share/applications/$HOME/.local/share/applications/(hai nước này là cho phần mềm của bên thứ ba, toàn hệ thống và người dùng chỉ tương ứng). Chúng kết thúc bằng một .desktopphần mở rộng và làm theo định dạng cơ bản này:

[Desktop Entry]
Type=Application
Name=My Application's Name
Icon=/file/path/of/my/icon
Exec=/file/path/of/my/executable

Mục này bắt đầu một chương trình bằng cách gọi Execthực thi. Bất cứ khi nào chương trình đó hiển thị một cửa sổ hoặc hộp thoại, Unity sẽ nhận thấy rằng "thuộc về" thực thi của nó đối với mô tả ứng dụng này và sử dụng cái đã cho NameIcontrong trình khởi chạy.

Đây là một ví dụ về barebones. Các đặc điểm kỹ thuật chính thức bao gồm nhiều tính năng nâng cao.

Vấn đề 2 - Mô tả ứng dụng bị lỗi

Chúng ta hãy giả sử rằng my_app.desktoptồn tại trong một thư mục ứng dụng hợp lệ, nhưng:

  • /file/path/of/my/icon không tồn tại trong hệ thống tập tin.
  • /file/path/of/my/icon không phải là một hình ảnh.
  • mục nhập sử dụng một số cú pháp không chính xác hoặc thẻ không hợp lệ.

Trong bất kỳ trường hợp nào ở trên, Ubuntu sẽ không thể liệt kê chính xác cửa sổ ứng dụng trong trình khởi chạy.

Vấn đề 1 - Một lỗi trong BAMF

Kể từ Ubuntu 11.10, BAMF có một số lỗi ngăn không cho ứng dụng khớp chính xác. Cạm bẫy phổ biến (tạm thời) bao gồm:

  • Đường Execdẫn là một liên kết tượng trưng chứ không phải là một tệp thông thường
  • Việc thực thi là một kịch bản khởi chạy chương trình thực thi chính.

Trong những trường hợp này, các lập trình viên không có lựa chọn nào khác ngoài sử dụng một cách giải quyết, chẳng hạn như loại bỏ trừu tượng liên kết tượng trưng hoặc liên kết trực tiếp đến tệp thực thi. Không phải cái nào trong số này được yêu cầu bởi chính đặc tả mục máy tính để bàn.


Một điều nữa. Bạn có thể có .desktopcác tệp cho cùng một ứng dụng cả trong ~/.local/share/applications//usr/share/applications/. Tệp đầu tiên ghi đè lên tệp thứ hai ngay cả khi biểu tượng không được chỉ định trong đó.

1

Cửa sổ chỉ có thể được khớp với ứng dụng nếu thuộc tính WM_CLASS đã được đặt. Để làm điều này trong X11, bạn sử dụng:

XSetClassHint( display, window, &class_hints );

Bạn cần chuyển một con trỏ đến cấu trúc XClassHint với trường 'res_name' và 'res_group'.


-1

Tôi đã gặp một số vấn đề với 16.04 bao gồm các biểu tượng màu xám và đôi khi bàn di chuột sẽ trở nên thất thường (Acer V15 nitro) cũng là trung tâm phần mềm (có thể là các biểu tượng khác) sẽ không mở từ biểu tượng (chỉ từ lệnh đầu cuối). Tôi tìm thấy một đề xuất ở đâu đó để gỡ cài đặt và cài đặt lại phần mềm gnome. Kể từ khi tôi làm điều này, toàn bộ hệ thống đã ổn định 100%, không còn các biểu tượng màu xám nữa và hoạt động hoàn hảo. Nó trông đáng sợ ban đầu khi tôi khởi động lại sau khi thay đổi này - rất nhiều thông báo hệ thống khi khởi động lại - vì vậy hãy tự chịu rủi ro.

sudo apt-get autoremove gnome-software && sudo apt-get install gnome-software

2
Điều này hoàn toàn không liên quan đến câu hỏi.
Martin Thornton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.