Adding LXDE taskbar shortcuts

OK, so after creating new menu entries & desktop shortcuts and after creating new menu sections, let’s see how to create taskbar shortcuts.

On my LXDE taskbar (which is actually called lxpanel in LXDE), you can see that I have a shortcut for leafpad and one for gedit:

To accomplish that, right click on the taskbar and choose the “Add/Remove Panel items” option. This brings up the “Panel Preference” dialog. From there, go to the “Panel Applets” tab which displays the different elements of your taskbar:

 

The “Spacer” plugin is just a way to add a separation between the different plugins. On the screenshot above, you can see that my second spacer is “stretched”, which means that all plugins that comes after it (System Tray + Digital Clock in my case) will end up on the right side.

OK, so to add application shortcuts, you need to add the “Application launch bar” plugin to your taskbar. To do this, just click on the “Add” button, select “Application launch bar” in the list of available plugins and put it in the 4th position:

 

Now select it, click on the “Edit button”: this will display the launch bar configuration dialog. The right side of the dialog displays the applications that are part of your start menu: simply add the ones that you want to the left side of the dialog.

 

And… that’s it !

Now if you don’t want to use graphical tools, here is the lxpanel configuration file that controls everything: ~/.config/lxpanel/LXDE/panels

Advertisements

Adding LXDE start menu sections (or “sub-menus”)

This is a follow-up to my previous post about adding LXDE start menu entries.

So you are now an expert in the .desktop file format and you know how to create one and how to “link” it to one of the existing LXDE start menu sections (Accessories, Graphics, Internet, Office, Other, Sound & Video, System Tools).

But what if you want to create a new section ? Or what if you want to add a sub-section to an existing section ? Well: easy as pie !

OK, I’m lying: you will need to create and edit some XML files, but isn’t this even more funny than clicking on a ¬†“create section” button in a UI ? ūüėČ

How the LXDE main menu is configured

The default LXDE start menu layout is configured here: /etc/xdg/menus/lxde-applications.menu

It’an XML file that contains a bunch of <Menu> tags describing the menu layout. On my Fedora box, the “Accessories” section is described like this:

<Menu>
   <Name>Accessories</Name>
   <Directory>lxde-utility.directory</Directory>
   <Include>
      <And>
         <Category>Utility</Category>
         <Not><Category>System</Category></Not>
      </And>
   </Include>
</Menu>

This translates to “the ‘Accessories’ section is described in the lxde-utility.directory file and a .desktop file will appear in this section if its category is ‘Utility’“. Said differently: “if you want your program shortcut it to be displayed in the ‘Accessories’ section, then create a .desktop file containing “Categories=Utility”“.

If you are looking for the directory that contains the .directory files, it’s here: usr/share/desktop-directories.

How to customize the main menu

To customize your start menu, you will NOT modify the global  /etc/xdg/menus/lxde-applications.menu file, but you will instead create a file that will contain your own extensions. This means that each user will be able to get its own customized menu:

  • Custom main menu extensions must be configured in¬†~/.config/menus/lxde-applications.menu
  • Custom .directory files must be created in ~/.local/share/desktop-directories

Exercise #1: creating a new section in the main menu

First, create this file: ~/.config/menus/lxde-applications.menu file:

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
<Menu>
   <Name>My Menu Extension</Name>
   <MergeFile type="parent">/etc/xdg/menus/lxde-applications.menu</MergeFile>
   <Menu>
      <Name>CustomMenu</Name>
      <Directory>custom_menu.directory</Directory>
      <Include>
         <And><Category>CustomMenuCategory</Category></And>
      </Include>
   </Menu>
</Menu>
  • The <MergeFile> tag says that we are going to extend the existing¬†/etc/xdg/menus/lxde-applications.menu configuration file.
  • Our new custom section is configured in the¬†~/.local/share/desktop-directories/custom_menu.directory file.
  • Each .desktop file containing¬†“Categories=CustomMenuCategory” will belong to this new section.

Next, create ~/.local/share/desktop-directories/custom_menu.directory:

