/txt

Emoji on Linux

(Updated 2017-08-20)

This page was originally a short article written in April 2015 about the state of emoji support on Gnu/Linux systems and the work to do in order to get a default working implementation. Now it also offers regular updates about emoji on Linux. Here is a list of what you will find here ; If you are simply simply looking to get emoji on your computer, or want a quick recap on what is to be done for a full implementation, you can jump to the first two sections.


For users

(As for 2017-06-17)

The current best option to display emoji on your Linux computer, especially if you use Firefox or another Mozilla-based browser, is to set up Brad Erickson’s Twemoji font. You’ll get the 2623 emoji from the latest Emoji 5.0/Unicode 10.0 standard, using Twitter’s designs. They’ll show up in full colour in Mozilla applications and as fallback stroke-only monochrome symbols elsewhere. Installation is explained at the link!

The best option to input emoji isn’t clear yet and widely depends on your desktop environment. If you plan to insert emoji mainly on the Web, you may want to try a browser add-on like the EmojiOne extensions or Emoji Helper. You’ll get an emoji picker in your toolbar. For other ways, scroll down and follow the updates.


For implementers

If you’re interested in how Emoji can be supported out of the box as a system default, the steps to follow would be:

  1. Get colour fonts working system-wide.
  2. Choose or design a free emoji font and ship it by default.
  3. Design and implement an emoji picker available from any text field.

Read on for more details about colour font technologies, free-licensed emoji fonts, and progress on emoji pickers.


Original article

(2015-04-01)

They are now working out of the box on Windows, Android, and Apple’s OSs. Emoji is this wide ensemble of standardised emoticons, each being one Unicode character but rendered as a colourful little symbol, and they are increasingly in use. They are not, however, supported on Gnu/Linux systems.

Yet. Here are some thoughts about implementing them by default in environments or distributions. Until then, we won’t see anything except for some Unicode boxes when someone else uses them, nor be able to use them without some copy-pasting from online lists.

Implement emoji display

The first thing about implementing emoji would be displaying emoji. There are two parts in this: the technical system involved for displaying the characters, and the visual design of the symbols.

The minimum viable way

That’s the answer to every ‘how can I see emoji?’ questions on Gnu/Linux forums: install the Symbola font. It is part of the Unicode fonts for ancient scripts, contains a glyph for most emoji, and thanks to the magic of font substitution for missing characters, it allows to see emoji. Not the in the best way: the symbols are not always well designed, and they are all black and white, which isn’t the expected emoji experience.

However, in the very short term, I believe every distribution would gain in installing the Symbola font by default, if only to not surprise in a bad way users who receive messages containing emoji. Packages are already available, like ttf-ancient-fonts in Ubuntu-based distributions and gdouros-symbola-fonts in Fedora-based ones; they should just be part of the default installation.


Left: an sign of love without anything.
Right: the same with Symbola set up. That’s already better.

The better ways

I see these ways to display emoji:

The first way is simply what we’ve seen previously with Symbola. Even with a better monochrome design, it’s still monochrome.

The second way is what Microsoft is doing. Each glyph in the font is linked to several layers, each having its own colour. When rendered, the layers are placed on top of each other. There’s a monochrome fallback for unsupported systems. I wonder how difficult or easy it is to build an implementation of this. After all, it’s a standard TrueType/OpenType font, with some more tables to read, and glyphs to render in different colour; I feel like mostly everything is ready to start implementing this!

I’ll pass over bitmap images to go directly to vector images. In this solution, we could have a /usr/share/emoji folder with all emoji in individual SVG files, named after their Unicode identifiers. There would be a system-wide system that display one of these SVG files at text size if a character is missing from the used font but available in the folder. Or for characters in the emoji Unicode ranges. Subfolders could also be used for different emoji styles/themes.

An SVG Font is also an interesting way to consider!

Visual design

An emoji display system isn’t much without an emoji set! As far as I know, and not counting the Symbola font and the old Android Emoji font, there are currently three freely licensed emoji sets:

There was also the Phantom Open Emoji project, but it’s not free anymore and was never entirely completed anyway. You can compare all the sets on this Commons page.


The same three emoji, rendered in Symbola, EmojiOne, Noto Color Emoji, and Twemoji. From emoji.codes.

Noto Color Emoji was designed by Google for the Noto fonts project; I believe it is what is displayed on Android devices. Twemoji was designed by Iconfactory and was open-sourced by Twitter some months ago; They are used in the web version of the service. EmojiOne is relatively new, and was designed by Domin Valida for Ranks; I don’t know of any large usage of it for now, but it’s really made for others to use.

All three are quite qualitative and could be good candidates for a default emoji set on Gnu/Linux. I would say any of them would be good, through EmojiOne has the advantage of not being associated with an existing environment like Android or Twitter, though it may not be the one that works the best at smallest sizes.

Adapting and extending an existing Gnu/Linux icon set, like the classic Tango, to include all emoji could be another source for the designs. I will try to draw up a table matching Freedesktop’s Icon Naming Specification to Unicode emoji. However, I think most required icons will be missing, and I believe most icon sets would be outdated stylistically, and above all not adapted to be displayed at text sizes as small icons.

Finally, we could have a whole new emoji set for Gnu/Linux users! That’s weeks if not months of full-time work, and the best way to get a qualitative and unified style in the first place would be to hire a designer or a team of designers. With visual guidelines, the set could then be expanded by the community. Each distribution could also have their own custom versions of it, matching their desktop feel.

Of course with the time, I’m sure there will be many great community-designed emoji sets like we have and always had themes and icon sets. We just need a first implementation.

Recap

How we should do to get emoji display on Linux:

Implement emoji insertion

Once we have working emoji display, we need a way to insert emoji. It probably means having a system-wide UI for browsing, selecting and typing emoji. The dialog would be accessible from any text field, with a keyboard shortcut and/or a contextual menu item. An additional standard UI element could allow developers to display a button, in or close to a text field, for opening the window.

If emoji is considered too anecdotal for a whole dedicated UI, the purpose of the window could be generalised into the insertion of special characters, emoji being one tab of it. It would greatly help inserting non-emoji symbols and foreign characters, what I believe would benefit many users.

Here are some examples of emoji pickers. Most of them sort the emoji into different categories, which is the behaviour recommended by Unicode:

‘The palettes need to be organized in a meaningful way for users. They typically provide a small number of broad categories, such as People, Nature, and so on. These categories typically have 100-200 emoji. Palettes may display the same symbol in multiple categories, to help users find a symbol in any category where they might reasonably expect to find it. More advanced palettes will have long-press enabled, so that people can press-and-hold on an emoji and have a set of related emoji pop up. This allows for faster navigation, with less scrolling through the palette.’


Mac OS X: A small emoji palette can be opened in any text field using a keyboard shortcut.


Mac OS X: Additionally, emoji is available among all other Unicode characters in the Characters window, accessible from a keyboard shortcut and an entry in every Edit menu.


Windows: Emoji is integrated into the virtual keyboard. There’s an emoticon button in one corner turning the keyboard into an emoji picker.


Emoji Helper is a cross-browser add-on and bookmarklet allowing to insert or copy emoji in any in-browser text field.

The palette won’t necessarily be the same across desktop and mobile environments, each following their own UI principles, but it would be great at first to get at least one working implementation of an emoji/characters picker! I’m going to work on designing some ideas for a proposed UI.

Next

There’s no end to this, except that I’d really like to see working emoji on Gnu/Linux! I’ll update the page as I find additional things.


Updates


Have I missed something or made a mistake? Got some news? Write to me 📧