Vị trí mặc định cho các biểu tượng chỉ báo không mặc định?
Không có vị trí mặc định nơi các biểu tượng này được lưu trữ. Bất kỳ ứng dụng nào (nhà phát triển) có thể lưu trữ chúng ở nơi được coi là phù hợp.
Tuy nhiên , tin tốt là các chỉ số thường không cài đặt danh sách vô tận các tệp và hình ảnh. Chúng ta có thể giới hạn tìm kiếm của mình bằng cách (ngoài việc nhìn vào mã) nhìn vào đầu ra của lệnh:
dpkg-query -L <packagename>
Trong ví dụ của tôi về
dpkg-query -L placesfiles
điều này sẽ trong số những người khác, xuất ra các hình ảnh sau đây:
/opt/placesfiles/images/dir_icon.png
/opt/placesfiles/images/placesfiles64.png
/usr/share/pixmaps/placesfiles.png
... Điều đó sẽ làm cho việc tìm kiếm khá hạn chế.
Từ người đàn ông dpkg-query
:
-l, --list [package-name-pattern...]
List packages matching given pattern. If no package-name-pattern
is given, list all packages in /var/lib/dpkg/status, excluding
the ones marked as not-installed (i.e. those which have been
previously purged). Normal shell wildcard characters are allowed
in package-name-pattern. Please note you will probably have to
quote package-name-pattern to prevent the shell from performing
filename expansion. For example this will list all package names
starting with “libc6”:
Trong trường hợp của Radiotray , tôi đã tìm thấy các .png
tệp sau (đang chạy dpkg-query -L radiotray | grep png
):
/usr/share/radiotray/images/radiotray_connecting.png
/usr/share/radiotray/images/radiotray_on.png
/usr/share/radiotray/images/radiotray_off.png
/usr/share/radiotray/images/radiotray.png
/usr/share/pixmaps/radiotray.png
Nếu chúng ta thực sự cần tìm hiểu, tìm kiếm mã
... Chúng ta có thể xem qua (bên trong) các tệp đã cài đặt để tìm các kết quả của chuỗi "biểu tượng". Nhiều chỉ số được viết bằng một trong các ngôn ngữ script (như python
), có nghĩa là chúng có khả năng tìm kiếm rất tốt.
Một ví dụ
Một lần nữa sử dụng radiotray
ví dụ
dpkg-query -L radiotray | xargs grep icon
Trong đầu ra, chúng tôi tìm thấy áo:
/usr/lib/python2.7/dist-packages/radiotray/SysTrayGui.py
self.icon.set_from_file(APP_ICON_CONNECT)
Nhìn vào tập tin SysTrayGui.py
, chúng ta có thể thấy:
from lib.common import APPNAME, APPVERSION, APP_ICON_ON, APP_ICON_OFF, APP_ICON_CONNECT, APP_INDICATOR_ICON_ON, APP_INDICATOR_ICON_OFF
Từ đó, chúng ta có thể kết luận các biểu tượng được đề cập được xác định trong mô-đun common
bên trong thư mục (phụ) lib
. (Xem ở đây làm thế nào python tìm thấy nó các mô-đun, phần Subdirectories )
Trong mô-đun này, chúng ta có thể đọc phần:
# Media path
if os.path.exists(os.path.abspath('../data/images/')):
IMAGE_PATH = os.path.abspath('../data/images/')
else:
IMAGE_PATH = '%s/%s/images' % (datadir, APPDIRNAME)
# Images
APP_ICON = os.path.join(IMAGE_PATH, 'radiotray.png')
APP_ICON_ON = os.path.join(IMAGE_PATH, 'radiotray_on.png')
APP_ICON_OFF = os.path.join(IMAGE_PATH, 'radiotray_off.png')
APP_ICON_CONNECT = os.path.join(IMAGE_PATH, 'radiotray_connecting.gif')
APP_INDICATOR_ICON_ON = "radiotray_on"
APP_INDICATOR_ICON_OFF = "radiotray_off"
APP_INDICATOR_ICON_CONNECT = "radiotray_connecting"
... và ở đây chúng tôi ...
Tình huống đặc biệt
Với thực tế tất cả các chỉ số của mình, tôi đã tìm được các biểu tượng tương ứng bằng cách sử dụng (các) phương pháp ở trên.
Tuy nhiên, hóa ra là có thể, để biên dịch hình ảnh cùng với mã thành một tệp thực thi duy nhất. Không cần phải giải thích rằng trong những trường hợp như vậy, bạn sẽ không tìm thấy một hình ảnh riêng biệt, bạn cũng không thể thay thế chúng mà không cần chỉnh sửa mã và biên dịch lại.
Trường hợp của owncloud dường như là một trường hợp như vậy. Sử dụng (các) phương pháp trên cho thấy một tập hợp các biểu tượng đã được cài đặt bên trong /usr/share/icons/hicolor/<size>/apps
. Không có biểu tượng nào trong số này hóa ra được sử dụng tuy nhiên trong chỉ báo trên ubfox .
OP đã làm một số công việc trước đó (và sau đó), anh ấy đã hỏi câu hỏi này. Một trong số đó là chạy:
gdbus call --session --dest com.canonical.indicator.application --object-path /com/canonical/indicator/application/service --method com.canonical.indicator.application.service.GetApplications
... cung cấp cho chúng tôi một số thông tin hữu ích. Đầu ra bao gồm một phần:
('146028888067', 2, 'org.kde.StatusNotifierItem-22055-1', '/StatusNotifierItem/menu', '/tmp/iconcache-50ePXx', '', '', '', 'owncloud', 'ownCloud')
Nhìn vào thư mục /tmp/iconcache-50ePXx
, tôi thấy các biểu tượng chính xác được sử dụng bởi chỉ báo:
... dường như chứng minh những biểu tượng này được tạo ra một cách nhanh chóng; đóng owncloud làm cho thư mục và các biểu tượng của nó biến mất.
Hóa ra có thể thay đổi biểu tượng của chỉ báo bằng cách thay thế các biểu tượng này:
điều đó chứng tỏ đây thực sự là những biểu tượng mà chúng tôi đang tìm kiếm.
Tuy nhiên, để tự động hóa những gì tôi đã làm thủ công, sẽ cần một tập lệnh / trình bao bọc, vì tên thư mục đã tạo được thay đổi mỗi khi owncloud được khởi chạy. Tất nhiên, tùy chọn thuận tiện nhất sẽ là mã của máy khách riêng sẽ được thay đổi.
Xem thêm thảo luận của chúng tôi ở đây .
Còn tiếp...
dpkg -L
làm điều tương tự?