[laurent@localhost desktop-directories]$ cat ~/.local/share/desktop-directories/custom_menu.directory
[Desktop Entry]
Encoding=UTF-8
Name=The Custom Menu Name

Then, create ~/.local/share/applications/custom_menu_entry.desktop (because the new section will not appear if there is no item inside):

[laurent@localhost applications]$ cat ~/.local/share/applications/custom_menu_entry.desktop
[Desktop Entry]
Name=custom menu entry
Exec=/usr/bin/foo
Comment=
Icon=
NoDisplay=false
Categories=CustomMenuCategory;
Type=Application

Finally, reload the menu by executing “lxpanelctl restart” and there you are:

Exercise #2: creating a sub-section in an existing main menu section

OK, we are now going to add a sub-section in the “Accessories” section.

First, the updated ~/.config/menus/lxde-applications.menu

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
<Menu>
   <Name>My Menu Extension</Name>
   <MergeFile type="parent">/etc/xdg/menus/lxde-applications.menu</MergeFile>
   <Menu>
      <!-- parent section name: -->
      <Name>Accessories</Name>
      <Menu>
        !-- our new sub-section name: -->
        <Name>SubMenu</Name>
        <Directory>sub_menu.directory</Directory>
        <Include>
           <And><Category>SubMenuCategory</Category></And>
        </Include>
     </Menu>
   </Menu>
</Menu>

So what’s happening here ? Well, we are nesting our new SubMenu under the existing Accessories menu.
In order for this to work, your must make sure that the parent section name (“Accessories” in this example), is spelled exactly as in /etc/xdg/menus/lxde-applications.menu

Then, ~/.local/share/desktop-directories/sub_menu.directory:

[Desktop Entry]
Encoding=UTF-8
Name=The Sub Menu Name

Then, ~/.local/share/applications/sub_menu_entry.desktop:

[Desktop Entry]
Name=sub menu entry
Exec=hellotheworld
Comment=
Icon=
NoDisplay=false
Categories=SubMenuCategory;
Type=Application

Finally, “lxpanelctl restart” and there you are:

Exercise #3: conditional fun

If you look at your existing /etc/xdg/menus/lxde-applications.menu file, you will see that you can use conditional expressions to define how your .desktop files are going to be linked to your menu sections.

For example, this section definition:

<Menu>
   <Name>Administration</Name>
   <Directory>lxde-settings-system.directory</Directory>
   <Include>
      <And>
         <Category>Settings</Category>
         <Category>System</Category>
      </And>
   </Include>
</Menu>

Means that a .desktop file will be linked to the “Administration” section if its categories are “Settings” and “System” (Categories=Settings;System)

And this section definition:

<Menu>
   <Name>Accessories</Name>
   <Directory>lxde-utility.directory</Directory>
   <Include>
      <And>
         <Category>Utility</Category>
         <Not><Category>System</Category></Not>
      </And>
   </Include>
</Menu>

Means that a .desktop file will be linked to the “Accessories” section if its categories are “Utility” and not “System”. So “Categories=Utility;Foo” will link the .desktop file to the Accessories section, and¬†“Categories=Utility;System” will link it to the “System Tools” section.

You can also use the <Xor> tag, but I guess that you can easily understand how it works.

Laurent KUBASKI

Restarting LXDE when it freezes/hangs

This is going to be of interest to no-one except me, but here it is:

  • Hit CTRL-ALT-F2 to switch to console mode (CTRL-ALT-F1 will bring you back to LXDE)
  • Kill the /usr/bin/X process
  • That’s it !

Understanding file associations in LXDE and PCManFM

Or “understanding how PCManFM decides which program to launch when you double-click on a file”

Or “understanding the list of suggested programs when you right-click on a file in PCManFM”

Or “making sense of the mimeinfo.cache, defaults.list and mimeapps.list crazyness”

The problem

Create a text file (text.txt) file in PCManFM and right click on it: PCManFM displays a list of possible application that can open the file:

Now if I double-click on the text.txt file, abiword (the first item highlighted in the screenshot above) is going to be launched.

  • Where does this “AbiWord – gedit- Leafpad” list come from ?
  • I want to use gedit instead of AbiWord when double-clicking on the file: how can I change this ?
  • I want my text file to be opened by a program that is not listed: how can I do this ?
  • Where in the world is Carmen SanDiego ?

Sit back and relax, I’m going to tell you the whole story.

At the beginning, there was the .desktop files

These files are mainly used to specify which elements are going to be displayed in the LXDE start menu and on your desktop. Check my creating LXDE shortcuts post for more information.

Then there was mimeinfo.cache

This file is located in /usr/share/applications/mimeinfo.cache and it is a basically a raw reverse cache for the .desktop information. Check this link for more information.

More precisely, each .desktop file on your system (which can be located either in /usr/share/applications, in /usr/local/share/applications or in ~/.local/share/applications) can contain a “MimeType” attribute which states the mimetype that the program associated to the .desktop file can handle.

On my Fedora installation, I have 3 text editors: Abiword, Leafpad and gedit and each one of them can open files that have a text/plain mimetype:


[laurent@localhost applications]$ cat fedora-abiword.desktop | grep text/plain
MimeType=application/x-abiword;text/x-abiword;text/x-xml-abiword;text/plain;

[laurent@localhost applications]$ cat gedit.desktop | grep text/plain
MimeType=text/plain;

[laurent@localhost applications]$ cat fedora-leafpad.desktop | grep text/plain
MimeType=text/plain;

Now if I have a look in mimeinfo.cache, I can find the reverse mapping that we just talked about:

[laurent@localhost applications]$ cat mimeinfo.cache | grep text/plain
text/plain=fedora-abiword.desktop;gedit.desktop;fedora-leafpad.desktop;

So this translates to “any file with a text/plain mimetype can be opened using either abiword, gedit or leafpad”.

Astute readers will notice that:

  • This list (abiword + gedit + leafpad) is exactly the one displayed in PCManFM when I right click on a file (see screenshot above).
  • The first item in this list (in my case: abiword) is the program that is launched when I double-click on a text file in PCManFM.

However, editing this mimecache.info file (to change the order of the .desktop files that are associated with the text/plain mimetype) is not what you want to do. The truth is you may lose all your changes after installing/removing a new Linux package.

This is because this file is generated by launching the “update-desktop-database” utility. This tool parses all your .desktop files and generates the mimeinfo.cache file… more or less each time you install a new package. This is where the defaults.list files join the party

Here comes defaults.list

defaults.list is a file where you configure the default program that should be used to open a file. To be very specific, this is where you configure the default “mime type -> .desktop file” association.

Like .desktop files, you can have a defaults.list file in any of the following locations (you can even have 3 files: one at each location).

  • /usr/share/applications
  • /usr/local/share/applications
  • ~/.local/share/applications

First, there is a global defaults.list file located in /usr/share/applications and then you can have one for each user, located in ~/.local/share/applications. As you can guess, the “user-level” file has higher priority than the “global one”.

If I only have a¬†/usr/share/applications/defaults.list file¬†that contains a “text/plain -> gedit.desktop” mapping, then double-clicking on a text file in PCManFM will open gedit, no matter what the ordering of mimeinfo.cache is:

[laurent@localhost applications]$ cat /usr/share/applications/defaults.list | grep text/plain
text/plain=gedit.desktop

But if I also have a ~/.local/share/applications/default.list file that contains a “text/plain ->¬†fedora-leafpad.desktop” mapping, then double-clicking on a text file in PCManFM will open leafpad (since this file has “higher priority” than the files in the 2 other locations).

[laurent@localhost applications]$ cat ~/.local/share/applications/defaults.list | grep text/plain
text/plain=fedora-leafpad.desktop

But wait, there is more !

The mimeinfo.cache, the defaults.list and the mimeapps.list

Yes that’s true, one more file to bother you (did I mention “crazyness” at the beginning of this post ?).

Now if you think that ~/.local/share/applications/defaults.list has higher priority than /usr/share/applications/defaults.list which has higher priority than /usr/share/applications/mimeinfo.cache”, you would still be incorrect because ~/.local/share/applications/mimeapps.list has even higher priority than all these bastards.

mimeapps.list allows you to:

  • add even more “right-click” options to PCManFM right click menu
  • set the default program for a mimetype (exactly like in defaults.list)

Although I’m not aware of any tool to help you deal with defaults.list file, there are at least 2 options to help you with mimeapps.list

OK, so let’s say that you would like to open your text file with yet another program that is not listed in the PCManFM right-click menu. Just choose the “Open with…” option and select an application. In my case, I’ll choose “Xpad”, and I’ll choose the “set selected application as default” option:

And there you are, xpad is now part of your right-click menu:

Behind the scene, PCManFM created a mimeapps.list file:


laurent@localhost applications]$ cat ~/.local/share/applications/mimeapps.list

[Added Associations]
text/plain=fedora-xpad.desktop;

[Default Applications]

text/plain=fedora-xpad.desktop

Another way to generate this file is to use the xdg-mime tool with “xdg-mime default fedora-xpad.desktop¬†text/plain”

So let’s recap

The list of program that is displayed when right-clicking on a file in PCManFM is the combination of:

  • mimeinfo.cache
  • mimeapps.list

The default program that is launched when you double-click on a file in PCManFM is (first match wins):

  • The one from ~/.local/share/applications/mimeapps.list
  • The one from¬†~/.local/share/applications/defaults.list
  • The one from /usr/local/share/applications/defaults.list
  • The one from /usr/share/applications/defaults.list
  • The first one from /usr/share/applications/mimeinfo.cache

Laurent KUBASKI

Connecting to a Windows Shared Drive from LXDE using Gigolo

When using Ubuntu or/and GNOME, there are many ways to connect to a Windows shared drive… but how can we do this from LXDE ?

Well, you don’t need to install samba, you just need to use Gigolo:

Once Gigolo is started, it will happily sit in your taskbar: this is important to know since closing the application by clicking on the X icon will not really close it, but will put it back in the taskbar. You need to use the “File > Quit” option to correctly close it.

Using the “Help > Supported protocols” option will display the list of supported protocols. The only we are interested in is called “Windows Share (smb)”. If you don’t see it, then you need to install the gvfs-smb package using yum.

From there, click on “Connect”, choose “Windows Share” as the service type and enter your username/password/credentials:

Et voil√†: just right-click on the newly established connection and choose the “Open” option to see the files in the shared drive:

If you want to re-use your connection after closing and re-opening Gigolo, you need to create a bookmark:

The next time you open Gigolo, click on the bookmark dropdown list to display the list of existing bookmarks:

Laurent KUBASKI

Adding LXDE start menu entries and desktop shortcuts

Update: this post has been viewed more than 2,000 times, but no-one left a comment. It took me 2 hours to write it and it will only take you 2 minutes to leave a comment… what are you waiting for ?

Note: if you want to instead create a new start menu section or sub-sections (ie: “sub-menus”), check this post.

First, a screenshot to explain what I mean by “desktop shortcut”, “start menu section” and “start menu sub-section” (click on the image if you want to correctly see it):

menu_3

Adding start menu entries and/or desktop shortcuts (launchers) in LXDE is certainly not as easy as under Windows.

I’ve recently installed the cool hardinfo tool which is an application that lists all your computer hardware. Unfortunately, the hardfo installer doesn’t add any menu entry in the LXDE start menu (I’m talking about the one that is displayed when you click on the button located at the bottom left of your desktop).

OK, let’s add a menu entry for hardinfo by ourselves.

1. Adding a new menu entry

All menu entries correspond to a .desktop file, and these .desktop files can be in one of the following locations:

  • /usr/share/applications
  • /usr/local/share/applications
  • ~/.local/share/applications (note that this folder may not exist on a brand new LXDE installation, but you can create it manually)
[laurent@localhost applications]$ ll /usr/share/applications
total 460
-rw-r--r--. 1 root root  9693 Feb 18 20:18 authconfig.desktop
-rw-r--r--. 1 root root   177 Apr 20 05:11 eekboard.desktop
-rw-r--r--. 1 root root  1699 Feb 27 22:31 fedora-abiword.desktop
-rw-r--r--. 1 root root  6001 May 10 15:07 fedora-abrt.desktop

Creating a new menu entry simply means creating a new .desktop file. The format is detailed here or there, but you can choose to use the existing .desktop files that you have as a template.

Since .desktop files can be located in 3 different folders, which one should you use ? I suggest that you create your .desktop file in the ~/.local/share/applications folder. This way, the shortcuts that you create will not impact other users.

LXDE ships with a .desktop file editor called LXShortcut. It’s the application that is launched when you right click on a menu entry and choose the “Properties” option:

However, I think that this tool sucks for creating new menu entries. Here is why:

  • There is no way to create a .desktop file from the LXShortcut GUI: you need to specify the filename on the command line (“-o” option)
  • It uses different command line options to create (-o) and to edit (-i) .desktop files.
  • There is no way to edit the category name (ie: “where the entry is going to be located in the menu”).

For all these reasons, it’s just easier to use a text editor to create your .desktop file.

Here is mine:

[laurent@localhost applications]$ cat ~/.local/share/applications/hardinfo.desktop

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Hardware info
Name[en_US]=Hardware info
Exec=/usr/bin/hardinfo
Comment[en_US]=Hardware info
StartupNotify=true

As you can see, the ‘Exec’ property contains the location of the ‘hardinfo’ application.

Now launch “lxpanelctl restart” so that LXDE picks up your changes:

[laurent@localhost applications]$ lxpanelctl restart

Et voilà:

By default, your new menu entry is part of the ‘Other’ category.

What if you want to put in another category ? That’s where the ‘Categories’ property comes into play: valid values for this property are listed here.

Note that the ‘freedesktop’ categories do not directly map to the LXDE category names, so here is the mapping between LXDE categories and freedesktop categories:

  • Accessories <-> Utility
  • Graphics <-> Graphics
  • Internet <-> Network
  • Office <-> Office
  • Sound & Video <-> AudioVideo
  • System Tools <-> System

So if you want your shortcut to be part of the LXDE ‘Accessories’ category, you need to add the ‘Categories=Utility’ property:

[laurent@localhost applications]$ cat ~/.local/share/applications/hardinfo.desktop

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Hardware info
Name[en_US]=Hardware info
Exec=/usr/bin/hardinfo
Comment[en_US]=Hardware info
StartupNotify=true
Categories=Utility

2. Adding an application shortcut on your desktop

To add a shortcut on your desktop, right click on an existing menu entry and choose the ‘Add to desktop’ option.

In practice, this simply puts a copy of an existing .desktop file in the $HOME/Desktop folder:

[laurent@localhost ~]$ ll $HOME/Desktop
total 4
-rw-------. 1 laurent laurent 165 Jun 28 17:53 hardinfo.desktop

This means that if you want to create a desktop shortcut for an application that is not in your start menu, you just need to create a .desktop file in $HOME/desktop, as explained in the previous chapter.

Alternatively, you can right-click anywhere on your desktop and choose the “Shortcut” option: this will launch the “LXShortcut” tool.

3. Adding a folder shortcut on your desktop

This time, right clicking on your desktop and choosing “Create new > Shortcut” will not work since this can only be used to create application shortcut.

To create a folder shortcut, you need to manually create a .desktop file in the ~/Desktop folder.

For example, a shortcut for the /home/laurent/Documents folder would look like this:


[laurent@localhost Desktop]$ cat ~/Desktop/myOtherShortcut.desktop

[Desktop Entry]
Encoding=UTF-8
Type=Application
Icon=system-file-manager
Name=My Folder Shortcut
Exec=pcmanfm /home/laurent/Documents

Comment[en_US]=

Basically, we are are just asking pcmanfm to open the “/home/laurent/Documents” folder. Also, I’m using the pcmanfm “system-file-manager” icon, but you can choose to use any icon that you want.

3. Changing the shorcut icon

OK, one more LXDE madness: it looks like the icons can either be located in /usr/share/pixmaps or in /usr/share/icons.

I guess I need to study this and create a new post… stay tuned ūüėČ

Laurent KUBASKI