MediaWiki API result

This is the HTML representation of the JSON format. HTML is good for debugging, but is unsuitable for application use.

Specify the format parameter to change the output format. To see the non-HTML representation of the JSON format, set format=json.

See the complete documentation, or the API help for more information.

{
    "continue": {
        "rvcontinue": "23536|789146",
        "continue": "||"
    },
    "warnings": {
        "main": {
            "*": "Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/postorius/lists/mediawiki-api-announce.lists.wikimedia.org/> for notice of API deprecations and breaking changes."
        },
        "revisions": {
            "*": "Because \"rvslots\" was not specified, a legacy format has been used for the output. This format is deprecated, and in the future the new format will always be used."
        }
    },
    "limits": {
        "backlinks": 500
    },
    "query": {
        "pages": {
            "982": {
                "pageid": 982,
                "ns": 0,
                "title": "CUPS",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Printers]]\n[[Category:Servers]]\n[[de:CUPS]]\n[[fr:CUPS]]\n[[ja:CUPS]]\n[[ru:CUPS]]\n[[zh-hans:CUPS]]\n{{Related articles start}}\n{{Related|CUPS/Printer sharing}}\n{{Related|CUPS/Printer-specific problems}}\n{{Related|CUPS/Troubleshooting}}\n{{Related|Samba}}\n{{Related|LPRng}}\n{{Related articles end}}\n\n[https://openprinting.github.io/cups/ CUPS] is the standards-based, open source printing system developed by OpenPrinting for Linux\u00ae and other Unix\u00ae-like operating systems.\n\nArch Linux packages the [https://openprinting.github.io/cups/ OpenPrinting CUPS fork], ''not'' the [https://www.cups.org/ Apple CUPS fork].\n\n== Installation ==\n\n[[Install]] the {{Pkg|cups}} package.\n\n{{Note| As drivers are deprecated in CUPS in favor of IPP Everywhere you may need to install {{Pkg|cups-pdf}} to get printing to work. Without this package you may see an error like: ''client-error-document-format-not-supported''. The package is needed because IPP Everywhere sends a PDF directly to the printer, therefore cups-pdf is needed to convert everything you want to print to a PDF first.}} \n\nOptionally, [[install]] the {{Pkg|cups-pdf}} package if you intend to \"print\" into a PDF document. By default, PDF files are stored in {{ic|/var/spool/cups-pdf/''username''/}}. The location can be changed in {{ic|/etc/cups/cups-pdf.conf}}.\n\nThen [[enable]] and [[start]] {{ic|cups.service}} or alternatively use [[#Socket activation|socket activation]] to only start CUPS when a program wants to use the service.\n\n=== Socket activation ===\n\n{{Pkg|cups}} provides a {{ic|cups.socket}} unit. If {{ic|cups.socket}} is [[enable]]d (and {{ic|cups.service}} is [[disable]]d), ''systemd'' will not start CUPS immediately; it will just listen to the appropriate sockets. Then, whenever a program attempts to connect to one of these CUPS sockets, ''systemd'' will start {{ic|cups.service}} and transparently hand over control of these ports to the CUPS process.\n\n=== Print steps ===\n\nIt is important to know how CUPS works if wanting to solve related issues:\n\n# An application sends a [[Wikipedia:PDF|PDF]] file to CUPS when 'print' has been selected (in case the application sends another format, it is converted to PDF first).\n# CUPS then looks at the printer's PPD file (printer description file) and figures out what filters it needs to use to convert the PDF file to a language that the printer understands (like PJL, PCL, bitmap or native PDF).\n# The filter converts the PDF file to a format understood by the printer.\n# Then it is sent to the back-end. For example, if the printer is connected to a USB port, it uses the USB back-end.\n\n== Connection interfaces ==\n\nAdditional steps for printer detection are listed below for various connection interfaces.\n\n=== USB ===\n\nTo see if your USB printer is detected, make sure you have the {{Pkg|usbutils}} package installed, then:\n\n{{hc|$ lsusb|\n(...)\nBus 001 Device 007: ID 03f0:1004 Hewlett-Packard DeskJet 970c/970cse\n}}\n\n=== Parallel port ===\n\nTo use a parallel port printer, the {{ic|lp}}, {{ic|parport}} and {{ic|parport_pc}} [[kernel modules]] are required.\n\n{{hc|# dmesg {{!}} grep -i parport|\nparport0: Printer, Hewlett-Packard HP LaserJet 2100 Series\nlp0: using parport0 (polling)\n}}\n\n=== Network ===\n\n==== Adding known location printers ====\n\nIt is not required to rely on dynamic printer discovery on the network (DNS-SD/mDNS) when the address of the printer is known (e.g. obtained via printers display or other network scanning approaches).\nA CUPS queue can be directly added to use the printer. Documentation for adding the queue with ''lpadmin''  can be found in following sections and official documentation at   [https://github.com/OpenPrinting/cups/tree/v2.4.7#setting-up-printers Setting up printers].\n\n==== Printer discovery ====\nTo discover, make use of discovered or share printers using DNS-SD/mDNS, setup [[Avahi#Hostname resolution|.local hostname resolution]] with [[Avahi]] and [[restart]] {{ic|cups.service}}.\n\n{{Note|DNS-SD is only supported when using [[Avahi]]. CUPS does not support using [[systemd-resolved]] for DNS-SD, see [https://github.com/apple/cups/issues/5452 CUPS issue 5452].}}\n\nTo share printers with [[Samba]], e.g. if the system is to be a print server for Windows clients, the {{Pkg|samba}} package will be required.\n\n== Printer drivers ==\n\n{{Expansion|CUPS is planning to drop PPD and driver support ([https://github.com/OpenPrinting/cups/issues/103 CUPS issue 103]), instead relying entirely on IPP Everywhere. Explain what is/will be handled by {{Pkg|cups}} and what by {{Pkg|cups-filters}} and/or other software.|section=CUPS printer drivers and backends are deprecated}}\n\nMost recent printers (2010+) support driverless usage by implementing AirPrint and/or IPP_Everywhere (c.f. below).\n\nThe drivers for a printer may come from any of the sources shown below. See [[CUPS/Printer-specific problems]] for an incomplete list of drivers that others have managed to get working.\n\nTo drive a printer, CUPS needs a PPD file and, for most printers, some [https://www.cups.org/doc/man-filter.html filters]. For details on how CUPS uses PPDs and filters, see [https://www.cups.org/doc/postscript-driver.html].\n\nThe [https://www.openprinting.org/printers OpenPrinting Printer List] provides driver recommendations for many printers. It also supplies PPD files for each printer, but most are available through [[#Foomatic|foomatic]] or the recommended driver package.\n\nWhen a PPD file is provided to CUPS, the CUPS server will regenerate the PPD files and save them in {{ic|/etc/cups/ppd/}}.\n\nTo test if they are working before creating a [[PKGBUILD]], PPD files can be manually added to {{ic|/usr/share/cups/''model''}}, the driver should be available after the next restart of the cups service.\n\n=== AirPrint and IPP Everywhere ===\n\nCUPS includes support for [[Wikipedia:AirPrint|AirPrint]] and [https://www.pwg.org/ipp/everywhere.html IPP Everywhere] printers. These should be discovered automatically.\n\n=== OpenPrinting CUPS filters ===\n\nThe Linux Foundation's OpenPrinting workgroup provides [https://wiki.linuxfoundation.org/openprinting/cups-filters cups-filters]. Those are backends, filters, and other binaries that were once part of CUPS but have been dropped from the project. They are available in the {{Pkg|cups-filters}} package that is a dependency of {{Pkg|cups}}.\n\nNon-PDF printers require {{Pkg|ghostscript}} to be installed. For PostScript printers, {{Pkg|gsfonts}} may also be required.\n\n=== Foomatic ===\n\nThe Linux Foundation's OpenPrinting workgroup's [https://wiki.linuxfoundation.org/openprinting/database/foomatic foomatic] provides PPDs for many printer drivers, both free and non-free. For more information about what foomatic does, see [https://www.openprinting.org/download/kpfeifle/LinuxKongress2002/Tutorial/IV.Foomatic-Developer/IV.tutorial-handout-foomatic-development.html Foomatic from the Developer's View].\n\nTo use foomatic, install {{Pkg|foomatic-db-engine}} and at least one of:\n\n* {{Pkg|foomatic-db}} \u2014 a collection of XML files used by foomatic-db-engine to generate PPD files.\n* {{Pkg|foomatic-db-ppds}} \u2014 prebuilt PPD files.\n* {{Pkg|foomatic-db-nonfree}} \u2014 a collection of XML files from printer manufacturers under non-free licenses used by foomatic-db-engine to generate PPD files.\n* {{Pkg|foomatic-db-nonfree-ppds}} \u2014 prebuilt PPD files under non-free licenses.\n\nThe foomatic PPDs may require additional filters, such as {{AUR|min12xxw}}.\n\n=== Gutenprint ===\n\nThe [https://gimp-print.sourceforge.net/ Gutenprint project] provides drivers for Canon, Epson, Lexmark, Sony, Olympus, Brother, HP, Ricoh, PCL printers and some generic printers for use with CUPS and [[GIMP]].\n\nInstall {{Pkg|gutenprint}} and {{Pkg|foomatic-db-gutenprint-ppds}}.\n\n{{Note|When the Gutenprint packages get updated, the printers using Gutenprint drivers will stop working until you run {{ic|cups-genppdupdate}} as root and restart CUPS. ''cups-genppdupdate'' will update the PPD files of the configured printers, see {{man|8|cups-genppdupdate}} for more details.}}\n\n=== Manufacturer-specific drivers ===\n\nMany printer manufacturers supply their own Linux drivers. These are often available in the official Arch repositories or in the [[AUR]].\n\nSome of those drivers are described in more detail in [[CUPS/Printer-specific problems]].\n\n== Printer URI ==\n\nListed below are additional steps to manually generate the URI if required. Some printers or drivers may need a special URI as described in [[CUPS/Printer-specific problems]].\n\n=== USB ===\n\nCUPS should be able to automatically generate a URI for USB printers, for example {{ic|1=usb://HP/DESKJET%20940C?serial=CN16E6C364BH}}.\n\nIf it does not, see [[CUPS/Troubleshooting#USB printers]] for troubleshooting steps.\n\n=== Parallel port ===\n\nThe URI should be of the form {{ic|parallel:''device''}}. For instance, if the printer is connected on {{ic|/dev/lp0}}, use {{ic|parallel:/dev/lp0}}. If you are using a USB to parallel port adapter, use {{ic|parallel:/dev/usb/lp0}} as the printer URI.\n\n=== Network ===\n\nIf you have set up [[Avahi]] as in [[#Network]], CUPS should detect the printer URI. You can also use {{ic|avahi-discover}} to find the name of your printer and its address (for instance, {{ic|BRN30055C6B4C7A.local/10.10.0.155:631}}).\n\nThe URI can also be generated manually, without using [[Avahi]]. A list of the available URI schemes for networked printers is available in the [https://www.cups.org/doc/network.html#PROTOCOLS CUPS documentation]. As exact details of the URIs differ between printers, check either the manual of the printer or [[CUPS/Printer-specific problems]].\n\nThe URI for printers on [[SMB]] shares is described in the {{man|8|smbspool}} man page.\n\n{{Note|Any special characters in the printer URIs need to be appropriately quoted, or, if your Windows printer name or user passwords have spaces, CUPS will throw a {{ic|lpadmin: Bad device-uri}} error.\nFor example, {{ic|smb://BEN-DESKTOP/HP Color LaserJet CP1510 series PCL6}} becomes {{ic|smb://BEN-DESKTOP/HP%20Color%20LaserJet%20CP1510%20series%20PCL6}}.\n  \nThis result string can be obtained by running the following command:\n\n $ python -c 'from urllib.parse import quote; print(\"smb://\" + quote(\"BEN-DESKTOP/HP Color LaserJet CP1510 series PCL6\"))'\n\n}}\n\nRemote CUPS print servers can be accessed through a URI of the form {{ic|ipp://''hostname'':631/printers/''queue_name''}}. See [[CUPS/Printer sharing#Printer sharing]] for details on setting up the remote print server.\n\nSee [[CUPS/Troubleshooting#Networking issues]] for additional issues and solutions.\n\n{{Warning|1=Avoid configuring both the server and the client with a printer filter\u2014either the print queue on the client or the server should be 'raw'. This avoids sending a print job through the filters for a printer twice (which can cause problems such as a shared printer working locally but a remote machine fails to print [https://bbs.archlinux.org/viewtopic.php?pid=1589908#p1589908]). See [[#lp*]] for an example of setting a print queue to 'raw'.}}\n\n== Usage ==\n\nCUPS can be fully controlled using the ''lp*'' and ''cups*'' CLI tools. Alternatively, the [[#Web interface]] or one of several [[#GUI applications]] can be used.\n\n* The ''queue'' name is a short but descriptive name used on the system to identify the queue. This name should not contain spaces or any special characters. For instance, a print queue corresponding to a HP LaserJet 5P could be named \"hpljet5p\". More than one queue can be associated with each physical printer.\n* The ''location'' is a description of the printer's physical location (for instance \"bedroom\", or \"kitchen\"). This is to aid in maintaining several printers.\n* The ''description'' is a full description of the print queue. A common use is a full printer name (like \"HP LaserJet 5P\").\n\n=== CLI tools ===\n\nSee [http://localhost:631/help/options.html CUPS local documentation] for more tips on the command-line tools.\n\n{{Note|Command-line switches cannot be grouped.}}\n\nUse SNMP to find a URI: \n\n $ /usr/lib/cups/backend/snmp ''ip_address''\n\n==== lp* ====\n\nThe ''lpinfo'' command lists the URI of the printers connected to your system with the {{ic|-v}} flag, and lists all of the available drivers (or \"models\", in CUPS parlance) installed on your system with {{ic|-m}}.\n\nThe ''lpadmin'' utility creates a new queue with {{ic|-p ''queue_name''}}. The {{ic|-E}} flag added to {{ic|-p}} enables and accepts jobs on the printer. The {{ic|-v}} flag specifies the device URI. The {{ic|-m}} flag specifies the driver (or \"model\", in CUPS parlance) or PPD file to use.\n\nYou can also use the {{ic|-x}} flag to remove a printer (read [[#cups*]] beforehand). \n\nExamples : \n\n # lpadmin -p HP_DESKJET_940C -E -v \"usb://HP/DESKJET%20940C?serial=CN16E6C364BH\" -m drv:///HP/hp-deskjet_940c.ppd.gz\n\nFor a driver-less queue (Apple AirPrint or IPP Everywhere): \n\n # lpadmin -p AirPrint -E -v \"ipp://10.0.1.25/ipp/print\" -m everywhere\n\nFor a raw queue; no PPD or filter: \n\n # lpadmin -p SHARED_PRINTER -m raw\n\nWhen specifying a PPD instead of a model: \n\n # lpadmin -p Test_Printer -E -v \"ipp://10.0.1.3/ipp/print\" -m pxlmono.ppd\n\n{{Note|\n* When specifying the PPD, use just the file name and not the full path (for instance, {{ic|pxlmono.ppd}} instead of {{ic|/usr/share/ppd/cupsfilters/pxlmono.ppd}}). Alternatively, the full path can be used with the {{ic|-P}} command line switch.\n* As of 2021, many recent printers support driverless printing setup and when specifying {{ic|-m everywhere}}, as in the second example above, the printer will be defined and a ''.ppd'' file will be created in {{ic|/etc/cups/ppd/}} by querying the printer on the network.\n}}\n\nThe ''lpq'' utility checks the queue. Add the {{ic|-a}} flag to check on all queue. \n\nThe ''lprm'' utility clears the queue. Add a {{ic|-}} to remove all entries instead of only the last one by default. \n\nThe ''lpr'' utility prints. Use {{ic|-# ''N''}} to print the file ''N'' times, use the {{ic|-p}} flag to add a header. \n\nExamples of test prints using ''lpr'': \n\n $ lpr /usr/share/cups/data/testprint\n $ echo 'Hello, world!' | lpr -p \n\nThe ''lpstat'' utility, used with the {{ic|-s}} flag, checks the status. The {{ic|-p}} flag allows to specify which queue to check. \n\nThe ''lpoptions'' utility uses the same {{ic|-p ''queue_name''}} flag as ''lpadmin'' shown above. With the {{ic|-l}} flag, it lists the options. The {{ic|-d}} flag sets the default printer with the argument {{ic|''queue_name''}}. The {{ic|-o}} flag sets options to a value: \n\n $ lpoptions -p HP_DESKJET_940C -o PageSize=A4\n $ lpoptions -p HP_DESKJET_940C -o cupsIPPSupplies=true -o Duplex=DuplexNoTumble\n\n==== cups* ====\n\nThe ''cupsaccept'', ''cupsdisable'', ''cupsenable'' and ''cupsreject'' utilities do as they are called. Respectively: setting the printer to accept jobs, disabling a printer, activating a printer, setting the printer to reject all incoming tasks. \n\nAs an example of their usage, we will cleanly remove a printer: \n\n # cupsreject ''queue_name''\n # cupsdisable ''queue_name''\n # lpadmin -x ''queue_name''\n\n==== ink ====\n\n[[Install]] {{AUR|ink}} to view the ink levels. \n\n{{Note|See [http://libinklevel.sourceforge.net/index.html#supported list of supported printers].}}\n\nAdd your user to the additional {{ic|lp}} [[user group]], log out and log in again.\n\nFor usage information, run {{ic|ink}} without options.\n\n=== Web interface ===\n\nThe CUPS server can be fully administered through the web interface, available on http://localhost:631/.\n\n{{Note|If an HTTPS connection to CUPS is used, it ''may'' take a very long time before the interface appears the first time it is accessed. This is because the first request triggers the generation of SSL certificates which can be a time-consuming job.}}\n\nTo perform administrative tasks from the web interface, authentication is required; see [[#Permissions]].\n\n;Add a queue\nGo to the '''Administration''' page. \n\n;Modify existing queues\nGo to the '''Printers''' page, and select a queue to modify.\n\n;Test a queue\nGo to the '''Printers''' page, and select a queue.\n\n=== GUI applications ===\n\nIf your user does not have sufficient privileges to administer CUPS, the applications will request the root password when they start. To give users administrative privileges without needing root access, see [[#Configuration]].\n\n* {{App|Deepin Print Manager|Printer configuration interface for Deepin desktop.|https://github.com/linuxdeepin/dde-printer|{{Pkg|deepin-printer}}}}\n* {{App|GtkLP|GTK interface for CUPS.|https://gtklp.sirtobi.com/index.shtml|{{AUR|gtklp}}}}\n* {{App|print-manager|Tool for managing print jobs and printers ([[KDE]]).|https://invent.kde.org/utilities/print-manager|{{Pkg|print-manager}}}}\n* {{App|system-config-printer|GTK printer configuration tool and status applet.|https://github.com/OpenPrinting/system-config-printer|{{Pkg|system-config-printer}}}}\n\n== Configuration ==\n\nThe CUPS server configuration is located in {{ic|/etc/cups/cupsd.conf}} and {{ic|/etc/cups/cups-files.conf}} (see {{man|5|cupsd.conf}} and {{man|5|cups-files.conf}}). After editing either file, [[restart]] {{ic|cups.service}} to apply any changes. The default configuration is sufficient for most users.\n\n=== Permissions ===\n\n==== Groups ====\n\n[[User group]]s with printer administration privileges are defined in {{ic|SystemGroup}} in the {{ic|/etc/cups/cups-files.conf}}. The {{ic|sys}} and {{ic|root}} and {{ic|wheel}} groups are used by default.\n\nCUPS helper programs are run as the {{ic|cups}} user and group. This allows the helper programs to access printer devices and read configuration files in {{ic|/etc/cups/}}, which are owned by the {{ic|cups}} group.\n\n{{Note|Prior to {{Pkg|cups}} 2.2.6-2, the {{ic|lp}} group [https://gitlab.archlinux.org/archlinux/packaging/packages/cups/-/commit/b6ebb9850aa9a27c27e668fe066d063a7711c15b was used instead]. After the upgrade, the files in {{ic|/etc/cups}} should be owned by the {{ic|cups}} group and {{ic|User 209}} and {{ic|Group 209}} set in {{ic|/etc/cups/cups-files.conf}}.}}\n\n==== Allowing admin authentication through PolicyKit ====\n\n[[PolicyKit]] can be configured to allow users to configure printers using a GUI without the admin password.\n\n{{Note|If you use system-config-printer, you need to install {{Pkg|cups-pk-helper}} for it to use PolicyKit.}}\n\nHere is an example that allows members of the wheel [[user group]] to administer printers without a password:\n\n{{hc|/etc/polkit-1/rules.d/49-allow-passwordless-printer-admin.rules|2=\npolkit.addRule(function(action, subject) { \n    if (action.id == \"org.opensuse.cupspkhelper.mechanism.all-edit\" && \n        subject.isInGroup(\"wheel\")){ \n        return polkit.Result.YES; \n    } \n});\n}}\n\n=== Default paper size ===\n\n{{Pkg|cups}} is built with {{Pkg|libpaper}} support and libpaper defaults to the [[Wikipedia:Letter (paper size)|Letter]] paper size (called {{ic|PageSize}} in {{ic|lpoptions}}). To avoid having to change the paper size for each print queue you add, [[textedit|edit]] {{ic|/etc/papersize}} and set your system default paper size. See {{man|1|paper}}.\n\n=== Archival PDF/A ===\n\nTo save PDF files in the highly compatible format, normally called Archival PDF, or PDF/A, or PDFA, or ISO 19005.\n\nThere is currently no option, so it must be added to the command used by cups to call ''gs''.\n\n{{Accuracy|{{ic|/etc/cups/cups.conf}} does not exist in the {{pkg|cups}} package so there is no {{ic|GSCall}} with default arguments in the comments.}}\n\n{{hc|/etc/cups/cups.conf|2=\n# GSCall %s -q -dCompatibilityLevel=%s -dNOPAUSE -dBATCH -dSAFER  -sDEVICE=pdfwrite -sOutputFile=\"%s\" -dAutoRotatePages=/PageByPage -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dPDFSETTINGS=/prepress -c .setpdfwrite -f %s\n\t\t\t\n# the above line shows the default for the GSCall value. Add -dPDFA before -dNOPAUSE and remove the comment prefix: (do not copy the line from here as it might have changed. use the \"default\" from your own file)\nGSCall %s -q -dCompatibilityLevel=%s '''-dPDFA''' -dNOPAUSE -dBATCH -dSAFER  -sDEVICE=pdfwrite -sOutputFile=\"%s\" -dAutoRotatePages=/PageByPage -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dPDFSETTINGS=/prepress -c .setpdfwrite -f %s\n}}\n\n=== Log files ===\n\nBy default, all logs are sent to files in {{ic|/var/log/cups/}}. \n\nThe log level can be changed in {{ic|/etc/cups/cupsd.conf}}. See [https://www.cups.org/doc/man-cupsd.conf.html cupsd.conf documentation].\n\nBy changing the values of the {{ic|AccessLog}}, {{ic|ErrorLog}}, and {{ic|PageLog}} directives in {{ic|/etc/cups/cups-files.conf}} to {{ic|syslog}}, CUPS can be made to log to the [[systemd journal]] instead. See [[Fedora:Changes/CupsJournalLogging]] for information on the original proposed change.\n\n=== cups-browsed ===\n\n{{Out of date|{{ic|cups-browsed.service}} is not required to discover printers advertised over DNS-SD, that is done by {{ic|cups.service}}. The service is only required to discover printers on an LDAP server and those using the legacy CUPS protocol (CUPS servers \u2264 1.5).}}\n\nCUPS can use [[Avahi]] browsing to discover unknown shared printers in your network. This can be useful in large setups where the server is unknown. To use this feature, set up [[Avahi#Hostname resolution|.local hostname resolution]], and start both {{ic|avahi-daemon.service}} and {{ic|cups-browsed.service}}. Jobs are sent directly to the printer without any processing so the created queues may not work, however driverless printers such as those supporting [https://www.pwg.org/ipp/everywhere.html IPP Everywhere] or [[Wikipedia:AirPrint|AirPrint]] should work out of the box.\n\n{{Note|1=<nowiki/>\n* Searching for network printers [https://bbs.archlinux.org/viewtopic.php?pid=1720219#p1720219 may significantly increase the time it takes for your computer to boot].\n* {{ic|cups-browsed.service}} is only needed to dynamically add and remove printers as they appear and disappear from a network. It is not required if you simply want to add a DNS-SD/mDNS supporting network printer to CUPS.\n}}\n\n=== Print servers and remote administration ===\n\nSee [[CUPS/Printer sharing]] and [[CUPS/Printer sharing#Remote administration]].\n\n=== Without a local CUPS server ===\n\nCUPS can be configured to directly connect to remote printer servers instead of running a local print server. This requires [[install]]ation of the {{Pkg|libcups}} package. Some applications will still require the {{Pkg|cups}} package for printing.\n\n{{Note|Accessing remote printers without a local CUPS server is not recommended by the developers. [https://lists.cups.org/pipermail/cups/2015-October/027229.html]}}\n\nTo use a remote CUPS server, set the {{ic|CUPS_SERVER}} [[environment variable]] to {{ic|printerserver.mydomain:port}}. For instance, if you want to use a different print server for a single [[Firefox]] instance (substitute {{ic|printserver.mydomain:port}} with your print server name/port):\n\n $ CUPS_SERVER=printserver.mydomain:port firefox\n\nTo make this configuration permanent create configuration file {{ic|/etc/cups/client.conf}} and add a hostname of the remote CUPS server to it:\n\n ServerName server\n\nYou can also specify a custom port:\n\n ServerName server:port\n\nSee [https://www.cups.org/doc/sharing.html#AUTO_IPP] for details.\n\n== Troubleshooting ==\n\nSee [[CUPS/Troubleshooting]] and [[CUPS/Printer-specific problems]].\n\n== See also ==\n\n* [http://localhost:631/help Official CUPS documentation], ''locally installed''\n* [[Wikipedia:CUPS]]\n* [https://wiki.linuxfoundation.org/openprinting/start OpenPrinting homepage]\n* [https://en.opensuse.org/Concepts_printing OpenSuSE Concepts printing guide - explains the full printing workflow]\n* [https://en.opensuse.org/SDB:CUPS_in_a_Nutshell OpenSuSE CUPS in a Nutshell - a quick CUPS overview]\n* [[Gentoo:Printing]]\n* [[debian:Printing|Debian's Printing portal - detailed technical guides]]\n* [[debian:SystemPrinting|Debian's printing overview - a basic view of the CUPS printing system]]\n* [https://lists.linuxfoundation.org/pipermail/printing-architecture/ CUPS mailing list]\n* [https://lists.cups.org/mailman/listinfo/cups CUPS mailing list (Apple fork)]\n* [https://github.com/OpenPrinting/cups/issues CUPS issues tracker]\n* [https://github.com/apple/cups/issues CUPS issues tracker (Apple fork)]"
                    }
                ]
            },
            "1068": {
                "pageid": 1068,
                "ns": 0,
                "title": "Adding Firefox Search Engines As User",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "#REDIRECT [[Firefox#Adding search engines]]"
                    }
                ]
            },
            "1167": {
                "pageid": 1167,
                "ns": 0,
                "title": "Browser plugins",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Web browser]]\n[[de:Browser Plugins]]\n[[ja:\u30d6\u30e9\u30a6\u30b6\u30d7\u30e9\u30b0\u30a4\u30f3]]\n[[zh-hans:Browser plugins]]\n{{Related articles start}}\n{{Related|Browser extensions}}\n{{Related articles end}}\n\nThere are two types of browser plugins, based on the plugin API they use:\n\n* Netscape plugin API ([[Wikipedia:NPAPI|NPAPI]]): these plugins work in some smaller browsers ([[Firefox]] and [[Chromium]] '''no longer''' support these plugins).\n* Pepper plugin API ([[Wikipedia:PPAPI|PPAPI]]): these plugins work in some smaller browsers ([[Chromium]] '''no longer''' supports these plugins).\n\n== Flash players ==\n\n=== Adobe Flash Player ===\n\n{{Warning|Adobe Flash Player support ended on 31 December 2020. As a result, the plugins are no longer supported in recent browsers. Additionally, the project will no longer receive any bug fixes or security updates.[https://www.adobe.com/products/flashplayer/end-of-life.html]}}\n\nA standalone version can be [[install]]ed with the {{AUR|flashplayer-standalone}} package, which continues to work without a time bomb. For the browsers that still support it, {{AUR|flashplugin}} (NPAPI) and {{AUR|pepper-flash}} (PPAPI) provide the last plugin from Adobe but patch it to remove the \"kill switch\" from it.\n\n=== Lightspark ===\n\n[https://lightspark.github.io/ Lightspark] is another attempt to provide a free alternative to Adobe Flash aimed at supporting newer Flash formats. Lightspark has the ability to fall back on Gnash for old content, which enables users to install both and enjoy wider coverage. Although it is still very much in development, it supports some [https://github.com/lightspark/lightspark/wiki/Status-of-Lightspark-support#support-for-various-websites-using-flash popular sites].\n\nLightspark can be [[install]]ed with the {{AUR|lightspark}} or {{AUR|lightspark-git}} package.\n\n=== Ruffle ===\n\n{{Merge|Browser extensions|This is confusing to readers, as this page is about plug-ins and while most of the content on our wiki regarding Flash is in this page, this should simply be a link to the proper page.}}\n\n[https://ruffle.rs/ Ruffle] is a Flash Player emulator written in [[Rust]]. It runs natively as a standalone application, or on modern browsers through the use of [[Wikipedia:WebAssembly|WebAssembly]]. Unlike Flash Player and Lightspark, Ruffle is only available in browsers as an [[browser extensions|extension]], not as a plug-in. While still being under active development, decent ActionScript 1.0/2.0 support is in place and improving; ActionScript 3.0 support is in early stages.\n\nTo run natively, Ruffle can be [[install]]ed with one of the {{AUR|ruffle-git}} or {{AUR|ruffle-nightly-bin}} packages. As another option, if you only want to play Flash on the web, it can be installed as a [https://addons.mozilla.org/firefox/addon/ruffle_rs/ Firefox extension] without installing the native packages.\n\n== Java (IcedTea) ==\n\n{{Note|Both Java plugins are NPAPI-only.}}\n\nTo enable [[Java]] support in your browser, you have two options: the open-source [[Wikipedia:OpenJDK|OpenJDK]] (recommended) or Oracle's proprietary version. For details about why OpenJDK is recommended see [https://lists.archlinux.org/archives/list/arch-general@lists.archlinux.org/thread/HDP44IALPZYBOSJERSXIAHAORDVRNLWB/].\n\nTo use OpenJDK, you have to install the [[Wikipedia:IcedTea|IcedTea]] browser plugin, {{Pkg|icedtea-web}}.\n\nIf you want to use Oracle's JRE, install the {{AUR|jre}} package.\n\n== Multimedia playback ==\n\nMany browsers support the [[GStreamer]] framework to play multimedia inside HTML5 {{ic|<audio>}} and {{ic|<video>}} elements. Check the optional dependencies of the browser package (or of the web engine, e.g. {{Pkg|webkit2gtk}} or {{AUR|qt5-webkit}}) to see if GStreamer is supported. See [[GStreamer#Installation]] for the description of each plugin.\n\nFor media formats that are not natively supported by your browser (e.g. most browsers do not play ''.mkv'' files), the following plugins are available:\n\n* {{App|VLC Plugin|NPAPI plugin that uses VLC as backend.|https://code.videolan.org/videolan/npapi-vlc|{{AUR|npapi-vlc}}}}\n\n== MozPlugger ==\n\n{{warning|MozPlugger is not maintained. The final release was in 2014.}}\n\n[https://web.archive.org/web/20190405220309/http://mozplugger.mozdev.org/ MozPlugger] is a NPAPI plugin which can show many types of multimedia inside your browser. To accomplish this, it uses external programs such as MPlayer, xine, Evince, OpenOffice, TiMidity, etc.\n\nMozPlugger can be installed with the {{AUR|mozplugger}} package.\n\nTo modify or add applications to be used by MozPlugger just modify the {{ic|/etc/mozpluggerrc}} file. For a more complete list of MozPlugger options see {{man|7|mozplugger|url=https://www.freebsd.org/cgi/man.cgi?query=mozplugger}}.\n\n=== PDF viewers ===\n\nFind the lines containing {{ic|pdf}} in the {{ic|/etc/mozpluggerrc}} file and modify the corresponding line after {{ic|GV()}} as below:\n\n repeat noisy swallow(''pdf_reader'') fill: ''pdf_reader'' \"$file\"\n\nWhen using Firefox, you may need to change 2 values in {{ic|about:config}}:\n\n* Change {{ic|pdfjs.disabled}}'s value to ''true'';\n* Change {{ic|plugin.disable_full_page_plugin_for_types}}'s value to an empty value.\n\nThen restart Firefox to use the plugin.\n\n=== Use LibreOffice instead of OpenOffice ===\n\nFor example, MozPlugger uses OpenOffice by default to open {{ic|doc}} files. To change it to use LibreOffice instead, look for the OpenOffice section:\n{{hc|/etc/mozpluggerrc|\n...\n### OpenOffice\ndefine([OO],[swallow(VCLSalFrame) fill: ooffice2.0 -nologo -norestore -view $1 \"$file\"\n    swallow(VCLSalFrame) fill: ooffice -nologo -norestore -view $1 \"$file\"\n    swallow(VCLSalFrame) fill: soffice -nologo $1 \"$file\"])\n...\n}}\nand add LibreOffice at the beginning of the list:\n{{hc|/etc/mozpluggerrc|\n...\n### LibreOffice/OpenOffice\ndefine([OO],[swallow(VCLSalFrame) fill: libreoffice --nologo --norestore --view $1 \"$file\"\n    swallow(VCLSalFrame) fill: ooffice2.0 -nologo -norestore -view $1 \"$file\"\n    swallow(VCLSalFrame) fill: ooffice -nologo -norestore -view $1 \"$file\"\n    swallow(VCLSalFrame) fill: soffice -nologo $1 \"$file\"])\n...\n}}\n{{Note|Be sure to also choose LibreOffice as your preferred application to open {{ic|doc}} files.}}\n\n=== Open cpp files in Kate ===\n\nAs another simple example, if you want to open {{ic|cpp}} files with your favorite text editor (we will use Kate) to get syntax highlighting, just add a new section to your {{ic|mozpluggerrc}} file:\n{{hc|/etc/mozpluggerrc|\ntext/x-c++:cpp:C++ Source File\ntext/x-c++:hpp:C++ Header File\n    repeat noisy swallow(kate) fill: kate -b \"$file\"\n}}\n\n=== Use mpv instead of MPlayer ===\n\nTo change the default of MPlayer so that [[mpv]] is used instead, change the appropriate lines such that:\n{{hc|1=/etc/mozpluggerrc|2=\n...\n### MPlayer\n\n#define(MP_CMD,[mplayer -really-quiet -nojoystick -nofs -zoom -vo xv,x11 -ao esd,alsa,oss,arts,null -osdlevel 0 $1 </dev/null])\ndefine(MP_CMD,[mpv -really-quiet $1 </dev/null])\n\n#define(MP_EMBED,[embed noisy ignore_errors: MP_CMD(-xy $width -wid $window $1)])\ndefine(MP_EMBED,[embed noisy ignore_errors: MP_CMD(--autofit=$width -wid $window $1)])\n\n#define(MP_NOEMBED,[noembed noisy ignore_errors maxaspect swallow(MPlayer): MP_CMD($1)])\ndefine(MP_NOEMBED,[noembed noisy ignore_errors maxaspect swallow(mpv): MP_CMD($1)])\n\n...\n\n#define(MP_AUDIO,[mplayer -quiet -nojoystick $1 </dev/null])\ndefine(MP_AUDIO,[mpv -really-quiet $1 </dev/null])\n\n#define(MP_AUDIO_STREAM,[controls stream noisy ignore_errors: mplayer -quiet -nojoystick $1 \"$file\" </dev/null])\ndefine(MP_AUDIO_STREAM,[controls stream noisy ignore_errors: mpv -really-quiet $1 \"$file\" </dev/null])\n...\n}}"
                    }
                ]
            },
            "1168": {
                "pageid": 1168,
                "ns": 0,
                "title": "Firefox/Tweaks",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Web browser]]\n[[ja:Firefox/\u8a2d\u5b9a]]\n{{Related articles start}}\n{{Related|Firefox}}\n{{Related|Browser plugins}}\n{{Related|Firefox/Profile on RAM}}\n{{Related|Firefox/Privacy}}\n{{Related articles end}}\n\n{{Merge|Firefox#Tips and tricks|Also overlaps with [[Firefox#Configuration]]; deciding if some particular topic should be here or on the main page is arbitrary. The \"tweaks\" are the backbone of the content related to Firefox, so they should be directly on the main page. The troubleshooting section can be split into a subpage if the result is deemed too long.}}\n\nThis page contains advanced Firefox configuration options and performance tweaks.\n\n== Performance ==\n\nImproving Firefox's performance is divided into parameters that can be inputted while running Firefox or otherwise modifying its configuration as intended by the developers, and advanced procedures that involve foreign programs or scripts.\n\n{{Note|Listed options may only be available for the latest version of Firefox.}}\n\nThis section contains advanced Firefox options for performance tweaking. For additional information see [http://kb.mozillazine.org/Category:Tweaking_preferences these MozillaZine articles].\n\n=== Change Performance settings ===\n\nFirefox automatically uses settings based on the computer's hardware specifications [https://support.mozilla.org/en-US/kb/performance-settings].\n\nAdjusting these settings can be done in Preferences or by changing the {{ic|dom.ipc.processCount}} value to {{ic|1-8}} and {{ic|browser.preferences.defaultPerformanceSettings.enabled}} to {{ic|false}} manually in {{ic|about:config}}.\n\nHowever you may want to manually adjust this setting to increase performance even further or decrease memory usage on low-end devices.\n\nIn this case the '''Content process limit''' for the current [[user]] has been increased to ''4'':\n\n{{hc|$ ps -e {{!}} grep 'Web Content'|\n13991 tty1     00:00:04 Web Content\n14027 tty1     00:00:09 Web Content\n14031 tty1     00:00:20 Web Content\n14040 tty1     00:00:26 Web Content\n}}\n\n=== WebRender ===\n\nWebRender is a high-performance, GPU-accelerated 2D rendering engine written in Rust. It is the compositor that powers Firefox and the [[Wikipedia:Servo (software)|Servo]] browser engine project. As of Firefox 93, it is enabled by default for all users and uses hardware rendering by default if the hardware it is running on [https://searchfox.org/mozilla-central/rev/2b3f6e5bf3ed0f13a08d0efbafeca57df6616ffa/gfx/webrender_bindings/WebRenderAPI.cpp#141 supports at least OpenGL 3.0 or OpenGL ES 3.0 (as of 2021-04)] and [https://searchfox.org/mozilla-central/source/widget/gtk/GfxInfo.cpp#680 meets minimum driver requirements]. If your system does not meet these requirements it will fallback to software rendering using [https://bugzilla.mozilla.org/show_bug.cgi?id=1601053 Software Webrender]. \n\nIf you are experiencing rendering issues with up-to-date drivers on your machine, you can force-enable Software Webrender by setting the {{ic|gfx.webrender.software}} preference to {{ic|true}} in {{ic|about:config}}.\n\n{{Warning|WebRender hardware rendering is disabled on many GPUs and drivers due to [https://github.com/servo/webrender/wiki/Driver-issues critical issues with stability, rendering output and performance]. If it is disabled on your hardware, forcing hardware rendering is not recommended.}}\n\n=== Turn off the disk cache ===\n\nEvery object loaded (html page, jpeg image, css stylesheet, gif banner) is saved in the Firefox cache for future use without the need to download it again. It is estimated that only a fraction of these objects will be reused, usually about 30%. This is because of very short object expiration time, updates or simply user behavior (loading new pages instead of returning to the ones already visited). The Firefox cache is divided into memory and disk cache and the latter results in frequent disk writes: newly loaded objects are written to memory and older objects are removed.\n\nAn alternative approach is to use {{Ic|about:config}} settings:\n\n* Set {{Ic|browser.cache.disk.enable}} to {{ic|false}}\n* Verify that {{Ic|browser.cache.memory.enable}} is set to {{ic|true}}, more information about this option can be found in the [http://kb.mozillazine.org/Browser.cache.memory.enable browser.cache.memory Mozilla article]\n* Add the entry {{Ic|browser.cache.memory.capacity}} and set it to the amount of KB you want to spare, or to {{ic|-1}} for [http://kb.mozillazine.org/Browser.cache.memory.capacity#-1 automatic] cache size selection (skipping this step has the same effect as setting the value to {{ic|-1}})\n** The \"automatic\" size selection is based on a decade-old table that only contains settings for systems at or below 8GB of system memory.  The following formula very closely approximates this table, and can be used to set the Firefox cache more dynamically:  {{ic|41297 - (41606 / (1 + ((RAM / 1.16) ^ 0.75)))}}, where {{ic|RAM}} is in GB and the result is in KB.\n\nThis method has some drawbacks:\n\n* The content of currently browsed webpages is lost if the browser crashes or after a reboot, this can be avoided using [[anything-sync-daemon]] or any similar periodically-syncing script so that cache gets copied over to the drive on a regular basis\n* The settings need to be configured for each user individually\n\n=== Move disk cache to RAM ===\n\nAn alternative is to move the \"disk\" cache to a RAM disk, giving you a solution in between the two above. The cache will now be preserved between Firefox runs (including Firefox crash recovery), but will be discarded upon reboot (including OS crash).\n\nTo do this, go to {{Ic|about:config}} and set {{Ic|browser.cache.disk.parent_directory}} to {{ic|/run/user/''UID''/firefox}}, where {{ic|''UID''}} is your user's ID which can be obtained by running {{ic|id -u}}.\n\nOpen {{Ic|about:cache}} to verify the new disk cache location.\n\n=== Longer interval between session information record ===\n\nFirefox stores the current session status (opened urls, cookies, history and form data) to the disk on a regular basis. It is used to recover a previous session in case of crash.\nThe default setting is to save the session every 15 seconds, resulting in frequent disk access. \n\nTo increase the save interval to 10 minutes (600000 milliseconds) for example, change in {{ic|about:config}} the setting of {{ic|browser.sessionstore.interval}} to {{ic|600000}}\n\nTo disable completely this feature, change {{ic|browser.sessionstore.resume_from_crash}} to {{ic|false}}.\n\n=== Defragment the profile's SQLite databases ===\n\n{{Warning|This procedure may damage the databases in such a way that sessions are not saved properly.}}\n\nFirefox keeps bookmarks, history, passwords in SQLite databases. SQLite databases become fragmented over time and empty spaces appear all around. But, since there are no managing processes checking and optimizing the database, these factors eventually result in a performance hit. A good way to improve start-up and some other bookmarks and history related tasks is to defragment and trim unused space from these databases.\n\nYou can use {{Pkg|profile-cleaner}} to do this, while Firefox is '''not''' running:\n\n{| class=\"wikitable\"\n|+ profile-cleaner usage example:\n! SQLite database || Size Before || Size After || % change\n|- \n|urlclassifier3.sqlite|| 37 M || 30 M || 19 %\n|-\n|places.sqlite || 16 M || 2.4 M || 85 %\n|-\n|}\n\nFirefox provides a tool to defragment and optimize the places database, which is the source of most slowdowns and profile corruptions. To access this tool, open the {{ic|about:support}} page, search for {{ic|Places Database}} and click the {{ic|Verify Integrity}} button.\n\n=== Cache the entire profile into RAM via tmpfs ===\n\nIf the system has memory to spare, {{ic|tmpfs}} can be used to [[Firefox/Profile on RAM|cache the entire profile directory]], which might result in increased Firefox responsiveness.\n\n=== Disable Pocket ===\n\nIf you do not use the Pocket-service, you may want to disable it by setting {{ic|extensions.pocket.enabled}} to ''false'' in {{ic|about:config}}.\n\n== Appearance ==\n\n=== Fonts ===\n\nSee the main article: [[Font configuration]]\n\n==== Configure the DPI value ====\n\nModifying the following value can help improve the way fonts looks in Firefox if the system's DPI is below 96.  Firefox, by default, uses 96 and only uses the system's DPI if it is a higher value. To force the system's DPI regardless of its value, type {{ic|about:config}} into the address bar and set {{ic|layout.css.dpi}} to '''0'''.\n\nNote that the above method only affects the Firefox user interface's DPI settings. Web page contents still use a DPI value of 96, which may look ugly or, in the case of high-resolution displays, may be rendered too small to read. A solution is to change {{ic|layout.css.devPixelsPerPx}} to system's DPI divided by 96. For example, if your system's DPI is 144, then the value to add is 144/96 = 1.5. Changing {{ic|layout.css.devPixelsPerPx}} to '''1.5''' makes web page contents use a DPI of 144, which looks much better.\n\nIf this results in fonts that are undesirably large in releases after Firefox 103, change {{ic|browser.display.os-zoom-behavior}} to zero. Then, type {{ic|ui.textScaleFactor}} into the {{ic|about:config}} search bar, select the circle next to 'number,' click the plus button to add the setting key, and edit its value to 100 times your {{ic|layout.css.devPixelsPerPx}} value. For example, if that was set to 1.25, {{ic|ui.textScaleFactor}} should be set to 125.\n\nSee also [[HiDPI#Firefox]] for information about HiDPI displays and  [https://www.sven.de/dpi/] for calculating the DPI.\n\n==== Default font settings from Microsoft Windows ====\n\nBelow are the default font preferences when Firefox is installed in Microsoft Windows. Many web sites use the Microsoft fonts.\n\n{{bc|\nProportional: Serif Size (pixels): 16\nSerif: Times New Roman\nSans-serif: Arial\nMonospace: Courier New Size (pixels): 13\n}}\n\n=== General user interface CSS settings ===\n\nFirefox's user interface can be modified by editing the {{ic|userChrome.css}} and {{ic|userContent.css}} files in {{ic|~/.mozilla/firefox/''profile''/chrome/}} (''profile_dir'' is of the form ''hash.name'', where the ''hash'' is an 8 character, seemingly random string and the profile ''name'' is usually ''default''). You can find out the exact name by typing {{ic|about:support}} in the URL bar, and searching for the {{ic|Profile Directory}} field under the {{ic|Application Basics}} section as described in the [https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data#w_how-do-i-find-my-profile Firefox documentation].\n\n{{Note|\n* The {{ic|chrome/}} folder and {{ic|userChrome.css}}/{{ic|userContent.css}} files may not necessarily exist, so they may need to be created.\n* {{ic|toolkit.legacyUserProfileCustomizations.stylesheets}} must be enabled in {{ic|about:config}}.\n}}\n\nThis section only deals with the {{ic|userChrome.css}} file which modifies Firefox's user interface, and not web pages.\n\n==== Change the interface font ====\n\nThe setting effectively overrides the global GTK font preferences, and does not affect webpages, only the user interface itself:\n\n{{hc|~/.mozilla/firefox/''profile''/chrome/userChrome.css|\n* {\n    font-family: \"FONT_NAME\";\n}\n}}\n\n==== Hide button icons ====\n\nEnables text-only buttons:\n{{hc|~/.mozilla/firefox/''profile''/chrome/userChrome.css|\n.button-box .button-icon {\n    display: none;\n}\n}}\n\n==== Hiding various tab buttons ====\n\nThese settings hide the arrows that appear to the horizontal edges of the tab bar, the button that toggles the \"all tabs\" drop-down list, and the plus sign button that creates a new tab.\n\n{{hc|~/.mozilla/firefox/''profile''/chrome/userChrome.css|<nowiki>\n/* Tab bar */\n\ntoolbarbutton#scrollbutton-up, toolbarbutton#scrollbutton-down {\n    /* Hide tab scroll buttons */\n    display: none;\n}\n\n.browser-toolbar > * #alltabs-button {\n    /* Hide tab drop-down list */\n    display: none;\n}\n\n.browser-toolbar > * #new-tab-button {\n    /* Hide new-tab button */\n    display: none;\n}</nowiki>\n}}\n\n==== Vertical/tree tabs ====\n\nTo place the tab bar in a sidebar/tree, use one of the following addons:\n\n* [https://addons.mozilla.org/firefox/addon/tree-style-tab/ Tree Style Tab]\n* [https://addons.mozilla.org/firefox/addon/sidebery/ Sidebery]\n* [https://addons.mozilla.org/firefox/addon/tabby-window-tab-manager/ Tabby]\n\nFirefox addons cannot hide the native tab bar through its extension APIs - to do so, follow the setup/advanced instructions for your addon.\n\n==== Hide title bar and window border ====\n\nTo replace the title bar with the tab bar, set {{ic|browser.tabs.inTitlebar}} to {{ic|1}} in {{ic|about:config}}.\n\nOr go to \"More tools\", then \"Customize toolbar\" and then at the bottom-left corner find checkbox named \"Title Bar\". Uncheck it. If the checkbox is missing, make sure the {{ic|XDG_CURRENT_DESKTOP}} environment variable is correctly set and/or the {{ic|MOZ_GTK_TITLEBAR_DECORATION}} environment variable is set to \"client\".\n\n===== Hide only title bar in KDE =====\n\nWith the setting above, Firefox adds in KDE the minimize/maximize/close buttons to the tab bar, but the title bar will still be there.\n\nIt can be removed by right-clicking on it, then ''More Actions > Configure Special Application Settings''. Add a new property there for \"No titlebar and frame\" and be sure to not forget activating it, \"Yes\" must be chosen. (As you have now no titlebar anymore there, to later change the rule, you can go to ''System Settings > Window Management > Window Rules''.)\n\nHowever, that will also remove the frame, it is basically impossible to change the window size. An alternative is go to ''System settings > Application Style > Window Decorations'', choose \"Breeze\" and change its settings. In the last tab, ''Window-Specific Overrides'', add a new one. Use the button ''Detect Window Properties'' to get the name. There is a button ''Detect Window Properties''. Alternatively, if you want to set this override for all windows, not just Firefox, you can enter a dot (.) in the regex field. Afterwards, set the ''Decoration Options'' to hide the title bar only.\n\n==== Auto-hide Bookmarks Toolbar ====\n\n{{hc|~/.mozilla/firefox/''profile''/chrome/userChrome.css|\n#PersonalToolbar {\n    visibility: collapse !important;\n}\n\n#navigator-toolbox:hover > #PersonalToolbar {\n    visibility: visible !important;\n}\n}}\n\n==== Remove sidebar width restrictions ====\n\n{{hc|~/.mozilla/firefox/''profile''/chrome/userChrome.css|\n/* remove maximum/minimum  width restriction of sidebar */\n#sidebar {\n    max-width: none !important;\n    min-width: 0px !important;\n}\n}}\n\n==== Unreadable input fields with dark GTK themes ====\n\nWhen using a dark [[GTK]] theme, one might encounter Internet pages with unreadable input and text fields (e.g. text input field with white text on white background, or black text on dark background). This can happen because the site only sets either background or text color, and Firefox takes the other one from the theme. To prevent Firefox from using theme's colors and dark themes in web pages respectively confirm {{ic|browser.display.use_system_colors}} and {{ic|widget.content.allow-gtk-dark-theme}} are set to {{ic|false}} in {{ic|about:config}}.\n\nOtherwise, if the previous modification did not solve the issue, it is possible to launch Firefox with a light GTK theme by adding a new string in {{ic|about:config}} named {{ic|widget.content.gtk-theme-override}} and setting it to a light theme like {{ic|Breeze:light}} or {{ic|Adwaita:light}}.\n\n===== Override input field color with CSS =====\n\n{{Note|1=Related bug has been resolved starting with 68. [https://bugzilla.mozilla.org/show_bug.cgi?id=1527048#c44]}}\n\nThe extension [https://addons.mozilla.org/firefox/addon/text-contrast-for-dark-themes/ Text Contrast for Dark Themes] sets the other color as needed to maintain contrast.\n\nAlternatively set the standard colors explicitly for all web pages in {{ic|userContent.css}} or using the [https://addons.mozilla.org/firefox/addon/styl-us/ stylus add-on].\nThe style sheet is usually located in your profile folder (visit {{ic|about:profiles}} for the path) in {{ic|chrome/userContent.css}}, if not you can create it there.\n\nThe following sets input fields to standard black text / white background; both can be overridden by the displayed site, so that colors are seen as intended:\n\n{{Note|If you want {{ic|urlbar}} and {{ic|searchbar}} to be {{ic|white}} remove the two first {{ic|:not}} css selectors.}}\n\n{{bc|1=\ninput:not(.urlbar-input):not(.textbox-input):not(.form-control):not([type='checkbox']):not([type='radio']), textarea, select {\n    -moz-appearance: none !important;\n    background-color: white;\n    color: black;\n}\n\n#downloads-indicator-counter {\n    color: white;\n}\n}}\n\n===== Change the GTK theme =====\n\nTo force Firefox to use a light theme (e.g. Adwaita) for both web content and UI, see [[GTK#Themes]].\n\n===== Change the GTK theme for content process only =====\n\nTo force Firefox to use a light theme (e.g. Adwaita) for web content only:\n\n# Open {{ic|about:config}} in the address bar.\n# Create a new {{ic|widget.content.gtk-theme-override}} string type entry ({{ic|right mouse button}} ''> New > String'').\n# Set the value to the light theme to use for rendering purposes (e.g. {{ic|Adwaita:light}}).\n# Restart Firefox.\n\n=== Web content CSS settings ===\n\nThis section deals with the {{ic|userContent.css}} file in which you can add custom CSS rules for web content. Changes to this file will take effect once the browser is restarted.\n\nThis file can be used for making small fixes or to apply personal styles to frequently visited websites. Custom stylesheets for popular websites are available from sources such as [https://userstyles.org/ userstyles.org]. You can install an add-on such as [https://addons.mozilla.org/firefox/addon/superusercontent/ superUserContent]{{Dead link|2020|03|29|status=404}} to manage themes. This add-on creates the directory {{ic|chrome/userContent.css.d}} and applies changes to the CSS files therein when the page is refreshed.\n\n==== Import other CSS files ====\n\n{{hc|~/.mozilla/firefox/''profile''/chrome/userContent.css|\n@import url(\"./imports/some_file.css\");\n}}\n\n==== Block certain parts of a domain ====\n\n{{hc|~/.mozilla/firefox/''profile''/chrome/userContent.css|\n@-moz-document domain(example.com) {\n    div#header {\n        background-image: none !important;\n    } \n}\n}}\n\n==== Add [pdf] after links to PDF files ====\n\n{{hc|~/.mozilla/firefox/''profile''/chrome/userContent.css|<nowiki>\n/* add '[pdf]' next to links to PDF files */\na[href$=\".pdf\"]:after {\n    font-size: smaller;\n    content: \" [pdf]\";\n}</nowiki>\n}}\n\n==== Block ads ====\n\nSee [http://www.floppymoose.com floppymoose.com] for an example of how to use {{ic|userContent.css}} as a basic ad-blocker.\n\n== Mouse and keyboard ==\n\n=== Mouse wheel scroll speed ===\n\nTo modify the default values (i.e. speed-up) of the mouse wheel scroll speed, go to {{ic|about:config}} and search for {{ic|mousewheel.acceleration}}. This will show the available options, modifying the following:\n\n* Set {{ic|mousewheel.acceleration.start}} to {{ic|1}}.\n* Set {{ic|mousewheel.acceleration.factor}} to the desired number ({{ic|10}} to {{ic|20}} are common values).\n\nAlternatively, to use system values (as how scrolling works in Chromium), set {{ic|mousewheel.system_scroll_override.enabled}} to {{ic|false}}.\n\nMozilla's recommendation for increasing the mousewheel scroll speed is to:\n\n* Set {{ic|mousewheel.default.delta_multiplier_y}} between {{ic|200}} and {{ic|500}} (default: {{ic|100}})\n\n=== Pixel-perfect trackpad scrolling ===\n\nTo enable one-to-one trackpad scrolling (as can be witnessed with GTK3 applications like Nautilus), set the {{ic|1=MOZ_USE_XINPUT2=1}} [[environment variable]] before starting Firefox.\n\nIf scrolling is undesirably jerky, try enabling Firefox's ''Use smooth scrolling'' option under ''Preferences > General > Browsing''.\n\n=== Enable touchscreen gestures ===\n\nMake sure {{ic|dom.w3c_touch_events.enabled}} is either set to 1 (''enabled'') or 2 (''default, auto-detect'').\n\nSet {{ic|1=MOZ_USE_XINPUT2=1}} [[environment variable]].\n\nOn some devices, it may be necessary to disable xinput's touchscreen gestures by running the following:\n $ xsetwacom --set ''device'' Gesture off\n\n=== Mouse click on URL bar's behavior ===\n\nIn older versions of Firefox it was possible to tweak the behavior of the address bar in {{ic|about:config}}, but this has been [https://bugzilla.mozilla.org/show_bug.cgi?id=333714 removed in March 2020].\n\nIn order to for example disable the behavior that selects the contents of the address bar on first click, or to allow to double click the URL to select it in full, see user contributed scripts such as https://github.com/SebastianSimon/firefox-omni-tweaks\n\n=== Smooth scrolling ===\n\nIn order to get smooth physics-based scrolling in Firefox, the {{ic|general.smoothScroll.msdPhysics}} configurations can be changed to emulate a snappier behaviour like in other web browsers. For a quicker configuration, append the following to {{ic|~/.mozilla/firefox/''your-profile''/user.js}} (requires restart):\n\n user_pref(\"general.smoothScroll.lines.durationMaxMS\", 125);\n user_pref(\"general.smoothScroll.lines.durationMinMS\", 125);\n user_pref(\"general.smoothScroll.mouseWheel.durationMaxMS\", 200);\n user_pref(\"general.smoothScroll.mouseWheel.durationMinMS\", 100);\n user_pref(\"general.smoothScroll.msdPhysics.enabled\", true);\n user_pref(\"general.smoothScroll.other.durationMaxMS\", 125);\n user_pref(\"general.smoothScroll.other.durationMinMS\", 125);\n user_pref(\"general.smoothScroll.pages.durationMaxMS\", 125);\n user_pref(\"general.smoothScroll.pages.durationMinMS\", 125);\n\nAdditionally the mouse wheel scroll settings have to be changed to react in a smooth way as well:\n\n user_pref(\"mousewheel.min_line_scroll_amount\", 30);\n user_pref(\"mousewheel.system_scroll_override_on_root_content.enabled\", true);\n user_pref(\"mousewheel.system_scroll_override_on_root_content.horizontal.factor\", 175);\n user_pref(\"mousewheel.system_scroll_override_on_root_content.vertical.factor\", 175);\n user_pref(\"toolkit.scrollbox.horizontalScrollDistance\", 6);\n user_pref(\"toolkit.scrollbox.verticalScrollDistance\", 2);\n\nIf you have troubles on machines with varying performance, try modifying the {{ic|mousewheel.min_line_scroll_amount}} until it feels snappy enough.\n\nFor a more advanced configuration which modifies the mass-spring-damper parameters, see [https://github.com/AveYo/fox/blob/main/Natural%20Smooth%20Scrolling%20for%20user.js AveYo's natural smooth scrolling configuration].\n\n{{Note|On [[Wayland]], any of these settings may be rendered completely ineffective by {{ic|apz.gtk.kinetic_scroll.enabled}}, which defaults to {{ic|true}}. If you find that these tweaks do not work, try setting this value to {{ic|false}}.}}\n\n=== Set backspace's behavior ===\n\nSee [[Firefox#Backspace does not work as the 'Back' button]].\n\n=== Disable middle mouse button clipboard paste ===\n\nSee [[Firefox#Middle-click behavior]].\n\n=== Emacs key bindings ===\n\nTo have Emacs/Readline-like key bindings active in text fields, see [[GTK#Emacs key bindings]].\n\n== Miscellaneous ==\n\n=== Force-enable hardware video decoding ===\n\nAlthough {{ic|media.hardware-video-decoding.enabled}} is enabled by default, one may need to force-enable hardware video decoding by setting {{ic|media.hardware-video-decoding.force-enabled}} to {{ic|true}}.\n\n=== Remove full screen warning ===\n\nWarning about video displayed in full screen mode (''\u2026 is now fullscreen'') can be disabled by setting {{ic|full-screen-api.warning.timeout}} to {{ic|0}} in {{ic|about:config}}.\n\n=== Change the order of search engines in the Firefox Search Bar ===\n\nTo change the order search engines are displayed in:\n\n* Open the drop-down list of search engines and click ''Manage Search Engines...'' entry.\n* Highlight the engine you want to move and use ''Move Up'' or ''Move Down'' to move it. Alternatively, you can use drag-and-drop.\n\n=== \"I'm Feeling Lucky\" mode ===\n\nSome search engines have a \"feeling lucky\" feature. For example, Google has \"I'm Feeling Lucky\", and DuckDuckGo has \"I'm Feeling Ducky\".\n\nTo activate them, search for {{ic|keyword.url}} in {{ic|about:config}} and modify its value (if any) to the URL of the search engine. \n\nFor Google, set it to:\n\n{{bc|<nowiki>https://www.google.com/search?btnI=I%27m+Feeling+Lucky&q=</nowiki>}}\n\nFor DuckDuckGo, set it to:\n\n{{bc|<nowiki>https://duckduckgo.com/?q=\\</nowiki>}}\n\n=== Secure DNS with DNSSEC validator ===\n\nYou can enable [[DNSSEC]] support for safer browsing.\n\n=== Secure DNS with DNS over HTTPS ===\n\nSee [[Domain name resolution#Application-level DNS]].\n\n=== Adding magnet protocol association ===\n\nIn {{ic|about:config}} set {{ic|network.protocol-handler.expose.magnet}} to {{ic|false}}. In case it does not exist, it needs to be created, right click on a free area and select ''New > Boolean'', input {{ic|network.protocol-handler.expose.magnet}} and set it to {{ic|false}}.\n\nThe next time you open a magnet link, you will be prompted with a ''Launch Application'' dialogue. From there simply select your chosen [[List of applications/Internet#BitTorrent clients|BitTorrent client]]. This technique can also be used with other protocols: {{ic|network.protocol-handler.expose.<protocol>}}.\n\n=== Prevent accidental closing ===\n\nThere are different approaches to handle this:\n\nThis behavior can be disabled with {{ic|browser.quitShortcut.disabled}} property set to {{ic|true}} in {{ic|about:config}}\n\nAn alternative is to add a rule in your window manager configuration file. For example in [[Openbox]] add:\n  <keybind key=\"C-q\">\n    <action name=\"Execute\">\n      <execute>false</execute>\n    </action>\n  </keybind>\nin the ''<keyboard>'' section of your {{ic|~/.config/openbox/rc.xml}} file.\n\n{{Note|This will be effective for every application used under a graphic server.}}\n\nThe [https://addons.mozilla.org/firefox/addon/disable-ctrl-q-and-cmd-q/ Disable Ctrl-Q and Cmd-Q] extension can be installed to prevent unwanted closing of the browser.\n\n{{Note|1=This extension no longer works on Linux due to a [https://bugzilla.mozilla.org/show_bug.cgi?id=1325692 bug].}}\n\n=== Jerky or choppy scrolling ===\n\nScrolling in Firefox can feel \"jerky\" or \"choppy\". A post on [http://forums.mozillazine.org/viewtopic.php?f=8&t=2749475/ MozillaZine] gives settings that work on Gentoo, but reportedly work on Arch Linux as well: \n\n# Set  {{ic|mousewheel.min_line_scroll_amount}} to 40\n# Set  {{ic|general.smoothScroll}} and {{ic|general.smoothScroll.pages}} to '''false'''\n# Set  {{ic|image.mem.min_discard_timeout_ms}} to something really large such as 2100000000 but no more than 2140000000.  Above that number Firefox will not accept your entry and complain with the error code:  \"The text you entered is not a number.\" \n# Set  {{ic|image.mem.max_decoded_image_kb}} to at least 512K\n\nNow scrolling should flow smoothly.\n\n=== Run Firefox inside an nspawn container ===\n\nSee [[systemd-nspawn#Run Firefox]].\n\n=== Disable WebRTC audio post processing ===\n\nIf you are using the PulseAudio [[PulseAudio#Microphone echo/noise cancellation]], you probably do not want Firefox to do additional audio post processing.\n\nTo disable audio post processing, change the value of the following preferences to {{ic|false}}:\n\n* {{ic|media.getusermedia.aec_enabled}} (Acoustic Echo Cancellation)\n* {{ic|media.getusermedia.agc_enabled}} (Automatic Gain Control)\n* {{ic|media.getusermedia.noise_enabled}} (Noise suppression)\n* {{ic|media.getusermedia.hpf_enabled}} (High-pass filter)\n\n=== Fido U2F authentication ===\n\nFirefox supports the Fido [[U2F]] authentication protocol. Install {{pkg|libfido2}} for the required udev rules.\n\n=== Get ALSA working back ===\n\nAs long as Arch keeps building Firefox with ''ac_add_options --enable-alsa'', then Firefox works fine without pulse on the system, without needing any special configurations, and without apulse (unless using pulse on the system and wanting Firefox to avoid using it).  It used to be one had to allow ioctl syscalls, blocked by default by Firefox sandboxing, and required by ALSA setting {{ic|security.sandbox.content.syscall_whitelist}} in {{ic|about:config}}, to the right ioctl syscall number, which is ''16'' for x86-64 and ''54'' for x86-32, but not anymore.  For reference, see:\n\n[https://www.linuxquestions.org/questions/slackware-14/firefox-in-current-alsa-sound-4175622116]\n[https://codelab.wordpress.com/2017/12/11/firefox-drops-alsa-apulse-to-the-rescue]\n\n=== Force-enable WebGL ===\n\nOn some platforms WebGL may be [[MozillaWiki:Blocklisting/Blocked Graphics Drivers|disabled]] even when the user desires to use it. To force-enable WebGL set {{ic|webgl.force-enabled}} to {{ic|true}}, to also force-enable WebGL anti-aliasing, set {{ic|webgl.msaa-force}} to {{ic|true}}.\n\nIf you get an error similar to this:\n{{bc|libGL error: MESA-LOADER: failed to retrieve device information\nlibGL error: image driver extension not found\nlibGL error: failed to load driver: i915\nlibGL error: MESA-LOADER: failed to retrieve device information\n...}}\nthen you can try the solution explained in Firefox bug 1480755 [https://bugzilla.mozilla.org/show_bug.cgi?id=1480755]:\n\nSet {{ic|security.sandbox.content.read_path_whitelist}} to {{ic|/sys/}}\n\n=== Enable Recommended by Pocket ===\n\nIf you do not see \"Recommended by Pocket\" (''Preferences > Home > Firefox Home Content'' - between \"Top Sites\" and \"Highlights\"), you can enable it by setting {{ic|browser.newtabpage.activity-stream.feeds.'''section'''.topstories}} and {{ic|browser.newtabpage.activity-stream.feeds.'''system'''.topstories}} to {{ic|true}} in {{ic|about:config}}. Although the option will still not show in Preferences, newly opened tabs/windows (if set to {{ic|Firefox Home}}) should now display Pocket recommendations.\n\n=== Prevent the download panel from opening automatically ===\n\nAs of Firefox 98, the download panel (with ongoing/recent downloads) always opens whenever a download starts.\n\nYou can disable this behavior by setting the {{ic|browser.download.alwaysOpenPanel}} preference to {{ic|false}} in {{ic|about:config}}.\n\n== See also ==\n\n* [http://kb.mozillazine.org/Knowledge_Base MozillaZine Wiki]\n* [http://kb.mozillazine.org/About:config_entries about:config entries MozillaZine article]\n* [https://linuxtidbits.wordpress.com/2009/08/01/better-fox-cat-and-weasel/ Firefox touch-ups that might be desired]"
                    }
                ]
            },
            "1196": {
                "pageid": 1196,
                "ns": 0,
                "title": "KDE",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:KDE]]\n[[de:KDE]]\n[[es:KDE]]\n[[it:KDE]]\n[[ja:KDE]]\n[[pt:KDE]]\n[[ru:KDE]]\n[[zh-hans:KDE]]\n{{Related articles start}}\n{{Related|Desktop environment}}\n{{Related|Display manager}}\n{{Related|Window manager}}\n{{Related|Qt}}\n{{Related|SDDM}}\n{{Related|Dolphin}}\n{{Related|KDE Wallet}}\n{{Related|KDevelop}}\n{{Related|Trinity}}\n{{Related|Uniform look for Qt and GTK applications}}\n{{Related|Official repositories#kde-unstable}}\n{{Related articles end}}\n\nKDE is a software project currently comprising a [[desktop environment]] known as Plasma, a collection of libraries and frameworks (KDE Frameworks) and several applications (KDE Applications) as well. KDE upstream has a well maintained [https://userbase.kde.org/ UserBase wiki]. Detailed information about most KDE applications can be found there.\n\n== Installation ==\n\n=== Plasma ===\n\n[[Install]] the {{Pkg|plasma-meta}} meta-package or the {{Grp|plasma}} group. For differences between {{Pkg|plasma-meta}} and {{Grp|plasma}} reference [[Package group]]. Alternatively, for a more minimal Plasma installation, install the {{Pkg|plasma-desktop}} package. Upstream KDE has [https://community.kde.org/Distributions/Packaging_Recommendations package and setup recommendations] to get a fully-featured Plasma session.\n\nIf you are an [[NVIDIA]] user with the proprietary {{Pkg|nvidia}} driver and wish to use the Wayland session, enable the [[NVIDIA#DRM kernel mode setting|DRM kernel mode setting]].\n\n=== Plasma Mobile ===\n\n[[Install]] {{AUR|plasma-mobile}}. Also install {{Pkg|qt5-wayland}} for the [https://maliit.github.io/ Maliit] virtual keyboard.\n\n=== KDE applications ===\n\nTo install the full set of KDE Applications, install the {{Grp|kde-applications}} group or the {{Pkg|kde-applications-meta}} meta-package. If you only want KDE applications for a certain category such as games or education, install the relevant dependency of {{Pkg|kde-applications-meta}}. Note that this will only install applications, it will not install any version of Plasma.\n\n=== Unstable releases ===\n\nSee [[Official repositories#kde-unstable]] for beta releases.\n\n== Starting Plasma ==\n\n{{Note|As of KDE Plasma 6, the Wayland session has matured enough to become [https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/2188 the default and preferred one]. The [[Xorg]] session is still supported, but will be removed in a future release. See [https://community.kde.org/Plasma/Wayland_Known_Significant_Issues Wayland Known Significant Issues] and [https://community.kde.org/Plasma/X11_Known_Significant_Issues X11 Known Significant Issues] for more information.}}\n\nPlasma can be started either using a [[display manager]], or from the console.\n\n=== Using a display manager ===\n\n{{Tip|The preferred [[display manager]] is [[SDDM]].}}\n\n* Select ''Plasma (Wayland)'' to launch a new session in [[Wayland]].\n* Select ''Plasma (X11)'' to launch a new session in [[Xorg]].\n* Select ''Plasma Mobile (Wayland)'' to launch a new Plasma Mobile session in [[Wayland]].\n\n=== From the console ===\n\n* To start a Plasma on Wayland session from a console, run {{ic|1=/usr/lib/plasma-dbus-run-session-if-needed /usr/bin/startplasma-wayland}}[https://community.kde.org/KWin/Wayland#Start_a_Plasma_session_on_Wayland].\n* To start Plasma with [[xinit|xinit/startx]], append {{ic|1=export DESKTOP_SESSION=plasma}} and {{ic|exec startplasma-x11}} to your {{ic|.xinitrc}} file or run directly in the console {{ic|startx /usr/bin/startplasma-x11}}. If you want to start Xorg at login, please see [[Start X at login]].\n\n== Configuration ==\n\nMost settings for KDE applications are stored in {{ic|~/.config/}}. However, configuring KDE is primarily done through the '''System Settings''' application. It can be started from a terminal by executing {{ic|systemsettings}}.\n\n=== Personalization ===\n\n==== Plasma desktop ====\n\n===== Themes =====\n\nThere are different types of KDE themes, varying by scope of what they modify:\n\n* [https://store.kde.org/browse?cat=121 Global themes], comprehensive packages that can include Plasma themes, application styles, colors, fonts, icons, cursors, splash screens, SDDM themes, and Konsole color schemes.\n* [https://store.kde.org/browse?cat=104 Plasma themes], modifying the look of Plasma panels and widgets. These often have a recommended accompanying Kvantum or Aurorae theme to complete the look.\n* [https://store.kde.org/browse?cat=421 Application styles], modifying the look of programs.\n* Application styles that use [[Uniform look for Qt and GTK applications#Theme engines|theme engines]] such as [[Uniform look for Qt and GTK applications#Kvantum|Kvantum]], [[Qt#Styles in Qt 5|QtCurve]] [https://store.kde.org/browse?cat=119], [https://github.com/DexterMagnific/QSvgStyle QSvgStyle] [https://store.kde.org/browse?cat=622], and [https://store.kde.org/p/1167275/ Aurorae].\n* [[#Icon themes]], providing icons for applications, files, and actions.\n\nFor easy system-wide installation and updating, some themes are available in both the [https://archlinux.org/packages/?sort=&q=kde+theme&maintainer=&flagged= official repositories] and the [https://aur.archlinux.org/packages?O=0&K=kde+theme AUR].\n\nGlobal themes can also be installed through ''System Settings > Appearance > Global Theme > Get New Global Themes...''.\n\n{{Warning|Global themes are commonly provided by end users and not monitored. You should use extreme caution when downloading and applying global themes. They can run arbitrary code and loss of user data has [https://discuss.kde.org/t/warning-global-themes-and-widgets-created-by-3rd-party-developers-for-plasma-can-and-will-run-arbitrary-code-you-are-encouraged-to-exercise-extreme-caution-when-using-these-products/12714 occurred].}}\n\n====== GTK application appearance ======\n\n{{Tip|For Qt and GTK theme consistency, see [[Uniform look for Qt and GTK applications]].}}\n\nThe recommended theme for a pleasant appearance in GTK applications is {{Pkg|breeze-gtk}}, a GTK theme designed to mimic the appearance of Plasma's Breeze theme.\nInstall {{Pkg|kde-gtk-config}} (part of the {{grp|plasma}} group) and select {{ic|Breeze}} as the GTK theme in ''System Settings > Appearance > Application Style > Configure GNOME/GTK Application Style...''.\n\n{{Out of date|The Plasma GTKd background service overwrites GTK settings on Plasma startup.}}\n\nIn some themes, tooltips in GTK applications have white text on white backgrounds making it difficult to read. To change the colors in GTK2 applications, find the section for tooltips in the {{ic|.gtkrc-2.0}} file and change it. For GTK3 application two files need to be changed, {{ic|gtk.css}} and {{ic|settings.ini}}.\n\nSome GTK2 programs like {{AUR|vuescan-bin}} still look hardly usable due to invisible checkboxes with the Breeze or Adwaita skin in a Plasma session. To workaround this, install and select e.g. the Numix-Frost-Light skin of the {{AUR|numix-frost-themes}} under ''System Settings > Appearance > Application Style > Configure GNOME/GTK Application Style... > GTK theme''. Numix-Frost-Light looks similar to Breeze.\n\n===== Faces =====\n\nPlasma and [[SDDM]] will both use images found at {{ic|/var/lib/AccountsService/icons/}} as users' avatars. To configure with a graphical interface, you can use ''System Settings > Users''. The file corresponding to your username can be removed to restore the default avatar.\n\n===== Widgets =====\n\n[https://store.kde.org/browse?cat=418 Plasmoids] are widgets for plasma desktop shell designed to enhance the functionality of desktop, they can be found on the [https://aur.archlinux.org/packages?K=plasma5-applet AUR].\n\nPlasmoid scripts can also be installed by right-clicking onto a panel or the desktop and choosing ''Add Widgets > Get New Widgets... > Download New Plasma Widgets''. This will present a front-end for https://store.kde.org/ that allows you to install, uninstall, or update third-party Plasmoid scripts with just one click.\n\n===== Sound applet in the system tray =====\n\n[[Install]] {{Pkg|plasma-pa}} or {{Pkg|kmix}} (start Kmix from the Application Launcher). {{Pkg|plasma-pa}} is now installed by default with {{Grp|plasma}}, no further configuration needed.\n\n{{Note|1=To adjust the [https://bugs.kde.org/show_bug.cgi?id=313579#c28 step size of volume increments/decrements], add e.g. {{ic|1=VolumePercentageStep=1}} in the {{ic|[Global]}} section of {{ic|~/.config/kmixrc}}.}}\n\n===== Disable panel shadow =====\n\nAs the Plasma panel is on top of other windows, its shadow is drawn over them. [https://bbs.archlinux.org/viewtopic.php?pid=1228394#p1228394] To disable this behaviour without impacting other shadows, [[install]] {{Pkg|xorg-xprop}} and run:\n\n $ xprop -remove _KDE_NET_WM_SHADOW\n\nthen select the panel with the plus-sized cursor. [https://forum.kde.org/viewtopic.php%3Ff=285&t=121592.html] For automation, install {{Pkg|xorg-xwininfo}} and create the following script:\n\n{{hc|/usr/local/bin/kde-no-shadow|<nowiki>\n#!/bin/bash\nfor WID in $(xwininfo -root -tree | sed '/\"plasmashell\": (\"plasmashell\" \"plasmashell\")/!d; s/^  *\\([^ ]*\\) .*/\\1/g'); do\n   xprop -id $WID -remove _KDE_NET_WM_SHADOW\ndone\n</nowiki>}}\n\nMake the script [[executable]].\n\n{{Accuracy|Autostarting does not work because the script starts too early (something like {{ic|sleep 5}} may help but is unreliable).}}\n\nThe script can be run on login with ''Add Login Script'' in ''Autostart'':\n\n $ kcmshell6 autostart\n\n===== Display scaling / High DPI displays =====\n\nSee [[HiDPI#KDE Plasma]].\n\n==== Plasma Mobile ====\n\nThe [https://invent.kde.org/plasma-mobile/plasma-phone-settings plasma-phone-settings] repository contains several recommended settings which can be applied globally ({{ic|/etc/xdg}}) and/or per user ({{ic|~/.config}}).\n\n===== Lock screen =====\n\n{{ic|/etc/xdg/kscreenlockerrc}} (or {{ic|~/.config/kscreenlockerrc}}) locks the screen immediately after login. [https://invent.kde.org/plasma-mobile/plasma-phone-settings/-/blob/master/etc/xdg/kscreenlockerrc] This is useful in combination with [[SDDM#Autologin]].\n\n===== Virtual keyboard =====\n\nIf your device has a hardware keyboard, but you want to use the virtual keyboard, add the {{ic|1=KWIN_IM_SHOW_ALWAYS=1}} [[environment variable]] to your Wayland session.\n\n==== Window decorations ====\n\n[https://store.kde.org/browse/cat/114/ Window decorations] can be found in the [https://aur.archlinux.org/packages?K=kde+window+decoration AUR].\n\nThey can be changed in ''System Settings > Appearance > Window Decorations'', there you can also directly download and install more themes with one click.\n\n==== Icon themes ====\n\nIcon themes can be installed and changed on ''System Settings > Appearance > Icons''.\n\n{{Note|Although all modern Linux desktops share the same icon theme format, desktops like [[GNOME]] use fewer icons (esp. in menus and toolbars). Themes developed for such desktops usually lack icons required by Plasma and KDE applications. It is recommended to install Plasma compatible icon themes instead.}}\n\n{{Tip|Since some icon themes do not inherit from the default icon theme, some icons may be missing.\nTo inherit from the Breeze, add {{ic|breeze}} to the {{ic|1=Inherits=}} array in {{ic|/usr/share/icon/''theme-name''/index.theme}}, for example: {{ic|1=Inherits=breeze,hicolor}}. You need to reapply this patch after every update to the icon theme, consider using [[Pacman hooks]] to automate the process.}}\n\n==== Space efficiency ====\n\nThe Plasma Netbook shell has been dropped from Plasma 5, see the following [https://forum.kde.org/viewtopic.php%3Ff=289&t=126631.html#p335947 KDE forum post]. However, you can achieve something similar by editing the file {{ic|~/.config/kwinrc}} adding {{ic|1=BorderlessMaximizedWindows=true}} in the {{ic|[Windows]}} section.\n\n==== Thumbnail generation ====\n\nTo allow thumbnail generation for media or document files on the desktop and in Dolphin, install {{Pkg|kdegraphics-thumbnailers}} and {{Pkg|ffmpegthumbs}}.\n\nThen enable the thumbnail categories for the desktop via ''right click'' on the ''desktop background'' > ''Configure Desktop and Wallpaper...'' > ''Icons'' > ''Configure Preview Plugins...''.\n\nIn ''Dolphin'', navigate to ''Configure > Configure Dolphin... > General > Previews''.\n\n=== Night Light ===\n\nPlasma provides a [[Redshift]]-like feature (working on both [[Xorg]] and [[Wayland]]) called Night Light. It makes the colors on the screen warmer to reduce eye strain at the time of your choosing. It can be enabled in ''System Settings > Colors & Themes > Night Light''.\n\n=== Printing ===\n\n{{Tip|Use the [[CUPS]] web interface for faster configuration. Printers configured in this way can be used in KDE applications. }}\n\nYou can also configure printers in ''System Settings > Printers''. To use this method, you must first install the following packages {{Pkg|print-manager}}, {{Pkg|cups}}, {{Pkg|system-config-printer}}. See [[CUPS#Configuration]].\n\n=== Samba/Windows support ===\n\nThe Dolphin share functionality requires the package {{Pkg|kdenetwork-filesharing}} and usershares, which the stock {{ic|smb.conf}} does not have enabled. Instructions to add them are in [[Samba#Enable Usershares]], after which sharing in Dolphin should work out of the box after restarting Samba.\n\nAccessing Windows shares from Dolphin works out of the box. Use the path {{ic|smb://''servername''/''share''}} to browse the files.\n\n{{Tip|Use {{ic|*}} (asterisk) for both username and password when accessing a Windows share without authentication in Dolphin's prompt.}}\n\nUnlike GTK file browsers which utilize GVfs also for the launched program, opening files from Samba shares in Dolphin via KIO makes Plasma copy the whole file to the local system first with most programs (VLC is an exception).\nTo workaround this, you can use a GTK based file browser like {{Pkg|thunar}} with {{Pkg|gvfs}} and {{Pkg|gvfs-smb}} (and {{Pkg|gnome-keyring}} for saving login credentials) to access SMB shares in a more able way.\n\nAnother possibility is to [[mount]] a Samba share via {{Pkg|cifs-utils}} to make it look to Plasma like if the SMB share was just a normal local folder and thus can be accessed normally.\nSee [[Samba#Manual mounting]] and [[Samba#Automatic mounting]].\n\nAn GUI solution is available with {{AUR|samba-mounter-git}}, which offers basically the same functionality via an easy to use option located at ''System Settings'' > ''Network Drivers''. However, it might break with new KDE Plasma versions.\n\n=== KDE Desktop activities ===\n\n[https://userbase.kde.org/Plasma#Activities KDE Desktop Activities] are special workspaces where you can select specific settings for each activity that apply only when you are using said activity.\n\n=== Power management ===\n\n[[Install]] {{Pkg|powerdevil}} for an integrated Plasma power managing service. This service offers additional power saving features, monitor brightness control (if supported) and battery reporting including peripheral devices.\n\n{{Tip|Integration with [https://pointieststick.com/2021/07/23/this-week-in-kde-power-profiles-and-a-more-polished-kickoff/ power profiles] requires the [[power-profiles-daemon]] optional dependency.\n}}\n\n{{Accuracy|1=Regarding the note below, it might be that the problem is the logind setting ''LidSwitchIgnoreInhibited'' which defaults to ''yes''. [https://bbs.archlinux.org/viewtopic.php?pid=1649022#p1649022]}}\n\n{{Note|Power Devil may not [[Power management#Power managers|inhibit]] all logind settings (such as the lid close action for laptops). In these cases, the logind setting itself will need to be changed - see [[Power management#ACPI events]].}}\n\n=== Autostart ===\n\nPlasma can autostart applications and run scripts on startup and shutdown. To autostart an application, navigate to ''System Settings > Startup and Shutdown > Autostart'' and add the program or shell script of your choice. For applications, a ''.desktop'' file will be created, for login scripts, a ''.desktop'' file launching the script will be created.\n\n{{Note|\n* Programs can be autostarted on login only, whilst shell scripts can also be run on shutdown or even before Plasma itself starts.\n* Shell scripts will only be run if they are marked [[executable]].\n* Shell scripts previously placed in {{ic|~/.config/autostart-scripts/}} will get [https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/736 automatically migrated to .desktop files].\n}}\n\n* Place [[Desktop entries]] (i.e. ''.desktop'' files) in the appropriate [[XDG Autostart]] directory.\n* Place or symlink shell scripts in one of the following directories:\n** {{ic|~/.config/plasma-workspace/env/}}: for executing scripts at login before launching Plasma.\n** {{ic|~/.config/plasma-workspace/shutdown/}}: for executing scripts when Plasma exits.\n\nSee [https://docs.kde.org/stable5/en/plasma-workspace/kcontrol/autostart/index.html official documentation].\n\n=== Phonon ===\n\nFrom [[Wikipedia:Phonon (software)|Wikipedia]]:\n\n:Phonon is the multimedia API provided by KDE and is the standard abstraction for handling multimedia streams within KDE software and also used by several Qt applications.\n\n:Phonon was originally created to allow KDE and Qt software to be independent of any single multimedia framework such as GStreamer or xine and to provide a stable API for a major version's lifetime.\n\nPhonon is being widely used within KDE, for both audio (e.g., the System notifications or KDE audio applications) and video (e.g., the [[Dolphin]] video thumbnails). It can use the following backends:\n\n* [[VLC]]: {{Pkg|phonon-qt6-vlc}}\n* [[GStreamer]]: {{AUR|phonon-qt6-gstreamer-git}}, see [[GStreamer#Installation]] for additional codec support\n* [[mpv]]: {{AUR|phonon-qt6-mpv}}, {{AUR|phonon-qt6-mpv-git}}\n\nKDE [https://community.kde.org/Distributions/Packaging_Recommendations#Non-Plasma_packages recommends only the VLC backend]. The GStreamer backend is [https://invent.kde.org/libraries/phonon-gstreamer/-/issues/1 unmaintained] but prominent Linux distributions (Kubuntu and Fedora-KDE for example) use it as default because that allows them to easily leave out patented MPEG codecs from the default installation.\n\n{{Note|1=<br>\n* Multiple backends can be installed at once and prioritized via the ''phononsettings'' application.\n* According to the [https://forum.kde.org/viewtopic.php%3Ff=250&t=126476.html#p335080 KDE forums], the VLC backend lacks support for [[wikipedia:ReplayGain|ReplayGain]].\n* If using the VLC backend, you may experience crashes every time Plasma wants to send you an audible warning and in quite a number of other cases as well [https://forum.kde.org/viewtopic.php%3Ff=289&t=135956.html]. A possible fix is to rebuild the VLC plugins cache:\n{{bc|# /usr/lib/vlc/vlc-cache-gen /usr/lib/vlc/plugins}}\n}}\n\n=== Backup and restore ===\n\nKDE Plasma 5 stores personalized desktop settings as configuration files in the [[XDG Base Directory#Specification|XDG_CONFIG_HOME]] folder. Use the [https://github.com/shalva97/kde-configuration-files detail of configuration files] to select and choose a [https://www.addictivetips.com/ubuntu-linux-tips/backup-kde-plasma-5-desktop-linux/ method of backup and restore].\n\n=== systemd startup ===\n\nPlasma uses a [[systemd/User|systemd user]] instance to launch and manage all the Plasma services. This is the default startup method since Plasma 5.25, but can be [https://invent.kde.org/plasma/plasma-workspace/-/wikis/Plasma-and-the-systemd-boot disabled to use boot scripts instead] with the following command (however this may stop working in a future release):\n\n $ kwriteconfig6 --file startkderc --group General --key systemdBoot false\n\nMore details about the implementation can be read in [https://blog.davidedmundson.co.uk/blog/plasma-and-the-systemd-startup/ Edmundson's blog: plasma and the systemd startup].\n\n=== Spell checking ===\n\nKDE applications use {{Pkg|sonnet}} for spell checking. See its optional dependencies for the supported [[spell checker]]s.\n\nConfigure it in ''System Settings > Regional Settings > Spell Check''.\n\n=== Running kwin wayland on NVIDIA ===\n\nSee https://community.kde.org/Plasma/Wayland/Nvidia.\n\n== Applications ==\n\nThe KDE project provides a suite of applications that integrate with the Plasma desktop. See the {{Grp|kde-applications}} group for a full listing of the available applications. Also see [[:Category:KDE]] for related KDE application pages.\n\nAside from the programs provided in KDE Applications, there are many other applications available that can complement the Plasma desktop. Some of these are discussed below.\n\n=== System administration ===\n\n==== Terminate Xorg server through KDE System Settings ====\n\nNavigate to the submenu ''System Settings > Input Devices > Keyboard > Advanced (tab) > \"Key Sequence to kill the X server\"'' and ensure that the checkbox is ticked.\n\n==== KCM ====\n\nKCM stands for ''KC''onfig ''M''odule. KCMs can help you configure your system by providing interfaces in System Settings, or through the command line with ''kcmshell6''.\n\n* {{App|sddm-kcm|KDE Configuration Module for [[SDDM]].|https://invent.kde.org/plasma/sddm-kcm|{{Pkg|sddm-kcm}}}}\n* {{App|kde-gtk-config|GTK2 and GTK3 Configurator for KDE.|https://invent.kde.org/plasma/kde-gtk-config|{{Pkg|kde-gtk-config}}}}\n* {{App|wacom tablet|KDE GUI for the Wacom Linux Drivers.|https://www.linux-apps.com/p/1127862/|{{Pkg|wacomtablet}}}}\n* {{App|Kcmsystemd|systemd control module for KDE.|https://github.com/rthomsen/kcmsystemd|{{AUR|systemd-kcm}}}}\n\nMore KCMs can be found at [https://www.linux-apps.com/find?search=kcm linux-apps.com].\n\n=== Desktop search ===\n\nKDE implements desktop search with a software called [[Baloo]], a file indexing and searching solution.\n\n=== Web browsers ===\n\nThe following web browsers can integrate with Plasma:\n\n* {{App|[[Wikipedia:Konqueror|Konqueror]]|Part of the KDE project, supports two rendering engines \u2013 KHTML and the [[Chromium]]-based Qt WebEngine.|https://konqueror.org/|{{Pkg|konqueror}}}}\n* {{App|[[Wikipedia:Falkon|Falkon]]|A Qt web browser with Plasma integration features, previously known as Qupzilla. It uses Qt WebEngine.|https://userbase.kde.org/Falkon/|{{Pkg|falkon}}}}\n* {{App|[[Chromium]]|Chromium and its proprietary variant Google Chrome have limited Plasma integration. [[KDE Wallet#KDE Wallet for Chrome and Chromium|They can use KWallet]] and KDE Open/Save windows.|https://www.chromium.org/|{{Pkg|chromium}}}}\n* {{App|[[Firefox]]|Firefox can be configured to better integrate with Plasma. See [[Firefox#KDE integration]] for details.|https://mozilla.org/firefox|{{Pkg|firefox}}}}\n\n{{Tip|Starting from Plasma 5.13, one can integrate [[Firefox]] or [[Chrome]] with Plasma: providing media playback control from the Plasma tray, download notifications and find open tabs in KRunner. [[Install]] {{Pkg|plasma-browser-integration}} and the corresponding browser add-on. Chrome/Chromium support should already be included, for Firefox add-on see [[Firefox#KDE integration]].}}\n\n=== PIM ===\n\nKDE offers its own stack for [[Wikipedia:Personal information management|personal information management]] (PIM). This includes emails, contacts, calendar, etc. To install all the PIM packages, you could use the {{Grp|kde-pim}} package group or the {{Pkg|kde-pim-meta}} meta package.\n\n==== Akonadi ====\n\nAkonadi is a system meant to act as a local cache for PIM data, regardless of its origin, which can be then used by other applications. This includes the user's emails, contacts, calendars, events, journals, alarms, notes, and so on. Akonadi does not store any data by itself: the storage format depends on the nature of the data (for example, contacts may be stored in vCard format).\n\nInstall {{Pkg|akonadi}}. For additional addons, install {{Pkg|kdepim-addons}}.\n\n{{Note|\n* If you wish to use a database engine other than [[MariaDB]], then when installing the {{Pkg|akonadi}} package, use the following command to skip installing the {{Pkg|mariadb}} dependencies: {{bc|# pacman -S akonadi --assume-installed mariadb}} See also {{Bug|32878}}.\n* If Akonadi cannot find {{ic|/usr/bin/mysqld}} upon first start, it will fall back to using SQLite.\n}}\n\n===== MySQL =====\n\nBy default Akonadi will use {{ic|/usr/bin/mysqld}} ([[MariaDB]] by default, see [[MySQL]] for alternative providers) to run a managed MySQL instance with the database stored in {{ic|~/.local/share/akonadi/db_data/}}.\n\n====== System-wide MySQL instance ======\n\nAkonadi supports using the system-wide [[MySQL]] for its database.[https://techbase.kde.org/KDE_PIM/Akonadi#Can_Akonadi_use_a_normal_MySQL_server_running_on_my_system.3F]\n\n{{Expansion|Add instructions.}}\n\n{{hc|~/.config/akonadi/akonadiserverrc|2=\n[%General]\nDriver=QMYSQL\n\n[QMYSQL]\nHost=\nName=akonadi_''username''\nOptions=\"UNIX_SOCKET=/run/mysqld/mysqld.sock\"\nStartServer=false\n}}\n\n===== PostgreSQL =====\n\nAkonadi supports either using the existing system-wide [[PostgreSQL]] instance, i.e. {{ic|postgresql.service}}, or running a PostgreSQL instance with user privileges and the database in {{ic|~/.local/share/akonadi/db_data/}}.\n\n====== Per-user PostgreSQL instance ======\n\n[[Install]] {{Pkg|postgresql}} and {{Pkg|postgresql-old-upgrade}}.\n\nEdit Akonadi configuration file so that it has the following contents:\n\n{{hc|~/.config/akonadi/akonadiserverrc|2=\n[%General]\nDriver=QPSQL\n}}\n\n{{Note|\n* When Akonadi starts, it will create the {{ic|[QPSQL]}} section and set the appropriate variables in it.\n* The database will be stored in {{ic|~/.local/share/akonadi/db_data/}}.\n}}\n\nStart Akonadi with {{ic|akonadictl start}}, and check its status: {{ic|akonadictl status}}.\n\n{{Note|\n* Starting with {{Pkg|akonadi}} 19.08.0-1 the PostgreSQL database cluster in {{ic|~/.local/share/akonadi/db_data/}} will get automatically upgraded when a major PostgreSQL version upgrade is detected.\n* For previous {{Pkg|akonadi}} versions major PostgreSQL version upgrades will require a manual database upgrade. Follow the [https://userbase.kde.org/Akonadi/Postgres_update update instructions on KDE UserBase Wiki]. Make sure to adjust the paths to PostgreSQL binaries to those used by {{Pkg|postgresql}} and {{Pkg|postgresql-old-upgrade}}, see [[PostgreSQL#Upgrading PostgreSQL]].\n}}\n\n====== System-wide PostgreSQL instance ======\n\nThis requires an already configured and running [[PostgreSQL]].\n\nCreate a PostgreSQL user account for your user:\n\n [postgres]$ createuser ''username''\n\nCreate a database for Akonadi:\n\n [postgres]$ createdb -O ''username'' -E UTF8 --locale=C -T template0 akonadi-''username''\n\nConfigure Akonadi to use the system-wide PostgreSQL:\n\n{{hc|~/.config/akonadi/akonadiserverrc|2=\n[%General]\nDriver=QPSQL\n\n[QPSQL]\nHost=/run/postgresql\nName=akonadi-''username''\nStartServer=false\n}}\n\n{{Note|Custom port, username and password can be specified with options {{ic|1=Port=}}, {{ic|1=User=}}, {{ic|1=Password=}} in the {{ic|[QPSQL]}} section.}}\n\nStart Akonadi with {{ic|akonadictl start}}, and check its status: {{ic|akonadictl status}}.\n\n===== SQLite =====\n\nTo use [[SQLite]], edit the Akonadi configuration file to match the configuration below:\n\n{{hc|~/.config/akonadi/akonadiserverrc|2=\n[%General]\nDriver=QSQLITE\n}}\n\n{{Note|\n* When Akonadi starts, it will create the {{ic|[QSQLITE]}} section and set the appropriate variables in it.\n* The database will be stored as {{ic|~/.local/share/akonadi/akonadi.db}}.\n}}\n\n===== Disabling Akonadi =====\n\nUsers who want to disable Akonadi would need to not start any KDE applications that rely on it. See this [https://userbase.kde.org/Akonadi#Disabling_the_Akonadi_subsystem section in the KDE userbase] for more information.\n\n=== KDE Connect ===\n\n[https://community.kde.org/KDEConnect KDE Connect] provides several features to connect your [[Android]] or [[iOS]] phone with your Linux desktop:\n\n* Share files and URLs to/from KDE from/to any app, without wires.\n* Touchpad emulation: Use your phone screen as your computer's touchpad.\n* Notifications sync (4.3+): Read your Android notifications from the desktop.\n* Shared clipboard: copy and paste between your phone and your computer.\n* Multimedia remote control: Use your phone as a remote for Linux media players.\n* WiFi connection: no usb wire or bluetooth needed.\n* RSA Encryption: your information is safe.\n\nYou will need to install KDE Connect both on your computer and on your phone. For PC, [[install]] {{Pkg|kdeconnect}} package. For Android, install KDE Connect from [https://play.google.com/store/apps/details?id=org.kde.kdeconnect_tp Google Play] or from [https://f-droid.org/packages/org.kde.kdeconnect_tp/ F-Droid]. If you want to browse your phone's filesystem, you need to [[install]] {{Pkg|sshfs}} as well and configure filesystem exposes in your Android app. For iOS, install KDE Connect from the [https://apps.apple.com/app/kde-connect/id1580245991 App Store]. Not all features from the Android version are available on the iOS version.\n\nTo use remote input functionality on a Plasma Wayland session, the {{Pkg|xdg-desktop-portal}} package is required.\n\nIt is possible to use KDE Connect even if you do not use the Plasma desktop. For GNOME users, better integration can be achieved by installing {{AUR|gnome-shell-extension-gsconnect}} instead of {{Pkg|kdeconnect}}. To start the KDE Connect daemon manually, execute {{ic|/usr/lib/kdeconnectd}}.\n\nIf you use a [[firewall]], you need to open UDP and TCP ports {{ic|1714}} through {{ic|1764}}.\n\nSometimes, KDE Connect will not detect a phone. You can restart the services by running {{ic|killall kdeconnectd}} and then opening kdeconnect in system settings or running {{ic|kdeconnect-cli --refresh}} followed by {{ic|kdeconnect-cli -l}}. You can also use ''Pair new device > Add devices by IP'' on KDE Connect for Android.\n\n== Tips and tricks ==\n\n=== Use a different window manager ===\n\nIt is possible to use a window manager other than KWin with Plasma. This allows you to combine the functionality of the KDE desktop with the utility of a [[tiling window manager]], which may be more fleshed out than KWin tiling scripts.\n\nThe component chooser settings in Plasma [https://github.com/KDE/plasma-desktop/commit/2f83a4434a888cd17b03af1f9925cbb054256ade no longer allows changing the window manager], but you are still able to swap KWin via other methods.\n\n{{Note|When replacing Kwin with a window manager which does not provide a Compositor (such as Openbox), any desktop compositing effects e.g. transparency will be lost. In this case, install and run a separate Composite manager to provide the effects such as [[Xcompmgr]] or [[picom]].}}\n\n==== Replacing KWin service ====\n\nSince KDE 5.25, [https://blog.davidedmundson.co.uk/blog/plasma-and-the-systemd-startup/ Plasma's systemd based startup] is enabled by default.\n\nTo replace KWin in this startup, you must first [[mask]] the {{ic|plasma-kwin_x11.service}} for the current user to prevent it from starting.\n\nThen, [[create]] a new systemd [[user unit]] to start your preferred WM [https://bugs.kde.org/show_bug.cgi?id=439481#c2]:\n\n{{hc|1=~/.config/systemd/user/plasma-custom-wm.service|2=\n[Install]\nWantedBy=plasma-workspace.target\n\n[Unit]\nDescription=Plasma Custom Window Manager\nBefore=plasma-workspace.target\n\n[Service]\nExecStart=''/path/to/other/wm''\nSlice=session.slice\nRestart=on-failure\n}}\n\nTo use it, do (as [[user unit]]s) a [[daemon-reload]], make sure you have [[mask]]ed {{ic|plasma-kwin_x11.service}} then [[enable]] the newly created {{ic|plasma-custom-wm.service}}.\n\n{{Note|When using i3 window manager with Plasma, it may be necessary to manually set dialogs to open in floating mode in order for them to correctly appear. For more information, see [[i3#Correct handling of floating dialogs]].}}\n\n==== Using script-based boot and KDEWM ====\n\nPlasma's script-based boot is used by disabling [[#systemd startup]]. If you have done so, you can change the window manager by setting the {{ic|KDEWM}} [[environment variable]] before Plasma is invoked.\n\n===== System-wide =====\n\n{{Merge|Environment variables#Globally|This technique should be moved into a new section there (2.1.3: Using Xsession), and then this section merged with the previous one.}}\n\nIf you have root access, you can also add an XSession that will be available to all users as an option on the login screen.\n\nFirst, create a script with execution permissions as follows:\n\n{{hc|1=/usr/local/bin/plasma-i3.sh|2=\n#!/bin/sh\nexport KDEWM=/usr/bin/i3\n/usr/bin/startplasma-x11\n}}\n\nReplace {{ic|/usr/bin/i3}} to the path to your preferred WM. Ensure the path is correctly set. If KDE is unable to start the window manager, the session will fail and the user will be returned to the login screen.\n\nThen, to add an XSession, add a file in {{ic|/usr/share/xsessions}} with the following content:\n\n{{hc|1=/usr/share/xsessions/plasma-i3.desktop|2=\n[Desktop Entry]\nType=XSession\nExec=/usr/local/bin/plasma-i3.sh\nDesktopNames=KDE\nName=Plasma (i3)\nComment=KDE Plasma with i3 as the WM}}\n\n==== KDE/Openbox session ====\n\nThe {{Pkg|openbox}} package provides a session for using KDE with [[Openbox]]. To make use of this session, disable [[#systemd startup]] and select ''KDE/Openbox'' from the [[display manager]] menu.\n\nFor those starting the session manually, add the following line to your [[xinit]] configuration:\n\n{{hc|~/.xinitrc|\nexec openbox-kde-session\n}}\n\n=== KWin tiling window scripts ===\n\nA list of KWin extensions that can be used to make KDE behave more like a [[tiling window manager]].\n\n* {{App|Bismuth|Add-on that tiles your windows automatically and lets you manage them via keyboard, similarly to i3, Sway or dwm.|https://github.com/Bismuth-Forge/bismuth|{{AUR|kwin-bismuth}}}}\n* {{App|Polonium|An (unofficial) successor to Bismuth|https://github.com/zeroxoneafour/polonium|{{AUR|kwin-polonium}}}}\n* {{App|Kr\u00f6hnkite|A dynamic tiling extension inspired by dwm.|https://github.com/esjeon/krohnkite|{{AUR|kwin-scripts-krohnkite-git}}}}\n* {{App|KZones|A script that mimicks the behavior of Microsoft PowerToys and Windows 11 snap layouts.|https://github.com/gerritdevriese/kzones|{{AUR|kwin-scripts-kzones}}}}\n\n=== Configuring monitor resolution / multiple monitors ===\n\nTo enable display resolution management and multiple monitors in Plasma, install {{Pkg|kscreen}}. This provides additional options to ''System Settings > Display and Monitor''.\n\n=== Configuring ICC profiles ===\n\nTo enable [[ICC profiles]] in Plasma, [[install]] {{Pkg|colord-kde}}. This provides additional options to ''System Settings > Color Corrections''.\n\nICC profiles can be imported using ''Add Profile''.\n\n=== HDR ===\n\nHDR support is experimental and only works in a Wayland session. ''System Settings > Display & Monitor > High Dynamic Range > Enable HDR''.\n\nFor more information see [https://zamundaaa.github.io/wayland/2023/12/18/update-on-hdr-and-colormanagement-in-plasma.html Xaver Hugl's blog post] and [[HDR monitor support]]\n\nThings that work:\n\n==== Games ====\n\nUntil upstream APIs are finalized, some games require a special vulkan layer to function {{AUR|vk-hdr-layer-kwin6-git}}\n\n* Launch Steam with HDR enabled. All games will then have HDR enabled, but Steam will be inside a gamescope window.\n $ ENABLE_HDR_WSI=1 gamescope --hdr-enabled --hdr-debug-force-output --steam -- env ENABLE_GAMESCOPE_WSI=1 DXVK_HDR=1 DISABLE_HDR_WSI=1 steam\n* Set launch options for a game in Steam to enable HDR\n DXVK_HDR=1 ENABLE_HDR_WSI=1 gamescope -f -r 144 --hdr-enabled --hdr-debug-force-output -- env MANGOHUD=1 gamemoderun %command%\n* Launch a windows application with HDR enabled using Wine 9 on Wayland\n $ ENABLE_HDR_WSI=1 DXVK_HDR=1 DISPLAY= wine <executable.exe>\n* Run native games with HDR (Quake II RTX)\n $ ENABLE_HDR_WSI=1 SDL_VIDEODRIVER=wayland quake2rtx\n\n==== Video ====\n\n* Play a video with HDR using MPV\n $ ENABLE_HDR_WSI=1 mpv --vo=gpu-next --target-colorspace-hint --gpu-api=vulkan --gpu-context=waylandvk \"path/to/video\"\n\n=== Disable opening application launcher with Super key (Windows key) ===\n\nTo disable this feature, you currently have to edit the {{ic|kwinrc}} config file and set the {{ic|Meta}} key under {{ic|ModifierOnlyShortcuts}} to an empty string:\n\n{{hc|$XDG_CONFIG_HOME/kwinrc|\n[ModifierOnlyShortcuts]\nMeta{{=}}\n}}\n\nAlternatively, you can also run the following command:\n\n $ kwriteconfig6 --file kwinrc --group ModifierOnlyShortcuts --key Meta \"\"\n\n=== Disable bookmarks showing in application menu ===\n\nWith the Plasma Browser integration installed, KDE will show bookmarks in the application launcher.\n\nTo disable this feature, go to ''System Settings > Search > Plasma Search'' and uncheck ''Bookmarks''.\n\n=== IBus Integration ===\n\n[[IBus]] is an [[Input method#Input method framework|input method framework]] and can be integrated into KDE. See [[IBus#Integration]] for details.\n\nUsing [[IBus]] may be required when using KDE on [[Wayland]] to offer accented characters and dead keys support [https://bugs.kde.org/show_bug.cgi?id=411729].\n\n=== Enable hotspot in plasma-nm ===\n\nSee [[NetworkManager#Sharing internet connection over Wi-Fi]].\n\n=== Restore previous saved session ===\n\nIf you have ''System Settings > Session > Desktop Session > Session Restore > On login, launch apps that were open: On last logout'' (default) selected, ksmserver (KDE's session manager) will automatically save/load all open applications to/from {{ic|~/.config/ksmserverrc}} on logout/login.\n\n{{Note|Currently, native Wayland windows cannot be restored. See [https://community.kde.org/Plasma/Wayland_Showstoppers Wayland Showstoppers] for the current state of development.}}\n\n=== Receive local mail in KMail ===\n\nIf you have set up local mail delivery with a [[mail server]] that uses the [[Wikipedia:Maildir|Maildir]] format, you may want to receive this mail in KMail. To do so, you can re-use KMail's default receiving account \"Local Folders\" that stores mail in {{ic|~/.local/share/local-mail/}}.\n\nSymlink the {{ic|~/Maildir}} directory (where Maildir format mail is commonly delivered) to the Local Folders' inbox:\n\n $ ln -s .local/share/local-mail/inbox ~/Maildir\n\nAlternatively, add a new receiving account with the type ''Maildir'' and set {{ic|~/Maildir}} as its directory.\n\n=== Configure Plasma for all users ===\n\nEdit {{ic|config/main.xml}} files in the {{ic|/usr/share/plasma}}. For example, to configure the Application Launcher for all users, edit {{ic|/usr/share/plasma/plasmoids/org.kde.plasma.kickoff/contents/config/main.xml}}. To prevent the files from being overwritten with package updates, add the files to [[Pacman#Skip file from being upgraded|Pacman's NoUpgrade]]\n\n=== Disable hibernate ===\n\n{{Merge|Power management|This is not specific to KDE. Merge and then either leave this section as a stub linking to that one.}}\n\nProperly disable the hibernate feature and hide it from the menu with a Polkit policy rule.\n\n{{hc|/etc/polkit-1/rules.d/99-disable-hibernate.rules|<nowiki>\n// Disable hibernate for all users\npolkit.addRule(function(action, subject) {\n   if ((action.id == \"org.freedesktop.login1.hibernate\")) {\n      return polkit.Result.NO;\n   }\n});\npolkit.addRule(function(action, subject) {\n   if ((action.id == \"org.freedesktop.login1.hibernate-multiple-sessions\")) {\n      return polkit.Result.NO;\n   }\n});\n</nowiki>}}\n\nAlternatively, add the following lines to a file in {{ic|/etc/systemd/sleep.conf.d/}}:\n\n{{hc|/etc/systemd/sleep.conf.d/00-disable-hibernation.conf|2=\n[Sleep]\nAllowHibernation=no\nAllowSuspendThenHibernate=no\nAllowHybridSleep=no\n}}\n\n=== Using window rules ===\n\nKwin has the ability to specify rules for specific windows/applications. For example, you can force enable the window titlebar even if the application developer decided that there should not be one. You can set such rules as specific starting position, size, minimize state, keeping above/below others and so on.\n\nTo create a rule you can press {{ic|Alt+F3}} when the window of interest is in focus. Then, in ''More Actions > Configure special application/window settings'', you can set the desired property. A list of created rules is available from ''System Settings > Window Management > Window Rules''.\n\n=== Virtual keyboard ===\n\nThere are no virtual keyboards installed by default. Choose an appropriate one from [[List of applications/Utilities#On-screen keyboards]], for example the Maliit keyboard, and install it. Then enable it in System Settings.\n\n== Troubleshooting ==\n\n=== KDE applications fail to start in GNOME after upgrade to KDE 6 ===\n\nWayland is used by default for KDE 6 applications, and the KDE applications fail to work under GNOME Wayland (and potentially other DEs/WMs) in this scenario. This can be fixed by setting the {{ic|QT_QPA_PLATFORM{{=}}xcb}} [[environment variable]].\n\nThis is a workaround for KDE bugs and not a problem with Wayland itself.\n\n=== KDE icons missing after upgrade to KDE 6 ===\n\nAfter the last upgrade to KDE 6 I noticed issues with all of the KDE icons not displaying. Newly created accounts showed them just fine.\n\nThe issue for this is that the theme got lost while upgrading and had to be reassigned manually. For this go to:\n\"System Settings > Colors & Themes > Global Theme > Icons\" and select the theme you would like to use for the icons again.\n\n=== qt5ct and kvantum bugs after upgrade ===\n\n{{Out of date|This was added 2021-02-15 : the \"latest update\" is one year old, is this fixed ?}}\n\nLatest update might cause incompatible HiDPI scaling that made some interfaces becomes too big for your screen, some icons are missing or can not be displayed, and missing panels or widgets.\n\nTry to remove {{Pkg|qt5ct}} and {{Pkg|kvantum}} related package, then apply default global Plasma theme. If the problem persists, try clearing all your KDE configuration and reinstalling {{Grp|plasma}} to overwrite the configuration. Be sure to check HiDPI scaling in KDE system settings as well.\n\n=== Spectacle crashes on startup when using Wayland backend ===\n\nSystems using NVIDIA proprietary driver may encounter this problem. Removing {{Pkg|libva-vdpau-driver}} should fix this issue.\n\n=== Fonts ===\n\n==== Fonts in a Plasma session look poor ====\n\n{{Remove|\n* This section is [[Special:Diff/110631|from KDE 4 era]]. In KDE 5 and 6, {{Pkg|noto-fonts}} is a required dependency, so a ttf font is always installed.\n* {{ic|fonts.conf}} is already mentioned in [[Font configuration#Fontconfig configuration]].\n}}\n\nTry installing the {{Pkg|ttf-dejavu}} and {{Pkg|ttf-liberation}} packages.\n\nAfter the installation, be sure to log out and back in. You should not have to modify anything in ''System Settings > Appearance > Fonts''. If you are using {{Pkg|qt5ct}}, the settings in Qt5 Configuration Tool may override the font settings in System Settings.\n\nIf you have personally set up how your [[Fonts]] render, be aware that System Settings may alter their appearance. When you go ''System Settings > Appearance > Fonts'' System Settings will likely alter your font configuration file ({{ic|fonts.conf}}).\n\nThere is no way to prevent this, but, if you set the values to match your {{ic|fonts.conf}} file, the expected font rendering will return (it will require you to restart your application or in a few cases restart your desktop). Note that Gnome's Font Preferences also does this.\n\n==== Fonts are huge or seem disproportional ====\n\nTry to force font DPI to {{ic|'''96'''}} in ''System Settings > Appearance > Fonts''.\n\nIf that does not work, try setting the DPI directly in your Xorg configuration as documented in [[Xorg#Setting DPI manually]].\n\n=== Configuration related ===\n\nMany problems in KDE are related to its configuration.\n\n==== Plasma desktop behaves strangely ====\n\nPlasma problems are usually caused by unstable ''Plasma widgets'' (colloquially called ''plasmoids'') or ''Plasma themes''. First, find which was the last widget or theme you had installed and disable or uninstall it.\n\nSo, if your desktop suddenly exhibits \"locking up\", this is likely caused by a faulty installed widget. If you cannot remember which widget you installed before the problem began (sometimes it can be an irregular problem), try to track it down by removing each widget until the problem ceases. Then you can uninstall the widget, and file a bug report on the [https://bugs.kde.org/ KDE bug tracker] '''only if it is an official widget'''. If it is not, it is recommended to find the entry on the [https://store.kde.org/ KDE Store] and inform the developer of that widget about the problem (detailing steps to reproduce, etc.).\n\nIf you cannot find the problem, but you do not want ''all'' the settings to be lost, navigate to {{ic|~/.config/}} and run the following command:\n\n $ for j in plasma*; do mv -- \"$j\" \"${j%}.bak\"; done\n\nThis command will rename '''all''' Plasma related configuration files to ''*.bak'' (e.g. {{ic|plasmarc.bak}}) of your user and when you will relogin into Plasma, you will have the default settings back. To undo that action, remove the ''.bak'' file extension. If you already have ''*.bak'' files, rename, move, or delete them first. It is highly recommended that you create regular backups anyway. See [[Synchronization and backup programs]] for a list of possible solutions.\n\n==== Clean cache to resolve upgrade problems ====\n\nThe [https://bbs.archlinux.org/viewtopic.php?id=135301 problem] may be caused by old cache. Sometimes, after an upgrade, the old cache might introduce strange, hard to debug behaviour such as unkillable shells, hangs when changing various settings, Ark being unable to extract archives or Amarok not recognizing any of your music. This solution can also resolve problems with KDE and Qt applications looking bad after an update.\n\nRebuild the cache using the following commands:\n\n $ rm ~/.config/Trolltech.conf\n $ kbuildsycoca5 --noincremental\n\nOptionally, empty the {{ic|~/.cache/}} folder contents, however, this will also clear the cache of other applications:\n\n $ rm -rf ~/.cache/*\n\n==== Plasma desktop does not respect locale/language settings ====\n\nPlasma desktop may use different settings than you set at KDE System Settings panel, or in {{ic|locale.conf}} (per [[Locale#Variables]]). First thing to do is log out and log in after removing {{ic|~/.config/plasma-localerc}}, if this does not fix the issue, try to edit the file manually. For example, to set {{ic|LANG}} variable to {{ic|es_ES.UTF-8}} and the {{ic|LC_MESSAGES}} variable to {{ic|en_US.UTF-8}}:\n\n{{hc|~/.config/plasma-localerc|2=\n[Formats]\nLANG=es_ES.UTF-8\n\n[Translations]\nLANGUAGE=en_US\n}}\n\n==== Cannot change theme, icons, fonts, colors in systemsettings; most icons are not displayed ====\n\nMake sure that {{ic|QT_QPA_PLATFORMTHEME}} [[environment variable]] is unset, the command {{ic|printenv QT_QPA_PLATFORMTHEME}} should show empty output. Otherwise if you had an environment set (most likely qt5ct) the variable will force qt5ct settings upon Qt applications, the command {{ic|1=export QT_QPA_PLATFORMTHEME=}} should unset the environment.\n\nAn easier (and more reliable) solution can be to uninstall completely qt5ct.\n\n==== Volume control, notifications or multimedia keys do not work ====\n\nHiding certain items in the System Tray settings (e.g. Audio Volume, Media Player or Notifications) also disables related features. Hiding the ''Audio Volume'' disables volume control keys, ''Media Player'' disables multimedia keys (rewind, stop, pause) and hiding ''Notifications'' disables showing notifications.\n\n==== Login Screen KCM does not sync cursor settings to SDDM ====\n\nThe Login Screen KCM reads your cursor settings from {{ic|~/.config/kcminputrc}}, without this file no settings are synced. The easiest way to generate this file is to change your cursor theme in ''System Settings > Cursors'', then change it back to your preferred cursor theme.\n\n==== Missing panels/widgets ====\n\nA crash or hardware change can modify the screen numbers, even on a single monitor setup. The panels/widgets can be missing after such an event, this can be fixed in the {{ic|~/.config/plasma-org.kde.plasma.desktop-appletsrc}} file by changing the {{ic|lastScreen}} values.\n\n=== Graphical problems ===\n\nMake sure you have the proper driver for your GPU installed. See [[Xorg#Driver installation]] for more information. If you have an older card, it might help to [[#Disable desktop effects manually or automatically for defined applications]] or [[#Disable compositing]].\n\n==== Getting current state of KWin for support and debug purposes ====\n\nThis command prints out a summary of the current state of KWin including used options, used compositing backend and relevant OpenGL driver capabilities. See more on [https://blog.martin-graesslin.com/blog/2012/03/on-getting-help-for-kwin-and-helping-kwin/ Martin's blog].\n\n $ qdbus6 org.kde.KWin /KWin org.kde.KWin.supportInformation\n\n==== Disable desktop effects manually or automatically for defined applications ====\n\nPlasma has desktop effects enabled by default and e.g. not every game will disable them automatically. You can disable desktop effects in ''System Settings > Workspace Behavior > Desktop Effects'' and you can toggle desktop effects with {{ic|Alt+Shift+F12}}.\n\nAdditionally, you can create custom KWin rules to automatically disable/enable compositing when a certain application/window starts under ''System Settings > Window Management > Window Rules''.\n\n==== Enable transparency ====\n\nIf you use a transparent background without enabling the compositor, you will get the message:\n\n This color scheme uses a transparent background which does not appear to be supported on your desktop\n\nIn ''System Settings > Display and Monitor > Compositor'', check ''Compositing: Enable on startup'' and restart Plasma.\n\n==== Disable compositing ====\n\nIn ''System Settings > Display and Monitor > Compositor'', uncheck ''Compositing: Enable on startup'' and restart Plasma.\n\n==== Flickering in fullscreen when compositing is enabled ====\n\nIn ''System Settings > Display and Monitor > Compositor'', uncheck ''Compositing: Allow applications to block compositing''. This may harm performance.\n\n==== Plasma cursor sometimes shown incorrectly ====\n\nCreate the directory {{ic|~/.icons/default}} (or {{ic|${XDG_DATA_HOME:-$HOME/.local/share}/icons/default/}}) and inside a file named {{ic|index.theme}} with the following contents:\n\n{{hc|~/.icons/default/index.theme|2=\n[Icon Theme]\nInherits=breeze_cursors\n}}\n\nReplace {{ic|breeze_cursors}} with the actual cursor theme you use if needed.\n\nExecute the following command:\n\n $ ln -s /usr/share/icons/breeze_cursors/cursors ~/.icons/default/cursors\n\nOn Wayland, it is necessary for {{Pkg|xdg-desktop-portal-gtk}} to be installed for GTK/GNOME applications to correctly apply cursor themes.\n\n===== Firefox and Thunderbird ignore cursor theme =====\n\nIf you have enabled [[Firefox#Wayland]] support, Firefox and Thunderbird will refer to GSettings to determine which cursor to display.\n\nTo sync KDE settings to GTK applications, install {{Pkg|kde-gtk-config}}.\n\nIf you do not want to install an extra package, you can set the cursor theme manually:\n\n $ gsettings set org.gnome.desktop.interface cursor-theme ''cursor-theme-name''\n\n==== Cursor jerking/flicking when changing roles (e.g., when mousing over hyperlinks) ====\n\nTry installing the appropriate 2D acceleration driver for your system and window manager.\n\n==== Unusable screen resolution set ====\n\nYour local configuration settings for kscreen can override those set in {{ic|xorg.conf}}. Look for kscreen configuration files in {{ic|~/.local/share/kscreen/}} and check if mode is being set to a resolution that is not supported by your monitor.\n\n==== Blurry icons in system tray ====\n\nIn order to add icons to tray, applications often make use of the library appindicator. If your icons are blurry, check which version of libappindicator you have installed. If you only have {{Pkg|libappindicator-gtk2}} installed, you can install {{Pkg|libappindicator-gtk3}} as an attempt to get clear icons.\n\n==== Cannot change screen resolution when running in a virtual machine ====\n\nWhen running Plasma in a [[VMware]], [[VirtualBox]] or [[QEMU]] virtual machine, kscreen may not allow changing the guest's screen resolution to a resolution higher than 800\u00d7600.\n\nThe workaround is to set the {{ic|PreferredMode}} option in {{man|5|xorg.conf.d}}. Alternatively try using a different graphics adapter in the VM, e.g. VBoxSVGA instead of VMSVGA for VirtualBox and Virtio instead of QXL for QEMU. See [https://bugs.kde.org/show_bug.cgi?id=407058 KDE Bug 407058] for details.\n\n==== Dolphin, Kate, etc. stuck long time when opening ====\n\nCheck whether your user directories ({{ic|Documents}}, {{ic|Downloads}}, etc.) are read-only.\n\n==== Spectacle screenshot uses old screen state ====\n\nIn ''System Settings > Display and Monitor > Compositor'', change ''Keep window thumbnails'' from ''Only from Shown windows'' to ''Never''. If you're on Intel graphics, ensure that {{Pkg|xf86-video-intel}} is [[Intel graphics#Installation|not installed]].\n\n=== Sound problems ===\n\n{{Note|First make sure you have {{Pkg|alsa-utils}} installed.}}\n\n==== No sound after suspend ====\n\nIf there is no sound after suspending and KMix does not show audio devices which should be there, restarting plasmashell and pulseaudio may help:\n\n $ killall plasmashell\n $ systemctl --user restart pulseaudio.service\n $ plasmashell\n\nSome applications may also need to be restarted in order for sound to play from them again.\n\n==== MP3 files cannot be played when using the GStreamer Phonon backend ====\n\nThis can be solved by installing the GStreamer libav plugin (package {{Pkg|gst-libav}}). If you still encounter problems, you can try changing the Phonon backend used by installing another such as {{AUR|phonon-qt4-vlc}} or {{Pkg|phonon-qt5-vlc}}.\n\nThen, make sure the backend is preferred via ''System Settings > Multimedia > Audio and Video > Backend''.\n\nIf the settings does not show any, try {{ic|phononsettings}} in your terminal.\n\n==== No volume control icon in tray and cannot adjust sound by function key ====\n\nCheck if you have {{Pkg|plasma-pa}} installed.\n\n==== No sound after a short time ====\n\nIf {{ic|journalctl -p4 -t pulseaudio}} contains entries saying {{ic|Failed to create sink input: sink is suspended}}, try commenting the following line in in {{ic|/etc/pulse/default.pa}}:\n\n #load-module module-suspend-on-idle\n\nIf the issue persists, {{Pkg|plasma-meta}} or {{Grp|plasma}} may have installed {{Pkg|pulseaudio}} alongside {{Pkg|wireplumber}}. To fix the issue, replace {{Pkg|pulseaudio}} with {{Pkg|pipewire-pulse}}. If {{Pkg|pulseaudio}} is preferred, replace {{Pkg|wireplumber}} with {{Pkg|pipewire-media-session}}. See [[PipeWire#PulseAudio clients]] and [https://bbs.archlinux.org/viewtopic.php?id=276308 this forum thread] for more details.\n\n=== Power management ===\n\n==== No Suspend/Hibernate options ====\n\nIf your system is able to suspend or hibernate using [[systemd]] but do not have these options shown in KDE, make sure {{Pkg|powerdevil}} is installed.\n\n==== No power profile options ====\n\nMake sure you [[install]]ed {{Pkg|powerdevil}} and {{Pkg|power-profiles-daemon}}.\nRun ''powerprofilesctl'' and check the driver. If it is {{ic|intel_pstate}} or {{ic|amd_pstate}}, you are done, otherwise see [[CPU frequency scaling#Scaling drivers]] for more information on enabling them.\n\n=== KMail ===\n\n==== Clean Akonadi configuration to fix KMail ====\n\nSee [https://userbase.kde.org/KMail/FAQs_Hints_and_Tips#Clean_start_after_a_failed_migration] for details.\n\nIf you want a backup, copy the following configuration directories:\n\n $ cp -a ~/.local/share/akonadi ~/.local/share/akonadi-old\n $ cp -a ~/.config/akonadi ~/.config/akonadi-old\n\n==== Empty IMAP inbox in KMail ====\n\nFor some IMAP accounts KMail will show the inbox as a top-level container (so it will not be possible to read messages there) with all other folders of this account inside.[https://bugs.kde.org/show_bug.cgi?id=284172]. To solve this problem simply disable the server-side subscriptions in the KMail account settings.\n\n==== Authorization error for EWS account in KMail ====\n\nWhile setting up EWS account in KMail, you may keep getting errors about failed authorization even for valid and fully working credentials. This is likely caused by broken communication between [[KWallet]] and KMail. To workaround the issue set a passsword via qdbus:\n\n $ qdbus6 org.freedesktop.Akonadi.Resource.akonadi_ews_resource_0 /Settings org.kde.Akonadi.Ews.Wallet.setPassword \"XXX\"\n\n=== Aggressive QXcbConnection / kscreen.xcb.helper journal logging ===\n\nSee [[Qt#Disable/Change Qt journal logging behaviour]].\n\n=== KF5/Qt 5 applications do not display icons in i3/FVWM/awesome ===\n\nSee [[Qt#Configuration of Qt 5 applications under environments other than KDE Plasma]].\n\n=== Problems with saving credentials and persistently occurring KWallet dialogs ===\n\nIt is not recommended to turn off the [[KWallet]] password saving system in the user settings as it is required to save encrypted credentials like WiFi passphrases for each user. Persistently occuring KWallet dialogs can be the consequence of turning it off.\n\nIn case you find the dialogs to unlock the wallet annoying when applications want to access it, you can let the [[Display manager|display managers]] [[SDDM]] and [[LightDM]] unlock the wallet at login automatically, see [[KDE Wallet#Unlock KDE Wallet automatically on login]]. The first wallet needs to be generated by KWallet (and not user-generated) in order to be usable for system program credentials.\n\nIn case you want the wallet credentials not to be opened in memory for every application, you can restrict applications from accessing it with {{Pkg|kwalletmanager}} in the KWallet settings.\n\nIf you do not care for credential encryption at all, you can simply leave the password forms blank when KWallet asks for the password while creating a wallet. In this case, applications can access passwords without having to unlock the wallet first.\n\n=== Discover does not show any applications ===\n\nThis can be solved by installing {{Pkg|packagekit-qt6}} or {{Pkg|packagekit-qt5}} depending on your Plasma/Qt version.\n\n{{Warning|As explained in a [https://github.com/archlinux/archinstall/issues/1321#issuecomment-1151343223 GitHub comment] by a Package Maintainer, \"Handling system packages via packagekit is just fundamentally incompatible with our high-maintenance rolling release distro, where any update might leave the system in an unbootable or otherwise unusable state if the user does not take care reading pacman's logs or merging pacnew files before rebooting.\"}}\n\n=== Discover stops showing updates from Arch repositories ===\n\nDiscover sometimes will not remove its PackageKit alpm lock. To release it, remove {{ic|/var/lib/PackageKit/alpm/db.lck}}. Use \"Refresh\" in Discover and updates should appear (if there are any updates pending).\n\n=== High CPU usage of kscreenlocker_greet with NVIDIA drivers ===\n\nAs described in [https://bugs.kde.org/show_bug.cgi?id=347772 KDE Bug 347772] NVIDIA OpenGL drivers and QML may not play well together with Qt 5. This may lead {{ic|kscreenlocker_greet}} to high CPU usage after unlocking the session. To work around this issue, set the {{ic|QSG_RENDERER_LOOP}} [[environment variable]] to {{ic|basic}}.\n\nThen kill previous instances of the greeter with {{ic|killall kscreenlocker_greet}}.\n\n=== OS error 22 when running Akonadi on ZFS ===\n\nIf your home directory is on a [[ZFS]] pool, create a {{ic|~/.config/akonadi/mysql-local.conf}} file with the following contents:\n\n [mysqld]\n innodb_use_native_aio = 0\n\nSee [[MariaDB#OS error 22 when running on ZFS]].\n\n=== Some programs are unable to scroll when their windows are inactive ===\n\nThis is caused by the problematic way of GTK3 handling mouse scroll events. A workaround for this is to set [[environment variable]] {{ic|1=GDK_CORE_DEVICE_EVENTS=1}}. However, this workaround also breaks touchpad smooth scrolling and touchscreen scrolling.\n\n=== TeamViewer behaves slowly ===\n\nWhen using TeamViewer, it may behave slowly if you use smooth animations (such as windows minimizing). See [[#Disable compositing]] as a workaround.\n\n=== Kmail, Kontact and Wayland ===\n\nKmail may become unresponsive, show a black messageviewer or similar, often after having been minimized and restored. A workaround may be to set [[environment variable]] {{ic|1=QT_QPA_PLATFORM=\"xcb;wayland\"}}. See [https://bugs.kde.org/show_bug.cgi?id=397825 KDE Bug 397825].\n\n=== Unlock widgets (Plasma \u2265 5.18) ===\n\nIf you previously locked your widgets, you will probably find yourself unable to unlock them again.\nYou just have to run this command to do so:\n\n $ qdbus6 org.kde.plasmashell /PlasmaShell evaluateScript \"lockCorona(false)\"\n\nThe new {{ic|Customize Layout}} does not require to lock them back up but if want to do that:\n\n $ qdbus6 org.kde.plasmashell /PlasmaShell evaluateScript \"lockCorona(true)\"\n\n=== KIO opens URLs with the wrong program ===\n\nCheck file associations regarding HTML, PHP, etc... and change it to a browser. KIO's cache files are located in {{ic|$HOME/.cache/kioexec}}. See also [[xdg-utils#URL scheme handlers]].\n\n=== Lock the screen before suspending and hibernating ===\n\nIn the System Settings application, KDE offers a setting to automatically lock the screen after waking up from sleep. Upon resuming, [https://www.reddit.com/r/kde/comments/obnpeb/how_to_lock_system_before_suspend/ some users] report that the screen is briefly showed before locking. To prevent this behavior and have KDE lock the screen before suspending, create a hook in {{man|1|systemd}} by creating the following file as the root user:\n\n{{hc|/usr/lib/systemd/system-sleep/lock_before_suspend.sh|2=\n#!/bin/bash\n\ncase $1/$2 in\n    pre/*)\n        case $2 in\n            suspend{{!}}hibernate)\n                loginctl lock-session\n                sleep 1\n                ;;\n            esac\n        ;;\nesac\n}}\n\nThe use of ''sleep'' is necessary in order for the lock-session to complete before the device is suspended. Lower value do not allow for completion.\n\nAfter creating the file, make it [[executable]].\n\nFinally, make sure that the KDE setting is enabled by going to ''System Settings > Workspace Behavior > Screen Locking'' and checking the ''After waking from sleep'' checkbox.\n\n=== X11 shortcuts conflict on Wayland ===\n\nSome X11 software like {{Pkg|freerdp}} can grab keyboard input since KDE 5.27. Others like [[VMware]] cannot grab correctly. [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/keyboard-shortcuts-inhibit/keyboard-shortcuts-inhibit-unstable-v1.xml]\n\nIt is inappropriate to force grab [https://gitlab.freedesktop.org/xorg/xserver/-/issues/1332 in Xserver] or in compositors. [https://gitlab.gnome.org/GNOME/mutter/-/issues/1720] You can solve it in an elegant way as follows:\n\n* Right click the window titlebar (e.g. VMware or Citrix);\n* ''More Actions > Configure Special Window Settings...''\n* Click ''Add Property...'' and select ''Ignore global shortcuts''.\n* Select ''force'' and ''yes''. Apply it.\n\n=== System settings not applying when changed ===\n\nThis can be caused because system settings cannot access/modify the .config folder in your home directory.\n\nTo fix this, you need to change the owner of the folder:\n\n # chown ''user'':''user'' /home/''user''/.config\n\n{{ic|''user''}} refers to the name of the user that you are logged into in KDE Plasma. If the name of your home directory is not the same as the user you are logged in as, you can change it accordingly.\n\nIf this does not work, you might need to change the permissions of the folder:\n\n # chmod 755 /home/''user''/.config\n\n== See also ==\n\n* [https://www.kde.org/ KDE homepage]\n* [https://dot.kde.org/ KDE news]\n* [https://planet.kde.org/ KDE Blogs]\n* [https://discuss.kde.org/ KDE Forums]\n* [https://wiki.kde.org/ KDE Wikis]\n* [https://bugs.kde.org/ KDE bug tracker and reporter]\n* [https://blog.martin-graesslin.com/blog/kategorien/kde/ Martin Graesslin's blog]\n* [https://community.kde.org/Matrix KDE Matrix Rooms]"
                    }
                ]
            },
            "1197": {
                "pageid": 1197,
                "ns": 0,
                "title": "Gamepad",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Input devices]]\n[[Category:Gaming]]\n[[ja:\u30b2\u30fc\u30e0\u30d1\u30c3\u30c9]]\nMany gamepads are working out-of-the-box nowadays, but there are still many potential problems and sources for errors since gamepad support in applications varies by a lot.\n\n{{Expansion|Need info about differences between API, how to switch between them.|section=Joystick API vibration support}}\n\nLinux has two different input systems for gamepads \u2013 the original Joystick interface and the newer evdev-based interface.\n\n{{ic|1=/dev/input/jsX}} maps to the Joystick API interface and {{ic|/dev/input/event*}} maps to the evdev ones (this also includes other input devices such as mice and keyboards). Symbolic links to those devices are also available in {{ic|/dev/input/by-id/}} and {{ic|/dev/input/by-path/}} where the legacy Joystick API has names ending with {{ic|-joystick}} while the evdev have names ending with {{ic|-event-joystick}}.\n\nMost new games will default to the evdev interface as it gives more detailed information about the buttons and axes available and also adds support for force feedback.\n\nWhile SDL1 defaults to evdev interface you can force it to use the old Joystick API by setting the environment variable {{ic|1=SDL_JOYSTICK_DEVICE=/dev/input/js0}}. This can help many games such as X3. SDL2 supports only the new evdev interface.\n\n== Installation ==\n\nUnless you are using very old joystick that uses [[Wikipedia:Game port|Gameport]] or a proprietary USB protocol, you will need just the generic USB Human Interface Device (HID) modules.\n\nFor an extensive overview of all joystick related modules in Linux, you will need access to the Linux kernel sources \u2014 specifically the Documentation section. Unfortunately, official kernel packages do not include what we need. If you have the kernel sources downloaded, have a look at {{ic|Documentation/input/joydev/}}. You can browse the kernel source tree at [https://kernel.org/ kernel.org] by clicking the \"browse\" (cgit - the git frontend) link for the kernel that you are using, then clicking the \"tree\" link near the top. Alternatively, see [https://docs.kernel.org/input/joydev/joystick.html documentation from the latest kernel].\n\nSome joysticks need specific modules, such as the Microsoft Sidewinder controllers ({{ic|sidewinder}}), or the Logitech digital controllers ({{ic|adi}}). Many older joysticks will work with the simple {{ic|analog}} module. If your joystick is plugging in to a gameport provided by your soundcard, you will need your soundcard drivers loaded \u2014 however, some cards, like the Soundblaster Live, have a specific gameport driver ({{ic|emu10k1-gp}}). Older ISA soundcards may need the {{ic|ns558}} module, which is a standard gameport module.\n\nAs you can see, there are many different modules related to getting your joystick working in Linux, so everything is not covered here. Please have a look at the documentation mentioned above for details.\n\n=== Loading the modules for analogue devices ===\n\nYou need to load a module for your gameport ({{ic|ns558}}, {{ic|emu10k1-gp}}, {{ic|cs461x}}, etc...), a module for your joystick ({{ic|analog}}, {{ic|sidewinder}}, {{ic|adi}}, etc...), and finally the kernel joystick device driver ({{ic|joydev}}). You can [[load the module at boot]], or simply [[modprobe]] it. The {{ic|gameport}} module should load automatically, as this is a dependency of the other modules.\n\n=== USB gamepads ===\n\nYou need to get USB working, and then modprobe your gamepad driver, which is {{ic|usbhid}}, as well as {{ic|joydev}}. \nIf you use a usb mouse or keyboard, {{ic|usbhid}} will be loaded already and you just have to load the {{ic|joydev}} module.\n\n{{Note|If your Xbox 360 gamepad is connected with the Play&Charge USB cable it will show up in {{ic|lsusb}} but it will not show up as an input device in {{ic|/dev/input/js*}}, see [[#Xbox 360 controller]].}}\n\n== Configuration ==\n\n=== Testing ===\n\nOnce the modules are loaded, you should be able to find a new device: {{ic|/dev/input/js0}} and a file ending with {{ic|-event-joystick}} in {{ic|/dev/input/by-id}} directory. You can simply {{ic|cat}} those devices to see if the joystick works \u2014 move the stick around, press all the buttons - you should see mojibake printed when you move the sticks or press buttons.\n\nIf you get a permission error, see [[#Device permissions]].\n\nBoth interfaces are also supported in [[Wine]] and reported as separate devices. You can test them (including vibration feedback) with {{ic|wine control joy.cpl}}.\n\n==== Joystick API ====\n\nThere are a lot of applications that can test this old API, {{ic|jstest}} from the {{pkg|joyutils}} package is the simplest one. If the output is unreadable because the line printed is too long you can also use graphical tools. KDE Plasma has a built in one in ''System Settings > Input Devices > Game Controller''. There is {{AUR|jstest-gtk-git}} as an alternative.\n\nUse of {{ic|jstest}} is fairly simple, you just run {{ic|jstest /dev/input/js0}} and it will print a line with state of all the axes (normalised to {{ic|{-32767,32767}<nowiki/>}}) and buttons.\n\nAfter you start {{ic|jstest-gtk}}, it will just show you a list of joysticks available, you just need to select one and press Properties.\n\n==== evdev API ====\n\nThe new 'evdev' API can be tested using the SDL2 joystick test application or using {{ic|evtest}} from {{Pkg|evtest}} or {{ic|evtest-qt}} from {{AUR|evtest-qt-git}}. Install {{AUR|sdl2-jstest-git}} and then run {{ic|sdl2-jstest --test 0}}. Use {{ic|sdl2-jstest --list}} to get IDs of other controllers if you have multiple ones connected.\n\nTo test force feedback on the device, use {{ic|fftest}} from {{Pkg|linuxconsole}}:\n\n $ fftest /dev/input/by-id/usb-*event-joystick\n\n==== HTML5 Gamepad API ====\n\nGo to https://gamepad-tester.com/. Currently, testing vibration and producing a visual of the gamepad is supported in [[Chromium]] but not [[Firefox]]. Additionally, as of version 107.0.5304.121-1, Chromium can read Joystick devices but not evdev.\n\n=== Setting up deadzones and calibration ===\n\n{{Expansion|Describe calibration instructions for evdev|section=Unclear instructions on how to calibrate}}\n\nIf you want to set up the deadzones (or remove them completely) of your analog input you have to do it separately for the xorg (for mouse and keyboard emulation), Joystick API and evdev API.\n\n==== Wine deadzones ====\n\nAdd the following registry entry and set it to a string from {{ic|0}} to {{ic|10000}} (affects all axes):\n\n HKEY_CURRENT_USER\\Software\\Wine\\DirectInput\\DefaultDeadZone\n\nSource: [https://wiki.winehq.org/UsefulRegistryKeys UsefulRegistryKeys]\n\n==== Xorg deadzones ====\n\nAdd a similar line to {{ic|/etc/X11/xorg.conf.d/51-joystick.conf}} (create if it does not exist):\n\n{{hc|1=/etc/X11/xorg.conf.d/51-joystick.conf|2=\nSection \"InputClass\"\n    Option \"MapAxis1\" \"deadzone=1000\"\nEndSection\n}}\n\n{{ic|1000}} is the default value, but you can set anything between {{ic|0}} and {{{{ic|30000}}. To get the axis number see the \"Testing Your Configuration\" section of this article.\nIf you already have an option with a specific axis just type in the {{ic|1=deadzone=value}} at the end of the parameter separated by a space.\n\n==== Joystick API deadzones and calibration ====\n\nThe easiest way is using ''jstest-gtk'' from {{AUR|jstest-gtk-git}}. Select the joystick you want to edit, click the ''Properties'' button. On this new window, click the ''Calibration'' button ('''do not''' click ''Start Calibration'' after that). You can then set the {{ic|CenterMin}} and {{ic|CenterMax}} values, which control the center deadzone, and {{ic|RangeMin}} and {{ic|RangeMax}}, which control the end of throw deadzones. Note that the calibration settings are applied when the application opens the device, so you need to restart your game or test application to see updated calibration settings.\n\nAfter you set the deadzones, you also can create an [[udev]] rule to make all changes permanent:\n\nFirst, grab the vendor id of your joystick (replace {{ic|''X''}} with your joystick's number, it is usually {{ic|0}}):\n\n $ udevadm info -q property --property ID_VENDOR_ID --value /dev/input/js''X''\n\nAlso grab the model id:\n\n $ udevadm info -q property --property ID_MODEL_ID --value /dev/input/js''X''\n\nIf the commands above give you an empty output, it could be because your controller is connected via Bluetooth, making these unique attributes only visible on the parent device(s). To mitigate this, you could try finding other unique attributes by running:\n\n $ udevadm info -a /dev/input/js''X''\n\nThis will list all available attributes from your device (and parent devices). So, for example, if the parent device of your joystick has the attribute {{ic|1=ATTRS{uniq}==\"a0:b1:c2:d3:e4:f5\"}}, or maybe both {{ic|1=ATTRS{idVendor}==\"054c\"}} and {{ic|1=ATTRS{idProduct}==\"09cc\"}}, then you can use these instead of {{ic|ENV{ID_VENDOR_ID} }} and {{ic|ENV{ID_MODEL_ID} }} in the ''udev'' rule below.\n\nYou can also have both rules at the same time, just separate them with a new line.\n\nAnyway, now use ''jscal'' to dump the new calibration settings of your joystick:\n\n $ jscal -p /dev/input/js''X''\n\nNow, modify this ''udev'' rule with the values you got:\n\n{{hc|1=/etc/udev/rules.d/85-jscal-custom-calibration.rules|2=\nACTION==\"add\", KERNEL==\"js[0-9]*\", ENV{ID_VENDOR_ID}==\"054c\", ENV{ID_MODEL_ID}==\"09cc\", RUN+=\"/usr/bin/jscal -s 1,1,1,1 /dev/input/js%n\"\n}}\n\nThis rule will automatically run {{ic|/usr/bin/jscal -s 1,1,1,1 /dev/input/js%n}} whenever you connect a joystick with vendor id {{ic|054c}} and model id {{ic|09cc}}. The {{ic|/dev/input/js%n}} part is required to automatically determine the correct joystick, so '''do not''' remove it.\n\nFinally, [[Udev#Loading new rules|load]] this new ''udev'' rule.\n\n==== evdev API deadzones and calibration ====\n\nThe ''evdev-joystick'' tool from the {{pkg|linuxconsole}} package can be used to view and change deadzones and calibration for {{ic|evdev}} API devices.\n\nTo view your device configuration:\n $ evdev-joystick --showcal /dev/input/by-id/usb-*-event-joystick\n\nTo change the deadzone for a particular axis, use a command like:\n $ evdev-joystick --evdev /dev/input/by-id/usb-*-event-joystick --axis 0 --deadzone 0\n\nTo set the same deadzone for all axes at once, omit the {{ic|--axis 0}} option.\n\nUse udev rules file to set them automatically when the controller is connected.\n\nNote that inside the kernel, the value is called {{ic|flatness}} and is set using the {{ic|EVIOCSABS}} {{ic|ioctl}}.\n\nDefault configuration will look like similar to this:\n\n{{hc|$ evdev-joystick --showcal /dev/input/by-id/usb-Madcatz_Saitek_Pro_Flight_X-55_Rhino_Stick_G0000090-event-joystick|2= Supported Absolute axes:\n   Absolute axis 0x00 (0) (X Axis) (min: 0, max: 65535, flatness: 4095 (=6.25%), fuzz: 255)\n   Absolute axis 0x01 (1) (Y Axis) (min: 0, max: 65535, flatness: 4095 (=6.25%), fuzz: 255)\n   Absolute axis 0x05 (5) (Z Rate Axis) (min: 0, max: 4095, flatness: 255 (=6.23%), fuzz: 15)\n   Absolute axis 0x10 (16) (Hat zero, x axis) (min: -1, max: 1, flatness: 0 (=0.00%), fuzz: 0)\n   Absolute axis 0x11 (17) (Hat zero, y axis) (min: -1, max: 1, flatness: 0 (=0.00%), fuzz: 0)\n}}\n\nWhile a more reasonable setting would be achieved with something like this (repeat for other axes):\n\n{{hc|$ evdev-joystick --evdev /dev/input/by-id/usb-Madcatz_Saitek_Pro_Flight_X-55_Rhino_Stick_G0000090-event-joystick --axis 0 --deadzone 512|2= Event device file: /dev/input/by-id/usb-Madcatz_Saitek_Pro_Flight_X-55_Rhino_Stick_G0000090-event-joystick\n Axis index to deal with: 0\n New dead zone value: 512\n Trying to set axis 0 deadzone to: 512\n   Absolute axis 0x00 (0) (X Axis) Setting deadzone value to : 512\n (min: 0, max: 65535, flatness: 512 (=0.78%), fuzz: 255)\n}}\n\n==== Virtual xboxdrv gamepad deadzones and calibration  ====\n\nIt is possible to use ''xboxdrv'' to present your gamepad as a virtual xbox360 gamepad, while handling the axis calibration and deadzones.\n\nImagine that you tested your gamepad with ''evtest-qt'', and find out that your left joystick cannot reach the maximum read value when you direct it to top most position. The side effect of this is that in some games (for example, HITMAN 2) the character cannot run.\n\nRun ''xboxdrv'' and determine how the problematic axis is called. In this case it is {{ic|Y1}}. Now try to direct it to top most position several times, and determine the lowest value that you saw. Imagine it is {{ic|29426}}. Now to be on a safe side, we take the value that is lower than that, like {{ic|29000}}. Run the command:\n # xboxdrv --detach-kernel-driver --calibration Y1=-32767:128:29000\nThis will translate the values of your real gamepad from {{ic|128}} (center) to {{ic|29000}} (max readable value on top) of {{ic|Y1}} axis to the ideal values of virtual gamepad.\n\nNice thing about ''xboxdrv'' is that it exports resulting device as both old Joystick API and new style evdev API so it should be compatible with basically any application. You can now see in jstest that the values of axis {{ic|1}} (corresponds to vertical axis of left joystick) is read from {{ic|0}} to {{ic|-32767}}, and in ''evtest-qt'' that you can reach the maximum value. And your character in game can run.\n\n===== Configuring curves and responsiveness =====\n\nIn case your game requires just limited amount of buttons or has good support for multiple controllers, you may have good results with using ''xboxdrv'' to change response curves of the joystick.\n\nBelow are example setups for Saitek X-55 HOTAS:\n\n $ xboxdrv --evdev /dev/input/by-id/usb-Madcatz_Saitek_Pro_Flight_X-55_Rhino_Throttle_G0000021-event-joystick \\\n   --evdev-no-grab --evdev-absmap 'ABS_#40=x1,ABS_#41=y1,ABS_X=x2,ABS_Y=y2' --device-name 'Hat and throttle' \\\n   --ui-axismap 'x2^cal:-32000:0:32000=,y2^cal:-32000:0:32000=' --silent\n\nthis maps the {{ic|EV_ABS}} event with id of 40 and 41 (use ''xboxdrv'' with {{ic|--evdev-debug}} to see the events registered), which is the normally inaccessible \"mouse pointer\" on the throttle, to first gamepad joystick and throttles to second joystick, it also clamps the top and lower ranges as they not always register fully.\n\nA bit more interesting is the setup for the stick:\n\n $ xboxdrv --evdev /dev/input/by-id/usb-Madcatz_Saitek_Pro_Flight_X-55_Rhino_Stick_G0000090-event-joystick \\\n   --evdev-no-grab --evdev-absmap 'ABS_X=x1' --evdev-absmap 'ABS_Y=y1' --device-name 'Joystick' \\\n   --ui-axismap 'x1^cal:-32537:-455:32561=,x1^dead:-900:700:1=,x1^resp:-32768:-21845:-2000:0:2000:21485:32767=' \\\n   --ui-axismap 'y1^cal:-32539:-177:32532=,y1^dead:-700:2500:1=,y1^resp:-32768:-21845:-2000:0:2000:21485:32767=' \\\n   --evdev-absmap 'ABS_RZ=x2' --ui-axismap 'x2^cal:-32000:-100:32000,x2^dead:-1500:1000:1=,x2^resp:-32768:-21845:-2000:0:2000:21485:32767=' \\\n   --silent\n\nthis maps the 3 joystick axes to gamepad axes and changes the calibration (min value, centre value, max value), dead zones (negative side, positive side, flag to turn smoothing) and finally change of response curve to a more flat one in the middle.\n\nYou can also modify the responsiveness by setting the {{ic|sen}} (sensitivity) parameter. Setting it to value of {{ic|0}} will give you a linear sensitivity, value of {{ic|-1}} will give very insensitive axis while value of {{ic|1}} will give very sensitive axis. You can use intermediate values to make it less or more sensitive. Internally ''xboxdrv'' uses a quadratic formula to calculate the resulting value, so this setting gives a more smooth result than {{ic|resp}} shown above.\n\n=== Disable joystick from controlling mouse ===\n\nIf you want to play games with your gamepad, you might want to disable its joystick control over mouse cursor. To do this, edit {{ic|/etc/X11/xorg.conf.d/51-joystick.conf}} (create if it does not exists) so that it looks like this:\n\n{{hc|/etc/X11/xorg.conf.d/51-joystick.conf |\nSection \"InputClass\"\n        Identifier \"joystick catchall\"\n        MatchIsJoystick \"on\"\n        MatchDevicePath \"/dev/input/event*\"\n        Driver \"joystick\"\n        '''Option \"StartKeysEnabled\" \"False\"'''\n        '''Option \"StartMouseEnabled\" \"False\"'''\nEndSection}}\n\n=== Using gamepad to send keystrokes ===\n\nA couple of programs exist to map gamepad buttons to keyboard keys, including:\n\n* {{AUR|qjoypad}}\n* {{AUR|antimicrox}}\n* {{AUR|sc-controller}}\n* {{Pkg|steam}} - see [[Steam#Steam Input]]\n\nAll work well without the need for additional X.org configuration.\n\n==== Xorg configuration example ====\n\nThis is a good solution for systems where restarting Xorg is a rare event because it is a static configuration loaded only on X startup. The example runs on a [[Kodi]] media PC, controlled with a Logitech Cordless RumblePad 2. Due to a problem with the d-pad (a.k.a. \"hat\") being recognized as another axis, [[Joy2key]] was used as a workaround. Since {{Pkg|kodi}} version 11.0 and {{AUR|joy2key}} 1.6.3-1, this setup no longer worked and the following was created for letting Xorg handle joystick events.\n\nFirst, [[install]] the {{AUR|xf86-input-joystick}} package. Then, create an X configuration file: \n\n{{hc|/etc/X11/xorg.conf.d/51-joystick.conf|2=\n Section \"InputClass\"\n  Identifier \"Joystick hat mapping\"\n  Option \"StartKeysEnabled\" \"True\"\n  #MatchIsJoystick \"on\"\n  Option \"MapAxis5\" \"keylow=113 keyhigh=114\"\n  Option \"MapAxis6\" \"keylow=111 keyhigh=116\"\n EndSection\n}}\n\n{{Note|The {{ic|MatchIsJoystick \"on\"}} line does not seem to be required for the setup to work, but you may want to uncomment it.}}\n\n=== Remapping of gamepad buttons and more ===\n\nWith some programs you can also configure your gamepad further, including the following potential features:\n\n* Remapping buttons and axes.\n** Assigning mapping profiles to different games.\n* Emulating a different type of gamepad. As noted in [[#Mimic Xbox 360 controller]], software can often behave better when seemingly given an Xbox 360 Controller, as this is a very common controller that many games have been tested with.\n* Additional functionality such as Macros, On-Screen-Displays etc.\n\nList of software:\n\n* {{App|SC Controller|Open-source software supporting button remapping and Xbox 360 Controller emulation.|https://github.com/Ryochan7/sc-controller|{{AUR|sc-controller}}}}\n* {{App|[[Steam]]|Proprietary storefront whose client supports rebinding gamepad inputs via [https://partner.steamgames.com/doc/features/steam_controller Steam Input]. When enabled, Steam exposes a Steam Controller to games that opt into the Steam Input API, as well as an emulated Xbox 360 Controller to games using traditional gamepad APIs. See [[Steam#Steam Input]] for further details.|https://store.steampowered.com/about/|{{Pkg|steam}}}}\n* {{App|[[xboxdrv]]|Xbox 360 controller driver which supports emulating the controller from a different input controller. Even if you don't have or need (in the sense of [[#Mimic Xbox 360 controller]]) a 360 controller, this is still flexible option for performing remapping.|https://xboxdrv.gitlab.io/|{{AUR|xboxdrv}}}}\n\n==== Remapping of gamepad on SDL2 applications ====\n\nGamepads can be remapped for SDL2 applications using the {{ic|SDL_GAMECONTROLLERCONFIG}} environment variable. For each line, it includes the gamepad's GUID, a name, button / axis mappings and a platform. The controller's GUID can be retreived by installing {{AUR|sdl2-jstest-git}} and then running {{ic|sdl2-jstest --list}}.\n\nFor example, to map Microsoft Xbox 360 controllers with different GUIDs:\n\n{{hc|~/.bashrc|2=export SDL_GAMECONTROLLERCONFIG=\"\n030000005e0400008e02000001000000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.1,dpleft:h0.2,dpright:h0.8,dpup:h0.4,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,\n030000005e0400008e02000004010000,Microsoft Xbox 360,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,\n\"}}\n\nSome apps extract mapping information from a {{ic|gamecontrollerdb.txt}} file. It can be edited graphically with {{AUR|controllermap}}. An up to date database can be found on [https://github.com/gabomdq/SDL_GameControllerDB].\n\n== Specific devices ==\n\nWhile most gamepads, especially USB based ones should just work, some may require (or give better results) if you use alternative drivers. If it does not work the first time, do not give up, and read the following sections thoroughly!\n\n=== Dance pads ===\n\nMost dance pads should work. However some pads, especially those used from a video game console via an adapter, have a tendency to map the directional buttons as axis buttons. This prevents hitting left-right or up-down simultaneously. This behavior can be fixed for devices recognized by xpad via a module option:\n\n # modprobe -r xpad\n # modprobe xpad dpad_to_buttons=1\n\nIf that did not work, you can try {{AUR|axisfix-git}} or patching the {{ic|joydev}} kernel module (https://github.com/adiel-mittmann/dancepad).\n\n=== Logitech Thunderpad Digital ===\n\nLogitech Thunderpad Digital will not show all the buttons if you use the {{ic|analog}} module. Use the device specific {{ic|adi}} module for this controller.\n\n=== Nintendo Gamecube Controller ===\n\nDolphin Emulator has a [https://wiki.dolphin-emu.org/index.php?title=How_to_use_the_Official_GameCube_Controller_Adapter_for_Wii_U_in_Dolphin page on their wiki] that explains how to use the official Nintendo USB adapter with a Gamecube controller. This configuration also works with the Mayflash Controller Adapter if the switch is set to \"Wii U\".\n\nFor use with steam there is a [https://github.com/ToadKing/wii-u-gc-adapter tool on github] that sends the input to steam as a generic controller.\n\n=== Nintendo Switch Pro Controller and Joy-Cons ===\n\n==== Using the kernel Nintendo HID driver ====\n\nThe hid-nintendo kernel HID driver was mainlined in kernel 5.16. If you are using an earlier kernel, you will need to install the [[DKMS]] module named {{AUR|hid-nintendo-dkms}}. The driver provides support for rumble, battery level, and control of the player and home LEDs. It supports the Nintendo Switch Pro Controller over both USB and Bluetooth in addition to the Joy-Cons.\n\nAn alternate DKMS module named {{AUR|hid-nintendo-nso-dkms}} patches in support for the Switch Online NES and SNES controllers.\n\n===== Using joycond userspace daemon =====\n\nThe hid-nintendo kernel driver does not handle the combination of two Joy-Cons into one virtual input device. That functionality has been left up to userspace. {{AUR|joycond-git}} is a userspace daemon that combines two kernel Joy-Con evdev devices into one virtual input device using uinput. An application can use two Joy-Cons as if they are a single controller. When the daemon is active, Switch controllers will be placed in a pseudo pairing mode, and the LEDs will start flashing. Holding the triggers can be used to pair controllers and make them usable. To pair two Joy-Cons together, press one trigger on each Joy-Con.\n\n===== Mimic Xbox 360 controller =====\n\nSome games and emulators are hardcoded to work with an Xbox 360 controller, and will not work with other controllers. To get around this, you need to create a virtual Xbox 360 controller that emulates the expected interface, but is bound to your controller's inputs. This can be done with [[Steam#Steam Input|Steam Input]] or [[#Mimic Xbox 360 controller with other controllers|xboxdrv]].\n\n==== Use positional layout on SDL2 applications ====\n\nBy default, SDL2 maps buttons on Nintendo controllers according to the gamepad's label instead of the button's position. This is enabled by the [https://github.com/libsdl-org/SDL/blob/b886f4c6c97f3d37d65f65afdb6bd68148fd4de6/include/SDL_hints.h#L508 SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS] setting, which defaults to {{ic|1}} for controllers known to use the Nintendo button layout,[https://github.com/libsdl-org/SDL/blob/7c05ea0a0ef075527fd745215d5d8a77f667bc21/src/joystick/SDL_gamecontrollerdb.h] and {{ic|0}} for other controllers.[https://github.com/libsdl-org/SDL/blob/ec58a817ef66efc23d7d6e964844317673b23ead/src/joystick/SDL_gamecontroller.c#L1575-L1582] This behavior can be overridden for all controllers by setting the {{ic|SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS}} [[environment variable]]. For example, if Nintendo's conception of A/B and X/Y is undesirable, set {{ic|1=SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS=0}}.\n\n=== iPEGA-9017s and other Bluetooth gamepads ===\n\nIf you want to use one of the widely available Bluetooth gamepads, such as iPEGA-9017s designed mostly for Android and iOS devices you would need {{AUR|xboxdrv}}, {{Pkg|bluez}}, {{Pkg|bluez-plugins}}{{Broken package link|replaced by {{Pkg|bluez-utils}}}}, and {{Pkg|bluez-utils}}. You should connect it in gamepad mode (if there are different modes, choose the gamepad one). Technically it is ready to be used, but in most cases games would not recognize it, and you would have to map it individually for all application. The best way to simplify it and make it work with all applications is to mimic Microsoft X360 controller with {{AUR|xboxdrv}}.\nOnce connected you can create a udev rule to give it a persistent name, that would come in handy when setting it up.\n\n{{hc|/etc/udev/rules.d/99-btjoy.rules|2=\n#Create a symlink to appropriate /dev/input/eventX at /dev/btjoy\nACTION==\"add\", SUBSYSTEM==\"input\", ATTRS{name}==\"Bluetooth Gamepad\", ATTRS{uniq}==\"00:17:02:01:ae:2a\", SYMLINK+=\"btjoy\"\n}}\n\nReplace \"Bluetooth Gamepad\" with your device name and \"00:17:02:01:ae:2a\" with your device's address.\n\nNext, create a configuration for {{AUR|xboxdrv}} somewhere, for example:\n\n{{hc|~/.config/xboxdrv/ipega.conf|2=\n#iPEGA PG-9017S Config \n\n[xboxdrv]\nevdev-debug = true\nevdev-grab = true\nrumble = false\nmimic-xpad = true\n\n[evdev-absmap]\nABS_HAT0X = dpad_x\nABS_HAT0Y = dpad_y\n\nABS_X = X1\nABS_Y = Y1\n\nABS_Z  = X2\nABS_RZ = Y2\n\n[axismap]\n-Y1 = Y1\n-Y2 = Y2\n\n[evdev-keymap]\nBTN_EAST=a\nBTN_C=b\nBTN_NORTH=y\nBTN_SOUTH=x\nBTN_TR2=start\nBTN_TL2=back\nBTN_Z=rt\nBTN_WEST=lt\n\nBTN_MODE = guide\n}}\n\nRefer to {{man|1|xboxdrv|url=https://xboxdrv.gitlab.io/xboxdrv.html}}{{Dead link|2023|11|25}} to see all the options.\n\nNow when you have the configuration and your device is connected you can start the {{AUR|xboxdrv}} like so:\n\n # xboxdrv --evdev /dev/btjoy --config .config/xboxdrv/ipega.conf\n\nYour games will now work with bluetooth gamepad as long as xboxdrv is running.\n\n==== iPEGA-9068 and 9087 ====\n\nFor this model, use the same procedures as above, but with the configs:\n\n{{hc|~/.config/xboxdrv/ipega.conf|2=\n#iPEGA PG-9068 and PG-9087 Config \n\n[xboxdrv]\nevdev-debug = true\nevdev-grab = true\nrumble = false\nmimic-xpad = true\n\n[evdev-absmap]\nABS_HAT0X = dpad_x\nABS_HAT0Y = dpad_y\n\nABS_X = X1\nABS_Y = Y1\n\nABS_Z  = X2\nABS_RZ = Y2\n\n[axismap]\n-Y1 = Y1\n-Y2 = Y2\n\n[evdev-keymap]\nBTN_A=a\nBTN_B=b\nBTN_Y=y\nBTN_X=x\nBTN_TR=rb\nBTN_TL=lb\nBTN_TR2=rt\nBTN_TL2=lt\nBTN_THUMBL=tl\nBTN_THUMBR=tr\nBTN_START=start\nBTN_SELECT=back\n\nBTN_MODE = guide\n}}\n\n==== Defender X7 ====\n\nFor this model, use the same procedures as above, but with the configs:\n\n{{hc|~/.config/xboxdrv/defender.conf|2=\n#Defender x7 xboxdrv config\n\n[xboxdrv]\nevdev-debug = true\nevdev-grab = true\nrumble = false\nmimic-xpad = true\n\n[evdev-absmap]\nABS_HAT0X = dpad_x\nABS_HAT0Y = dpad_y\n\nABS_X = X1\nABS_Y = Y1\n\nABS_Z  = X2\nABS_RZ = Y2\n\n[axismap]\n-Y1 = Y1\n-Y2 = Y2\n\n[evdev-keymap]\nBTN_EAST=b\nBTN_NORTH=x\nBTN_SOUTH=a\nBTN_WEST=y\nBTN_TR2=rt\nBTN_TL2=lt\nBTN_TR=rb\nBTN_TL=lb\nBTN_THUMBL=tl\nBTN_THUMBR=tr\nBTN_START=start\nBTN_SELECT=back\n\nBTN_MODE = guide\n}}\n\nNow when you have the configuration and your device is connected you can start the {{AUR|xboxdrv}} like so:\n\n # xboxdrv --evdev /dev/btjoy --config .config/xboxdrv/defender.conf\n\n=== Stadia Controller ===\n\nThe Stadia controller can also be mapped with xboxdrv:\n\n{{hc\n|~/.config/xboxdrv/stadia.conf|2=\n# Stadia xboxdrv config\n\n[xboxdrv]\nmimic-xpad=true\nsilent=true\n\n[evdev-absmap]\nABS_X=x1\nABS_Y=y1\nABS_Z=x2\nABS_RZ=y2\nABS_GAS=rt\nABS_BRAKE=lt\nABS_HAT0X=dpad_x\nABS_HAT0Y=dpad_y\n\n[axismap]\n-y1=y1\n-y2=y2\n\n[evdev-keymap]\nBTN_SOUTH=A\nBTN_EAST=B\nBTN_NORTH=X\nBTN_WEST=Y\n\nBTN_START=start\nBTN_SELECT=back\nBTN_MODE=guide\n\nBTN_THUMBL=tl\nBTN_THUMBR=tr\nBTN_TR=rb\nBTN_TL=lb\n}}\n\n=== Steam Controller ===\n\n{{Note|Kernel 4.18 [https://lore.kernel.org/lkml/20180416122703.22306-1-rodrigorivascosta@gmail.com/ provides a kernel driver] for wired/wireless use of the steam controller as a controller input device without [[Steam]].}}\n\nThe [[Steam]] client will recognize the controller and provide keyboard/mouse/gamepad emulation while Steam is running. The in-game Steam overlay needs to be enabled and working in order for gamepad emulation to work. You may need to run {{ic|udevadm trigger}} with root privileges or plug the dongle out and in again, if the controller does not work immediately after installing and running Steam. If all else fails, try restarting the computer while the dongle is plugged in.\n\nIf you are using the controller connected via Bluetooth LE, make sure the user is part of the {{ic|input}} group.\n\nIf you cannot get the Steam Controller to work, see [[#Steam Controller not pairing]].\n\nAlternatively you can install {{AUR|python-steamcontroller-git}} to have controller and mouse emulation without Steam or {{AUR|sc-controller}} for a versatile graphical configuration tool simillar to what is provided by the Steam client.\n\n{{Note|If you do not use the [[Steam runtime]], you might actually need to disable the overlay for the controller to work in certain games (Rocket Wars, Rocket League, Binding of Isaac, etc.). Right click on a game in your library, select \"Properties\", and uncheck \"Enable Steam Overlay\".}}\n\n==== Wine ====\n\n{{AUR|python-steamcontroller-git}} can also be used to make the Steam Controller work for games running under Wine. You need to find and download the application {{ic|xbox360cemu.v.3.0}} (e.g. from [https://github.com/jacobmischka/ds4-in-wine/tree/master/xbox360cemu.v.3.0 here]). Then copy the files {{ic|dinput8.dll}}, {{ic|xbox360cemu.ini}}, {{ic|xinput1_3.dll}} and {{ic|xinput_9_1_0.dll}} to the directory that contains your game executable. Edit {{ic|xbox360cemu.ini}} and only change the following values under {{ic|[PAD1]}} to remap the Steam Controller correctly to a XBox controller.\n\n{{hc|xbox360cemu.ini|2= Right Analog X=4\nRight Analog Y=-5\nA=1\nB=2\nX=3\nY=4\nBack=7\nStart=8\nLeft Thumb=10\nRight Thumb=11\nLeft Trigger=a3\nRight Trigger=a6}}\n\nNow start python-steamcontroller in Xbox360 mode ({{ic|sc-xbox.py start}}). You might also want to copy {{ic|XInputTest.exe}} from {{ic|xbox360cemu.v.3.0}} to the same directory and run it with Wine in order to test if the mappings work correctly. However neither mouse nor keyboard emulation work with this method.\n\nAlternatively you can use {{AUR|sc-controller}} for a similar graphical setup as Steam's own configurator. As of writing, it is a bit buggy here and there but offers an easy click and go way of configuring the controller.\n\n=== Xbox 360 controller ===\n\nBoth the wired and wireless (with the ''Xbox 360 Wireless Receiver for Windows'') controllers are supported by the {{ic|xpad}} kernel module and should work without additional packages. Note that using a wireless Xbox360 controller with the Play&Charge USB cable will not work. The cable is for recharging only and does not transmit any input data over the wire.\n\nIt has been reported that the default xpad driver has some issues with a few newer wired and wireless controllers, such as:\n* incorrect button mapping. ([https://github.com/ValveSoftware/steam-for-linux/issues/95#issuecomment-14009081 discussion in Steam bugtracker])\n* not-working sync. ([https://bbs.archlinux.org/viewtopic.php?id=156028 discussion in Arch Forum])\n* all four LEDs keep blinking, but controller works. TLP's USB autosuspend is one sure cause of this issue with wireless controllers. See below for fix.\n\nIf you use the [[TLP]] power management tool, you may experience connection issues with your Microsoft wireless adapter (e.g. the indicator LED will go out after the adapter has been connected for a few seconds, and controller connection attempts fail, four LEDs keep blinking but controller works). This is due to TLP's USB autosuspend functionality, and the solution is to add the Microsoft wireless adapter's device ID to TLP blacklist\n(to check device ID to blacklist, run {{ic|tlp-stat -u}}; for original MS wireless dongle just add {{ic|1=USB_DENYLIST=\"045e:0719\"}} to {{ic|/etc/tlp.conf}}),\ncheck [https://linrunner.de/en/tlp/docs/tlp-configuration.html#usb TLP configuration] for more details.\n\nIf you experience such issues, you can use [[#xboxdrv]] as the default {{ic|xpad}} driver instead.\n\nIf you wish to use the controller for controlling the mouse, or mapping buttons to keys, etc. you should use the {{AUR|xf86-input-joystick}} package (configuration help can be found using {{man|4|joystick|url=https://manpages.debian.org/latest/xserver-xorg-input-joystick/joystick.4.en.html}}). If the mouse locks itself in a corner, it might help changing the {{ic|MatchDevicePath}} in {{ic|/etc/X11/xorg.conf.d/50-joystick.conf}} from {{ic|/dev/input/event*}} to {{ic|/dev/input/js*}}.\n\nIn order to connect via Bluetooth using KDE, add the following [[kernel parameter]] {{ic|1=bluetooth.disable_ertm=1}}.\n\nIf you experience problems with the rumble feature not working in games, it may be necessary to set the environment variable {{ic|1=SDL_JOYSTICK_HIDAPI=0}}\n\n==== xboxdrv ====\n\n[https://gitlab.com/xboxdrv/xboxdrv xboxdrv] is an alternative to {{ic|xpad}} which provides more functionality and might work better with certain controllers. It works in userspace and can be launched as system service. \n\nInstall it with the {{AUR|xboxdrv}} package. Then [[start]]/[[enable]] {{ic|xboxdrv.service}}.\n\nIf you have issues with the controller being recognized but not working in steam games or working but with incorrect mappings, it may be required to modify you configuration as such:\n{{hc\n|/etc/default/xboxdrv|2=\n[xboxdrv]\nsilent = true\ndevice-name = \"Xbox 360 Wireless Receiver\"\nmimic-xpad = true\ndeadzone = 4000\n\n[xboxdrv-daemon]\ndbus = disabled\n}}\n\nThen [[restart]] {{ic|xboxdrv.service}}.\n\n===== Multiple controllers =====\n\nxboxdrv supports a multitude of controllers, but they need to be set up in {{ic|/etc/default/xboxdrv}}. For each extra controller, add an {{ic|1=next-controller = true}} line. For example, when using 4 controllers, add it 3 times:\n\n{{bc|1=\n[xboxdrv]\nsilent = true\nnext-controller = true\nnext-controller = true\nnext-controller = true\n[xboxdrv-daemon]\ndbus = disabled\n}}\n\nThen [[restart]] {{ic|xboxdrv.service}}.\n\n===== Mimic Xbox 360 controller with other controllers =====\n\nxboxdrv can be used to make any controller register as an Xbox 360 controller with the {{ic|--mimic-xpad}} switch. This may be desirable for games that support Xbox 360 controllers out of the box, but have trouble detecting or working with other gamepads.\n\nFirst, you need to find out what each button and axis on the controller is called. You can use {{Pkg|evtest}} for this. Run {{ic|evtest}} and select the device event ID number ({{ic|/dev/input/event*}}) that corresponds to your controller. Press the buttons on the controller and move the axes to read the names of each button and axis.\n\nHere is an example of the output:\n{{bc|<nowiki>\nEvent: time 1380985017.964843, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003\nEvent: time 1380985017.964843, type 1 (EV_KEY), code 290 (BTN_THUMB2), value 1\nEvent: time 1380985017.964843, -------------- SYN_REPORT ------------\nEvent: time 1380985018.076843, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90003\nEvent: time 1380985018.076843, type 1 (EV_KEY), code 290 (BTN_THUMB2), value 0\nEvent: time 1380985018.076843, -------------- SYN_REPORT ------------\nEvent: time 1380985018.460841, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002\nEvent: time 1380985018.460841, type 1 (EV_KEY), code 289 (BTN_THUMB), value 1\nEvent: time 1380985018.460841, -------------- SYN_REPORT ------------\nEvent: time 1380985018.572835, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002\nEvent: time 1380985018.572835, type 1 (EV_KEY), code 289 (BTN_THUMB), value 0\nEvent: time 1380985018.572835, -------------- SYN_REPORT ------------\nEvent: time 1380985019.980824, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90006\nEvent: time 1380985019.980824, type 1 (EV_KEY), code 293 (BTN_PINKIE), value 1\nEvent: time 1380985019.980824, -------------- SYN_REPORT ------------\nEvent: time 1380985020.092835, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90006\nEvent: time 1380985020.092835, type 1 (EV_KEY), code 293 (BTN_PINKIE), value 0\nEvent: time 1380985020.092835, -------------- SYN_REPORT ------------\nEvent: time 1380985023.596806, type 3 (EV_ABS), code 3 (ABS_RX), value 18\nEvent: time 1380985023.596806, -------------- SYN_REPORT ------------\nEvent: time 1380985023.612811, type 3 (EV_ABS), code 3 (ABS_RX), value 0\nEvent: time 1380985023.612811, -------------- SYN_REPORT ------------\nEvent: time 1380985023.708768, type 3 (EV_ABS), code 3 (ABS_RX), value 14\nEvent: time 1380985023.708768, -------------- SYN_REPORT ------------\nEvent: time 1380985023.724772, type 3 (EV_ABS), code 3 (ABS_RX), value 128\nEvent: time 1380985023.724772, -------------- SYN_REPORT ------------\n</nowiki>}}\n\nIn this case, {{ic|BTN_THUMB}}, {{ic|BTN_THUMB2}} and {{ic|BTN_PINKIE}} are buttons and {{ic|ABS_RX}} is the X axis of the right analogue stick.\nYou can now mimic an Xbox 360 controller with the following command:\n\n $ xboxdrv --evdev /dev/input/event* --evdev-absmap ABS_RX=X2 --evdev-keymap BTN_THUMB2=a,BTN_THUMB=b,BTN_PINKIE=rt --mimic-xpad\n\nThe above example is incomplete. It only maps one axis and 3 buttons for demonstration purposes. Use {{ic|xboxdrv --help-button}} to see the names of the Xbox controller buttons and axes and bind them accordingly by expanding the command above. Axes mappings should go after {{ic|--evdev-absmap}} and button mappings follow {{ic|--evdev-keymap}} (comma separated list; no spaces).\n\nBy default, xboxdrv outputs all events to the terminal. You can use this to test that the mappings are correct. Append the {{ic|--silent}} option to keep it quiet.\n\n==== Using generic/clone controllers ====\n\nSome clone gamepads might require a specific initialization sequence in order to work ([https://superuser.com/a/1380235 Super User answer]). For that you should run the following python script as the root user:\n\n{{bc|1=\n#!/usr/bin/env python3\n\nimport usb.core\n\ndev = usb.core.find(idVendor=0x045e, idProduct=0x028e)\n\nif dev is None:\n    raise ValueError('Device not found')\nelse:\n    dev.ctrl_transfer(0xc1, 0x01, 0x0100, 0x00, 0x14) \n}}\n\n=== Xbox Wireless Controller / Xbox One Wireless Controller ===\n\n==== Connect Xbox Wireless Controller with USB cable ====\n\nThis is supported by the kernel and works without any additional packages.\n\n==== Connect Xbox Wireless Controller with Bluetooth ====\n\n===== Update controller firmware via Windows 10 =====\n\nThe firmware of the Xbox Wireless Controller used to cause loops of connecting/disconnecting with Bluez. The best workaround is to plug the controller (via a USB cord) to a Windows 10 computer, download the [https://apps.microsoft.com/store/detail/xbox-accessories/9NBLGGH30XJ3?hl=en-us&gl=us Xbox Accessories] application through the Microsoft Store, and update the firmware of the controller.\n\n===== xpadneo =====\n\nA relatively new driver which does support the Xbox One S and Xbox Series X|S controller via Bluetooth is called [https://github.com/atar-axis/xpadneo/ xpadneo]. In addition to these two models, it has also basic support for the Xbox Elite Series 2 Wireless controller. In exchange for fully supporting just two controllers so far, it enables one to read out the correct battery level, supports rumble (even the one on the trigger buttons - L2/R2), corrects the (sometimes wrong) button mapping and more.\n\nInstallation is done using DKMS: {{AUR|xpadneo-dkms-git}}.\n\n{{Note|Pairing a new Xbox One S controller for the first time may prove difficult, from not pairing at all to entering a connect/disconnect loop. These problems are described [https://github.com/atar-axis/xpadneo/issues/295 there]. The best way to reliably pair the controller is to first pair it in Windows 10. However, this needs be done using the same Bluetooth adapter. A solution is to install a free copy of Windows 10 Evaluation on a Virtual machine (using [[QEMU]] or [[VirtualBox]], taking care of the Bluetooth adapter passthrough requirements, ''e.g.'' as an USB device) using Arch Linux as your host, and pair in Windows 10 first, then do the same again under your Arch Linux system. Then pairing will succeed and there will be no need of further Windows 10 use.}}\n\n==== Connect Xbox Wireless Controller with Microsoft Xbox Wireless Adapter ====\n\n===== xone =====\n\n[https://github.com/medusalix/xone xone] is a Linux kernel driver for Xbox One and Xbox Series X|S accessories. It serves as a modern replacement for xpad, supersedes xow. Currently working via wired or with the wireless dongle. This driver is still in active development.\n\nInstall {{AUR|xone-dkms-git}} and, if using the wireless dongle, {{AUR|xone-dongle-firmware}}. To retain the functionality of Xbox and Xbox 360 controllers install {{AUR|xpad-noone-dkms}}{{Broken package link|package not found}}. Reboot your system.\n\n{{Note|The headers corresponding to your kernel are required; see [[DKMS#Installation]].}}\n\nIf the controller performs poorly (low polling rate) after being paired, you will need to [https://support.xbox.com/en-US/help/hardware-network/controller/update-xbox-wireless-controller update the controller's firmware] in Windows using the \"Xbox Accessories\" app from the Microsoft Store. Theoretically this should be possible with USB passthrough to a Windows virtual machine, but you may need to dual boot to an actual (baremetal) Windows installation for the Xbox Accessories application to see the controller and do the firmware update.\n\nAlso, if you dual boot Windows, pairing the controller & adapter in Windows may cause the pairing to be lost in Linux. You will need to re-pair the controller & dongle when you reboot into Linux. This also happens in the other direction \u2014 when the controller & dongle are paired in Linux, they will need to be re-paired the next time you want to use them in Windows.\n\n===== xow =====\n\n[https://github.com/medusalix/xow xow] is a project that allows connection with a wireless dongle. It is currently in very early stages of development. It can be installed via {{AUR|xow-git}}{{Broken package link|package not found}}\n\n[[#xone|xone]] (made by the same developer) supersedes xow; using xone instead of xow is \"highly recommended.\"\n\n=== Logitech Dual Action ===\n\nThe Logitech Dual Action gamepad has a very similar mapping to the PS2 pad, but some buttons and triggers need to be swapped to mimic the Xbox controller.\n\n # xboxdrv --evdev /dev/input/event* \\\n    --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RZ=x2,ABS_Z=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y \\\n    --axismap -Y1=Y1,-Y2=Y2 \\\n    --evdev-keymap BTN_TRIGGER=x,BTN_TOP=y,BTN_THUMB=a,BTN_THUMB2=b,BTN_BASE3=back,BTN_BASE4=start,BTN_BASE=lt,BTN_BASE2=rt,BTN_TOP2=lb,BTN_PINKIE=rb,BTN_BASE5=tl,BTN_BASE6=tr \\\n    --mimic-xpad --silent\n\n=== PlayStation 2 controller via USB adapter ===\n\nTo fix the button mapping of PS2 dual adapters and mimic the Xbox controller you can run the following command:\n\n # xboxdrv --evdev /dev/input/event* \\\n    --evdev-absmap ABS_X=x1,ABS_Y=y1,ABS_RZ=x2,ABS_Z=y2,ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y \\\n    --axismap -Y1=Y1,-Y2=Y2 \\\n    --evdev-keymap   BTN_TOP=x,BTN_TRIGGER=y,BTN_THUMB2=a,BTN_THUMB=b,BTN_BASE3=back,BTN_BASE4=start,BTN_BASE=lb,BTN_BASE2=rb,BTN_TOP2=lt,BTN_PINKIE=rt,BTN_BASE5=tl,BTN_BASE6=tr \\\n    --mimic-xpad --silent\n\n=== PlayStation 3 controller ===\n\n==== Pairing via USB ====\n\nIf you own a PS3 controller and can connect with USB, plug it to your computer and press the PS button. The controller will power up and one of the four LEDs should light up indicating the controller's number.\n\n==== Pairing via Bluetooth ====\n\nInstall {{Pkg|bluez}} {{Pkg|bluez-utils}} {{Pkg|bluez-plugins}}{{Broken package link|replaced by {{Pkg|bluez-utils}}}}. Make sure bluetooth is working by following the first five steps of [[Bluetooth#Pairing]] and leave the bluetoothctl command running, then turn on the controller by pressing the middle 'PS' button(all 4 leds should be blinking quickly ~4 hz) and connect to your computer using usb. Lastly, type yes in the bluetoothctl prompt when asked '{{ic|Authorize service 00001124-0000-1000-8000-00805f9b34fb (yes/no)}}'.\n\nAlternative instructions:\nTo connect your PS3 controller to your computer using Bluetooth, you first need to install {{Pkg|bluez}} and {{Pkg|bluez-plugins}}{{Broken package link|replaced by {{Pkg|bluez-utils}}}} then connect your controller via USB. A pop-up should appear asking for pairing. Click on Trust & Authorize. You can now unplug your controller and press the PS button. The controller will connect and a LED will remain solid. You can now use it to play games. Connecting using the USB cable is only needed after the controller has been connected to another system.\n\n{{Note|\nIn the latest version of {{Pkg|bluez}} (as of 2024/01/03), the default value for {{ic|ClassicBondedOnly}} was changed from {{ic|false}} to {{ic|true}} for security reasons [https://bugs.launchpad.net/ubuntu/+source/bluez/+bug/2045931/comments/6]. This change makes it impossible to pair a Dual Shock 3 controller, as {{ic|bluetoothctl}} asks for a PIN and cannot proceed. To work around this, set {{ic|ClassicBondedOnly}} to {{ic|false}} by adding the following lines in the newly created file at {{ic|/etc/bluetooth/input.conf}}.\n\nAs of 2024-03-09, the default value for {{ic|UserspaceHID}} has also changed to {{ic|true}}. While the connection succeeds, controllers can no longer be set into operational mode unless this value is changed to {{ic|false}}. See [https://github.com/bluez/bluez/issues/771 issue #771 on Github] for more information.\n\n{{bc|<nowiki>\n[General]\nClassicBondedOnly=false\nUserspaceHID=false\n</nowiki>}}\n\nNote this solution regress on security. For the details, please refer to [https://github.com/bluez/bluez/issues/673#issuecomment-1858431729 GitHub]\n}}\n\n{{Tip|There are many complicated instructions on the internet on setting up a PS3 controller that require many steps such as compiling and installing qtsixa or sixpair and setting up the controller manually, or patching bluez with some specific patches. None of this is necessary on a modern Linux kernel and after installing bluez-plugins.}}\n\n=== PlayStation 3/4 controller ===\n\nThe DualShock 3, DualShock 4 and Sixaxis controllers work out of the box when plugged in via USB (the PS button will need to be pushed to begin). They can also be used wirelessly via Bluetooth.\n\nSteam properly recognizes it as a PS3 pad and Big Picture can be launched with the PS button. Big Picture and some games may act as if it was a 360 controller. Gamepad control over mouse is on by default. You may want to turn it off before playing games, see [[#Joystick moving mouse]].\n\n==== Pairing via Bluetooth ====\n\nInstall the {{Pkg|bluez}}, {{Pkg|bluez-plugins}}{{Broken package link|replaced by {{Pkg|bluez-utils}}}}, and {{Pkg|bluez-utils}} packages, which includes the ''sixaxis'' plugin. Then [[start]] the [[bluetooth]] service and ensure bluetooth is powered on. If using ''bluetoothctl'' start it in a terminal and then plug the controller in via USB. You should be prompted to trust the controller in bluetoothctl. A graphical bluetooth front-end may program your PC's bluetooth address into the controller automatically. Hit the PlayStation button and check that the controller works while plugged in.\n\nYou can now disconnect your controller. The next time you hit the PlayStation button it will connect without asking anything else.\n\nAlternatively, on a PS4 controller you can hold the share button and the PlayStation button simultaneously (for a few seconds) to put the gamepad in pairing mode, and pair as you would normally.\n\nGNOME's Settings also provides a graphical interface to pair sixaxis controllers when connected by wire.\n\nRemember to disconnect the controller when you are done as the controller will stay on when connected and drain the battery.\n\n{{Note|If the controller does not connect, make sure the bluetooth interface is turned on and the controllers have been trusted. (See [[Bluetooth]])}}\n\n==== Using generic/clone controllers ====\n\nUsing generic/clone Dualshock controllers is possible, however there is an issue that may require to install a patched package. The default Bluetooth protocol stack does not detect some of the clone controllers. The {{AUR|bluez-ps3}} package is a version patched to be able to detect them.\n{{AUR|bluez-plugins-ps3}} is another package that only patch the bluez-plugins may work for some controllers.\n\n=== PlayStation 4 controller ===\n\n==== Pairing via USB ====\n\nConnect your controller via USB and press the {{ic|PS}} button.\n\n==== Pairing via Bluetooth ====\n\nIf you want to use bluetooth mode, hold down the {{ic|PS}} button and {{ic|Share}} button together. The white LED of the controller should blink very quickly, and the wireless controller can be paired with your bluetooth manager (bluez, gnome-bluetooth).\n\n==== Disable touchpad acting as mouse ====\n\nThe libinput and Xorg fixes conflict with games that actually use touchpad as part of the gamepad, such as Rise of the Tomb Raider. This will work with both DualShock4 and DualSense controllers.\n\n===== KDE =====\n\nif using [[KDE Plasma]] with a mouse you can simply disable the touchpad through ''System Settings > Mouse & Touchpad > General > Device Enabled.''\n\n===== libinput =====\n\nIf using [[libinput]] with [[Xorg]], or if using [[Wayland]], then you can follow [[Libinput#Using environment variable]] to disable the touchpad device.\n\nNote that, since the touchpad is just one part of the controller, selecting the input device by vendor and product IDs will not suffice. Instead, consider selecting the device by name.\n\nFor a full set of attributes you can use, consult {{ic|udevadm info --attribute-walk --name{{=}}''device_path''}}, where {{ic|''device_path''}} is the path to the device, such as {{ic|/dev/input/event''n''}} or {{ic|/dev/input/by-id/''identifier''}}.\n\nExample snippet:\n\n{{hc|/etc/udev/rules.d/72-ds4tm.rules |\n# Disable DS4 touchpad acting as mouse\n# USB\nATTRS{name}{{=}}{{=}}\"Sony Interactive Entertainment Wireless Controller Touchpad\", ENV{LIBINPUT_IGNORE_DEVICE}{{=}}\"1\"\n# Bluetooth\nATTRS{name}{{=}}{{=}}\"Wireless Controller Touchpad\", ENV{LIBINPUT_IGNORE_DEVICE}{{=}}\"1\"}}\n\nThen, [[Udev#Loading new rules|reload udev rules]]. Reconnect the gamepad to apply changes.\n\n===== Xorg =====\n\nIf using Xorg, you can follow [[Xorg#Persistently disable input source]] with {{ic|MatchProduct \"Wireless Controller Touchpad\"}} to disable the DualShock4/DualSense touchpad. See {{ic|xinput list}} for detected product names.\n\n=== PlayStation 5 (Dualsense) controller ===\n\nBluetooth connection of Dualsense requires enabling userspace HID support, otherwise Dualsense refuses Bluetooth connection after pairing. If userspace HID is not already enabled, this can be done by editing or creating new file {{ic|/etc/bluetooth/input.conf}} with line {{ic|UserspaceHID{{=}}true}} and [[restart]]ing the {{ic|bluetooth.service}}.\n\nGNOME currently doesn't need to modify this.\n\n==== Control Mapping (Xbox) ====\n\n=====Steam Input=====\n\nThanks to '''Steam Input''', a feature that's baked in Steam Client, games w/o DualSense support can use it to translate buttons to Xbox ones.\n\nFrom the Steam tray icon, select ''Big Picture''. Then, press the ''PS Button'' on your DualSense, select ''Settings'' -> ''Controller'', ensure that ''PlayStation Controller Support'' is set to ''Enabled in Games w/o Support''.\n\n=====xboxdrv=====\n\nThanks to [https://github.com/yoyossef/ds360 yoyossef]:\n\n # xboxdrv \\\n   --evdev /dev/input/by-id/usb-Sony_Interactive_Entertainment_DualSense_Wireless_Controller-if03-event-joystick \\\n   --evdev-absmap ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y,ABS_X=X1,ABS_Y=Y1,ABS_RX=X2,ABS_RY=Y2,ABS_Z=LT,ABS_RZ=RT \\\n   --evdev-keymap BTN_SOUTH=A,BTN_EAST=B,BTN_NORTH=Y,BTN_WEST=X,BTN_START=start,BTN_MODE=guide,BTN_SELECT=back \\\n   --evdev-keymap BTN_TL=LB,BTN_TR=RB,BTN_TL2=LT,BTN_TR2=RT,BTN_THUMBL=TL,BTN_THUMBR=TR \\\n   --axismap -y1=y1,-y2=y2                          \\\n   --mimic-xpad                                     \\\n   --silent\n\nSome applications, for example, Steam inside Geforce NOW inside web browser, may be confused with original joystick events, which shadow the newly created event source.\nSimply deleting {{ic|/dev/input/js0}} works this around.\n\nThe PlayStation and mode buttons still do not work, however.\n\n==== dualsensectl ====\n\n[https://github.com/nowrep/dualsensectl dualsensectl] is a tool that can toggle the lightbar and microphone (and its LED), monitor the battery status, and power off the controller. To use it, [[install]] {{AUR|dualsensectl-git}}.\n\n== Multi-mode wired gamepads ==\n\n{{Style|Multiple improvements to be made.}}\n\nSome gamepads have 3 modes when wired: Switch, Xbox 360/Windows, Android.\n\nAnd they also don't have hotkeys to switch between them when connected ''wired''.\n\nWhen you connect such gamepad to Windows, it is in Xbox 360 Controller mode.\n\nBut when you connect such gamepad to Linux, it enters the fallback mode (which happens to be the Android mode), which has a worse polling rate (100 Hz), the Home button acting as {{ic|XF86Home}}; doesn't expose vibration, gyroscope, and accelerometer; doesn't support {{AUR|xboxdrv}} without {{ic|--evdev}}; and identifies itself as e.g. \"SHANWAN Android Gamepad\" which is not liked by some games (though for SDL2 apps you can set a name in {{ic|SDL_GAMECONTROLLERCONFIG}}).\n\nWhen you connect the gamepad, it first tries to be a \"Switch Pro Controller\", but for some reason the Linux kernel considers the descriptors (sent by the gamepad) invalid, and therefore disconnects the gamepad. This causes the gamepad to reconnect in the aforementioned fallback mode.\n\nIn {{ic|dmesg}} this looks like:\n\n{{bc|1=\nusb 1-5.3: new full-speed USB device number 37 using xhci_hcd\nusb 1-5.3: unable to read config index 0 '''descriptor'''/start: -32\nusb 1-5.3: chopping to 0 config(s)\nusb 1-5.3: can't read configurations, error '''-32'''\nusb 1-5.3: new full-speed USB device number 38 using xhci_hcd\nusb 1-5.3: New USB device found, idVendor=0079, idProduct=181c, bcdDevice= 1.00\nusb 1-5.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0\nusb 1-5.3: Product: Android Gamepad\nusb 1-5.3: Manufacturer: SHANWAN\n}}\n\nNotice that the \"USB Device number\" gets increased after the failure. For some USB hubs the error code is {{ic|1=-32}} (EPIPE: broken pipe), for others it is {{ic|1=-71}} (EPROTO: protocol error).\n\nThis error can be fixed by setting a quirk in {{ic|usbcore}} module (not {{ic|usbhid}}) for Switch controller's USB ID:\n\n # If you have already *manually* set quirks for other devices,\n # then don't forget to include them in the two commands below \u2193\n echo -n \"057e:2009:'''ik'''\" | sudo tee /sys/module/usbcore/parameters/quirks\n\n # Optionally constant polling mode:\n sudo modprobe -r usbhid ; sleep 4 ; sudo modprobe -v usbhid \"quirks=0x057e:0x2009:0x400\"\n\n{{ic|ik}} are 2 flags ([https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/7.7_release_notes/kernel_parameters_changes List of all flags]).\n\nThe flag {{ic|i}} means \"allow bad descriptors\".\n\nAnd the flag {{ic|k}} means \"disable LPM\" (link power management). It is specified in the command because it often helps devices of other types. This flag might do nothing because not all USB controllers even have LPM. You can try without {{ic|k}} aftewards.\n\nYou could also try the flag {{ic|g}} (\"200 ms pause after reading the descriptors\") because it often helps devices of other types, but at least in the case of iPEGA PG-SW038C (a $10 gamepad) flag {{ic|g}} causes it infinitely reconnect.\n\nNote that once the gamepad downgrades to the fallback mode, it will never change its mode until you reconnect it. Even {{ic|echo 0 then 1 > %sysfsGamepadDir%/authorized}} doesn't work. And that's why passing the gamepad to a Windows VM would not help; {{ic|usbcore}} inits USB devices before passing them to a VM.\n\n<hr/>\n\nNow reconnect the gamepad, it should be finally listed now as {{ic|ID 057e:2009 Nintendo Co., Ltd Switch Pro Controller}} when you run {{ic|lsusb}}. If that's true, then you can make this quirk permanent by add this option to GRUB:\n\n{{ic|1=usbcore.quirks=\"057e:2009:ik\"}}\n\nalong with (optionally) {{ic|1=usbhid.quirks=\"0x057e:0x2009:0x400\"}} which stops the pointless blinking of LEDs when the gamepad is unused.\n\nNow that your gamepad is in Switch mode, you'll run into a problem of SDL2 deciding to become a user-space driver (for this it uses {{pkg|libusb}}, just like {{AUR|xboxdrv}}), which causes any SDL2 game to claim the whole gamepad (that is: {{ic|/dev/input/*}} and {{ic|/dev/hidraw*}} disappear, yet it's still possible to play this launched game with the gamepad), so you can't use the gamepad in multiple apps anymore.\n\nThis can be fixed by adding\n\n SDL_HIDAPI_DISABLE_LIBUSB=1\n\ninto {{ic|/etc/environment}}, and rebooting.\n\nIf you have {{AUR|joycond}}{{Broken package link|package not found}}, then delete it, because it is useless for such Switch-like gamepads, moreover {{ic|joycond}} has a {{ic|udev}} rule that disallows Steam to provide its own user-space driver.\n\nUnlike SDL2 (when it uses {{ic|/dev/hidraw*}} which is its preferred way in 2023), {{ic|xboxdrv}} and {{ic|/dev/input/*}} provide incorrect values for the right stick's X axis (it's always \u22640). Probably a bug in {{ic|hid-nintendo}} or something. For this reason {{ic|xboxdrv}} is unusable in most games when in Switch mode.\n\nYou can test your gyroscope and accelerometer by launching {{AUR|antimicrox}}. They are not available in other gamepad modes when connected wired because their values are sent ''mixed'' with other event data (RX/RY/etc) in a special format that is not fully compatible with {{ic|xpad}} and {{ic|hid-generic}}.\n\nIf you see in {{ic|dmesg}} that {{ic|hid-generic}} is used by your gamepad, then it's probably because you have built Linux kernel with your own config without {{ic|hid-nintendo}}. Unfortuately, Switch mode + {{ic|hid-generic}} is as useless as the fallback mode (even no vibration).\n\n=== Xbox 360 Controller mode ===\nAfter having completed everything above (i.e. 1-2 quirks, 1 envvar),\n\nadd\n\n blacklist hid_nintendo\n\ninto {{ic|1=/etc/modprobe.d/blacklist.conf}}\n\nthen run {{ic|1=sudo mkinitcpio -P}} to rebuild {{ic|/boot/initramfs*}} (kernel reads {{ic|/etc/modprobe.d/}} only from its own initramfs, not your rootfs)\n\nNow create the following file: {{hc|1=/etc/udev/rules.d/10-disallow-generic-driver-for-switch.rules|2=\n# If\n# 1. a gamepad is multi-mode (Switch, X360, PC) and defaults to USB ID 057e:2009\n# AND at the same time\n# 2. `hid-nintendo` module can't be loaded (blacklisted or not compiled)\n# AND at the same time\n# 3. there's already a launched game that immediately grabs a gamepad,\n#\n# Then when you connect such gamepad, it will stay in \"Switch Pro\" mode,\n# but using the fallback `hid-generic` module\n# which would result in no vibration/etc\n# despite still being listed as a \"Switch Pro Controller\".\n\n# But by notifying the gamepad that we abandon to use it as an HID,\n# it automatically downgrades to \"Xbox 360 Controller\" mode,\n# which causes vibration and `xboxdrv` to work.\nSUBSYSTEM==\"hid\", DRIVER==\"hid-generic\", ATTRS{idVendor}==\"057e\", ATTRS{idProduct}==\"2009\", RUN=\"/bin/sh -c 'echo $id:1.0 > /sys/bus/usb/drivers/usbhid/unbind'\"\n}}\nthen run {{ic|sudo udevadm control --reload-rules && sudo udevadm trigger}}\n\nSince you probably don't want to reboot, run {{ic|sudo modprobe -r hid_nintendo}}\n\nFrom now on, to switch (\"downgrade\") from Switch mode to Xbox 360 mode, just run {{ic|sudo modprobe -r hid_nintendo}} (you don't even need to reconnect it). Within 2 seconds you'll have {{ic|045e:028e Microsoft Corp. Xbox360 Controller}} in {{ic|lsusb}}\n\nAnd if you want to switch vice versa:\n# {{ic|sudo modprobe hid_nintendo}} (even though it is blacklisted, this command still works because blacklisting just means \"don't load this module ''automatically''\").\n# Reconnect.\n\n==== Alternative rootless solution ====\nIf you don't have root access, then:\n\n# Power off your PC (not just suspend)\n# Reconnect your gamepad.\n# Power the PC on.\n# UEFI (just like non-virtualized Windows) automatically and successfully initializes the gamepad (even if it's connected through a USB hub in your monitor) despite the invalid descriptors.\n# The gamepad receives info from UEFI (or maybe GRUB) that it's no longer needed as an HID, which causes it to switch (\"downgrade\") to Xbox 360 Controller mode. Switching between modes is done this way: the gamepad disconnects, then connects under a different USB ID.\n# You can even suspend (without turning off the monitor if that's what it's connected to) and then wake-up the PC, and it will still be in Xbox 360 Controller mode. But if you reconnect the gamepad, it will be in the fallback mode, so you'll have to follow the instruction again.\n\n=== USB debugging ===\nYou'll probably not need to know this, but this USB ID (057e:2009) was discovered by USB debugging:\n\n # Allow debugging of the kernel:\n sudo ls /sys/kernel/debug/usb >/dev/null 2>&1 || sudo mount -t debugfs none_debugfs /sys/kernel/debug\n # Load the module that allows sniffing of the traffic of USB buses:\n sudo modprobe usbmon\n # We need only connection events, and in these events\n # we need only a USB ID which is in the pre-pre-last column:\n sudo /bin/grep --line-buffered -Po '(?<=0 0 18 = .{18}).{8}' /sys/kernel/debug/usb/usbmon/'''99999'''u | /bin/sed -E 's/([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})/\\2\\1:\\4\\3/'\n\nwhere {{ic|99999}} must be replaced with the USB Bus number that your gamepad uses, e.g. {{ic|1}} (without leading zeroes). It can be found by running {{ic|lsusb}}.\n\nIf nothing helped and your gamepad still works in full capacity only in Windows, you can catch USB messages while in Windows, and then replay them while in Linux. See [https://github.com/JohnDMcMaster/usbrply usbrply]. For this, Windows must not be in VM because Linux kernel's {{ic|usbcore}} initializes a USB device before passing it to a VM. This could be avoided by buying a PCI-E USB controller and passing it through (External USB hubs can't be passed through). Or you can pass-through your motherboard's own USB controller if it is in a IOMMU group without devices important for you:\n\n{| role=\"presentation\" class=\"wikitable mw-collapsible mw-collapsed\"\n| <strong>Script which lists IOMMU groups</strong>\n|-\n| {{hc|list-iommu-groups.sh|<nowiki>\n#!/bin/bash\nshopt -s nullglob\nfor g in $(find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V); do\n  echo \"IOMMU Group ${g##*/}:\"\n  for d in $g/devices/*; do\n      echo -e \"\\t$(lspci -nns ${d##*/})\"\n  done;\ndone;</nowiki>}}\n|}\n\n== Tips and Tricks ==\n\n=== Gamepad over network ===\n\nIf you want to use your gamepad with another computer over a network, you can use [[USB/IP]] or {{AUR|netstick-git}} to do this.\n\n== Troubleshooting ==\n\n=== Device permissions ===\n\nGamepad devices are affected by [[Udev#Allowing regular users to use devices|udev rules]]: unless they grant access to the device, it simply will not be readable by users. This section investigates the possibility of you already having a configuration file handling this.\n\nAny gamepad device, regardless of whether it is over USB or Bluetooth, is handled by the [https://docs.kernel.org/input/input_uapi.html \"input\" subsystem of the kernel], corresponding with {{ic|/dev/input}}. It's also common for udev rules to target the [https://docs.kernel.org/hid/hidraw.html \"hidraw\" kernel module]. Combining these, we can understand udev's handling of these devices by inspecting the configuration shipped by packages:\n\n $ grep --extended-regexp 'SUBSYSTEM==\"input\"|KERNEL==\"hidraw' --recursive /usr/lib/udev/rules.d\n\nSome examples of applications which ship noteworthy rules:\n\n* [[systemd]]'s default rules set the group of all {{ic|input}} devices to {{ic|input}}, and the mode of joystick devices to {{ic|664}} [https://github.com/systemd/systemd/blob/edfb4a474e5cbef6578a70aae7f08a0f435c6c6a/rules.d/50-udev-default.rules.in#L33].\n* [[Steam]] ships udev rules allowing access to a variety of controllers. See [https://steamcommunity.com/app/353370/discussions/2/1735465524711324558/ this Steam discussion] for further info about the contents of the rules.\n* [[Dolphin emulator]] ships udev rules allowing access to controllers it supports.\n\nIf your system does not already happen to have a udev rule for the device you want to use, you can either write one yourself or install the {{AUR|game-devices-udev}} package and restart your computer.\n\n{{Note|It is possible to add a user to the {{ic|input}} group in order to give them access to all devices. However, this is not recommended [https://github.com/systemd/systemd/issues/4288].}}\n\n=== Joystick moving mouse ===\n\nSometimes USB gamepad can be recognized as HID mouse (only in X, it is still being installed as {{ic|/dev/input/js0}} as well). Known issue is cursor being moved by the joystick, or escaping to en edge of a screen right after plugin. If your application can detect gamepad by itself, you can remove the {{AUR|xf86-input-joystick}} package.\n\nA more gentle solution is described in [[#Disable joystick from controlling mouse]].\n\n=== Gamepad is not working in FNA/SDL based games ===\n\nIf you are using a generic non-widely used gamepad you may encounter issues getting the gamepad recognized in games based on SDL. Since [https://github.com/flibitijibibo/FNA/commit/e55742cfe7e38b778a21ed8a12cb2f2081490d8d 14 May 2015], FNA supports dropping a {{ic|gamecontrollerdb.txt}} into the executable folder of the game, for example the [https://github.com/gabomdq/SDL_GameControllerDB SDL_GameControllerDB].\n\nAs an alternative and for older versions of FNA or for SDL you can generate a mapping yourself by downloading the SDL source code via https://libsdl.org/, navigating to {{ic|/test/}}, compile the {{ic|controllermap.c}} program (alternatively install {{AUR|controllermap}}) and run the test. After completing the controllermap test, a GUID will be generated that you can put in the {{ic|SDL_GAMECONTROLLERCONFIG}} environment variable which will then be picked up by SDL/FNA games. For example:\n\n $ export SDL_GAMECONTROLLERCONFIG=\"030000008f0e00000300000010010000,GreenAsia Inc. USB Joystick ,platform:Linux,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,\"\n\n=== Gamepad is not recognized by all programs ===\n\nSome software, Steam for example, will only recognize the first gamepad it encounters. Due to a bug in the driver for Microsoft wireless periphery devices this can in fact be the bluetooth dongle. If you find you have a {{ic|/dev/input/js*}} and {{ic|/dev/input/event*}} belonging to you keyboard's bluetooth transceiver you can get automatically get rid of it by creating according udev rules: \n\n{{hc|/etc/udev/rules.d/99-btcleanup.rules|2=\nACTION==\"add\", KERNEL==\"js[0-9]*\", SUBSYSTEM==\"input\", KERNELS==\"...\", ATTRS{bInterfaceSubClass}==\"00\", ATTRS{bInterfaceProtocol}==\"00\", ATTRS{bInterfaceNumber}==\"02\", RUN+=\"/usr/bin/rm /dev/input/js%n\"\nACTION==\"add\", KERNEL==\"event*\", SUBSYSTEM==\"input\", KERNELS==\"...\", ATTRS{bInterfaceSubClass}==\"00\", ATTRS{bInterfaceProtocol}==\"00\", ATTRS{bInterfaceNumber}==\"02\", RUN+=\"/usr/bin/rm /dev/input/event%n\"\n}}\n\nCorrect the {{ic|1=KERNELS==\"...\"}} to match your device. The correct value can be found by running\n\n # udevadm info -an /dev/input/js0\n\nAssuming the device in question is {{ic|/dev/input/js0}}. After you placed the rule reload the rules with\n\n # udevadm control --reload\n\nThen replug the device making you trouble. The joystick and event devices should be gone, although their number will still be reserved. But the files are out of the way.\n\n=== Vibration does not work in certain Windows games ===\n\nSome Windows games look for an Xbox 360 controller in particular, causing vibration to not work even with otherwise functional XInput gamepads. One example of such game is [https://www.pcgamingwiki.com/wiki/Inside Inside].\n\nAs a work-around for these games:\n\n* [[Kernel modules#Manual module handling|Unload]] the {{ic|xpad}} kernel module.\n* Launch {{ic|xboxdrv}}, including Xbox 360 mimicking gamepad and with vibration support:\n\n # xboxdrv --mimic-xpad --force-feedback\n\n=== Steam Controller ===\n\n==== Steam Controller not pairing ====\n\nThere are some unknown cases where the packaged udev rule for the Steam controller does not work ({{bug|47330}}). The most reliable workaround is to make the controller world readable. Copy the rule {{ic|/usr/lib/udev/rules.d/70-steam-controller.rules}} to {{ic|/etc/udev/rules.d}} with a later prioritiy and change anything that says {{ic|1=MODE=\"0660\"}} to {{ic|1=MODE=\"066'''6'''\"}} e.g.\n\n{{hc|/etc/udev/rules.d/99-steam-controller-perms.rules|2=\n...\nSUBSYSTEM==\"usb\", ATTRS{idVendor}==\"28de\", MODE=\"0666\"\n...\n}}\n\nYou may have to reboot in order for the change to take effect.\n\n==== Steam Controller makes a game crash or not recognized ====\n\nIf your Steam Controller is working well in Steam Big Picture mode, but not recognized by a game or the game starts crashing when you plug in the controller, this may be because of the native driver that has been added to the Linux kernel 4.18. Try to unload it, restart Steam and replug the controller.\n\nThe module name of the driver is {{ic|hid_steam}}, so to unload it you may perform:\n\n # rmmod hid_steam\n\n=== Xbox One Wireless Gamepad detected but no inputs recognized ===\n\nThis can occur when using a third party Xbox One controller with the {{ic|xpad}} or [[#xboxdrv]] drivers. Try switching to [[#xpadneo]].\n\n=== Playstation 4 controllers ===\n\n==== Controller not recognized when using Bluetooth ====\n\n[[Install]] the {{AUR|ds4drv}} package and run it with the hidraw ({{ic|ds4drv --hidraw}}) backend parameter.\n\n==== Button mapping ====\n\nTo fix the button mapping of PS4 controller you can use the following command with xboxdrv (or try with the [https://github.com/chrippa/ds4drv ds4drv] program, {{AUR|ds4drv}}):\n\n # xboxdrv \\\n    --evdev /dev/input/by-id/usb-Sony_Computer_Entertainment_Wireless_Controller-event-joystick\\\n    --evdev-absmap ABS_X=x1,ABS_Y=y1                 \\\n    --evdev-absmap ABS_Z=x2,ABS_RZ=y2                \\\n    --evdev-absmap ABS_HAT0X=dpad_x,ABS_HAT0Y=dpad_y \\\n    --evdev-keymap BTN_A=x,BTN_B=a                   \\\n    --evdev-keymap BTN_C=b,BTN_X=y                   \\\n    --evdev-keymap BTN_Y=lb,BTN_Z=rb                 \\\n    --evdev-keymap BTN_TL=lt,BTN_TR=rt               \\\n    --evdev-keymap BTN_SELECT=tl,BTN_START=tr        \\\n    --evdev-keymap BTN_TL2=back,BTN_TR2=start        \\\n    --evdev-keymap BTN_MODE=guide                    \\\n    --axismap -y1=y1,-y2=y2                          \\\n    --mimic-xpad                                     \\\n    --silent\n\n==== Motion controls taking over joypad controls and/or causing unintended input with joypad controls  ====\n\n{{Style|Could likely use the same solution as [[Gamepad#Disable touchpad acting as mouse]], which is already refactored into other pages where appropriate.}}\n\nWith certain cloud gaming applications such as Parsec and Shadow, the Dualshock 4 V1 and V2 motion controls can conflict with the joypad controls resulting in the joypad not working, and with certain input sensitive games, especially racing games, the motion controls can cause unintentional drift during joypad control gameplay.\n\nThis can be worked around by disabling the motion controls and the touchpad by adding the following udev rules:\n\n{{hc|1=/etc/udev/rules.d/51-disable-DS3-and-DS4-motion-controls.rules|2=\nSUBSYSTEM==\"input\", ATTRS{name}==\"*Controller Motion Sensors\", RUN+=\"/bin/rm %E{DEVNAME}\", ENV{ID_INPUT_JOYSTICK}=\"\"\nSUBSYSTEM==\"input\", ATTRS{name}==\"*Controller Touchpad\", RUN+=\"/bin/rm %E{DEVNAME}\", ENV{ID_INPUT_JOYSTICK}=\"\"\n}}\n\nThen [[udev#Loading new rules|reload the rules]] or reboot: these rules should work in both USB and Bluetooth mode."
                    }
                ]
            },
            "1253": {
                "pageid": 1253,
                "ns": 0,
                "title": "Fonts",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Fonts]]\n[[de:Schriftarten]]\n[[es:Fonts]]\n[[ja:\u30d5\u30a9\u30f3\u30c8]]\n[[uk:Fonts]]\n[[zh-hans:Fonts]]\n{{Related articles start}}\n{{Related|Font configuration}}\n{{Related|List of applications/Utilities#Font viewers}}\n{{Related|Linux console#Fonts}}\n{{Related|Java Runtime Environment fonts}}\n{{Related|Metric-compatible fonts}}\n{{Related|Microsoft fonts}}\n{{Related articles end}}\n\nFrom [[Wikipedia:Computer font]]: \"A computer font is implemented as a digital data file containing a set of graphically related glyphs. A computer font is designed and created using a font editor. A computer font specifically designed for the computer screen, and not for printing, is a screen font.\"\n\nNote that certain font licenses may impose some legal limitations.\n\n== Font formats ==\n\nMost computer fonts used today are in either ''bitmap'' or ''outline'' data formats.\n;Bitmap fonts: Consist of a matrix of dots or pixels representing the image of each glyph in each face and size.\n;Outline or ''vector'' fonts: Use B\u00e9zier curves, drawing instructions and mathematical formulae to describe each glyph, which make the character outlines scalable to any size.\n\n=== Bitmap formats ===\n\n* [[Wikipedia:Glyph Bitmap Distribution Format|Bitmap Distribution Format]] (BDF) by Adobe\n* [[Wikipedia:Portable Compiled Format|Portable Compiled Format]] (PCF) by Xorg\n* [[Wikipedia:PC Screen Font|PC Screen Font]] (PSF) used by the Kernel for console fonts, not supported by Xorg (for Unicode PSF files the extension is {{ic|psfu}})\n* OpenType bitmap fonts (OTB), [https://fedoraproject.org/wiki/Changes/ProvideOpenTypeBitmapFonts]\n\nThese formats can also be gzipped. See [[#Bitmap]] for the available bitmap fonts.\n\n=== Outline formats ===\n\n* [[Wikipedia:PostScript fonts|PostScript fonts]] by Adobe \u2013 has various formats, e.g: Printer Font ASCII (PFA) and Printer Font Binary (PFB)\n* [[Wikipedia:TrueType|TrueType]] by Apple and Microsoft (file extension: {{ic|ttf}})\n* [[Wikipedia:OpenType|OpenType]] by Microsoft, built on TrueType (file extensions: {{ic|otf}}, {{ic|ttf}})\n\nFor most purposes, the technical differences between TrueType and OpenType can be ignored.\n\n=== Other formats ===\n\nThe typesetting application [[TeX]] and its companion font software, ''Metafont'', traditionally renders characters using its own methods. Some file extensions used for fonts from these two programs are {{ic|*pk}}, {{ic|*gf}}, {{ic|mf}} and {{ic|vf}}. Modern versions can also use TrueType and OpenType fonts.\n\n[https://fontforge.github.io/en-US/ FontForge] ({{Pkg|fontforge}}), a font editing application, can store fonts in its native text-based format, {{ic|sfd}}, ''s''pline ''f''ont ''d''atabase.\n\nThe [https://www.w3.org/TR/SVG/fonts.html SVG] format also has its own font description method.\n\n== Installation ==\n\nThere are various methods for installing fonts.\n\n=== Pacman ===\n\nFonts and font collections in the enabled repositories can be installed using [[pacman]].\n\nAvailable fonts may be found by [[pacman#Querying package databases|querying packages]] (e.g. for {{ic|font}} or {{ic|ttf}}).\n\n=== Creating a package ===\n\nYou should give pacman the ability to manage your fonts, which is done by [[Creating packages|creating an Arch package]]. These can also be shared with the community in the [[AUR]]. The packages to install fonts are particularly similar; see [[Font packaging guidelines]].\n\nThe family name of a font file can be acquired with the use of {{ic|fc-query}} for example: {{ic|fc-query -f '%{family[0]}\\n' /path/to/file}}. The formatting is described in {{man|3|FcPatternFormat}}.\n\n=== Manual installation ===\n\nThe recommended way of adding fonts that are not in the repositories of your system is described in [[#Creating a package]]. This gives pacman the ability to remove or update them at a later time.\n\nAlternatively, fonts can be installed manually:\n\n* For a single user, install fonts to {{ic|~/.local/share/fonts/}}.\n** In many cases this suffices, unless you run graphical applications as other users.\n** In the past {{ic|~/.fonts/}} was used, but is now deprecated.\n* For system-wide (all users) installation, place your fonts under {{ic|/usr/local/share/fonts/}}.\n** You may need to create the directory first: {{ic|mkdir -p /usr/local/share/fonts}}.\n** {{ic|/usr/share/fonts/}} is under the purview of the package manager, and should not be modified manually.\n\nThe creation of a subdirectory structure is up to the user, and varies among Linux distributions. For clarity, it is good to keep each font in its own directory. Fontconfig will search its default paths recursively, ensuring nested files get picked up.\n\nAn example structure might be:\n\n{{bc|\n/usr/local/share/fonts/\n\u251c\u2500\u2500 otf\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 SourceCodeVariable\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 SourceCodeVariable-Italic.otf\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 SourceCodeVariable-Roman.otf\n\u2514\u2500\u2500 ttf\n    \u251c\u2500\u2500 AnonymousPro\n    \u2502\u00a0\u00a0 \u251c\u2500\u2500 Anonymous-Pro-B.ttf\n    \u2502   \u251c\u2500\u2500 Anonymous-Pro-I.ttf\n    \u2502\u00a0\u00a0 \u2514\u2500\u2500 Anonymous-Pro.ttf\n    \u2514\u2500\u2500 CascadiaCode\n     \u00a0\u00a0 \u251c\u2500\u2500 CascadiaCode-Bold.ttf\n     \u00a0\u00a0 \u251c\u2500\u2500 CascadiaCode-Light.ttf\n        \u2514\u2500\u2500 CascadiaCode-Regular.ttf\n}}\n\nThe font files need to have sufficient read permissions for all users, i.e. at least [[chmod]] {{ic|444}} for files, and {{ic|555}} for directories.\n\nFor the Xserver to load fonts directly (as opposed to the use of a ''font server''), the directory for your newly added font must be added with a FontPath entry. This entry is located in the ''Files'' section of your [[Xorg#Configuration|Xorg configuration file]] (e.g. {{ic|/etc/X11/xorg.conf}} or {{ic|/etc/xorg.conf}}). See [[#Older applications]] for more detail.\n\nFinally, update the fontconfig cache (usually unnecessary as software using the fontconfig library does this):\n\n $ fc-cache\n\n=== Older applications ===\n\nWith older applications that do not support fontconfig (e.g. GTK 1.x applications, and {{ic|xfontsel}}) the index will need to be created in the font directory:\n\n $ mkfontscale\n $ mkfontdir\n\nOr to include more than one folder with one command:\n\n $ for dir in /font/dir1/ /font/dir2/; do xset +fp $dir; done && xset fp rehash\n\nOr if fonts were installed in a different sub-folders under the e.g. {{ic|/usr/share/fonts}}:\n\n $ for dir in * ; do if [  -d  \"$dir\"  ]; then cd \"$dir\";xset +fp \"$PWD\" ;mkfontscale; mkfontdir;cd .. ;fi; done && xset fp rehash\n\nAt times the X server may fail to load the fonts directory and you will need to rescan all the {{ic|fonts.dir}} files:\n\n # xset +fp /usr/share/fonts/misc # Inform the X server of new directories\n # xset fp rehash                # Forces a new rescan\n\nTo check that the font(s) is included:\n\n $ xlsfonts | grep fontname\n\n{{Note|Many packages will automatically configure Xorg to use the font upon installation. If that is the case with your font, this step is not necessary.}}\n\nThis can also be set globally in {{ic|/etc/X11/xorg.conf}} or {{ic|/etc/X11/xorg.conf.d}}.\n\nHere is an example of the section that must be added to {{ic|/etc/X11/xorg.conf}}. Add or remove paths based on your particular font requirements.\n\n{{bc|\n# Let X.Org know about the custom font directories\nSection \"Files\"\n    FontPath    \"/usr/share/fonts/100dpi\"\n    FontPath    \"/usr/share/fonts/75dpi\"\n    FontPath    \"/usr/share/fonts/cantarell\"\n    FontPath    \"/usr/share/fonts/cyrillic\"\n    FontPath    \"/usr/share/fonts/encodings\"\n    FontPath    \"/usr/share/fonts/misc\"\n    FontPath    \"/usr/share/fonts/truetype\"\n    FontPath    \"/usr/share/fonts/TTF\"\n    FontPath    \"/usr/share/fonts/util\"\nEndSection\n}}\n\n=== Pango warnings ===\n\nWhen [https://www.pango.org/ Pango] is in use on your system it will read from [https://www.freedesktop.org/wiki/Software/fontconfig fontconfig] to sort out where to source fonts.\n\n (process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='common'\n (process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='latin'\n\nIf you are seeing errors similar to this and/or seeing blocks instead of characters in your application then you need to add fonts and update the font cache. This example uses the {{Pkg|ttf-liberation}} fonts to illustrate the solution (after successful installation of the package) and runs as root to enable them system-wide.\n\n{{hc|# fc-cache|\n/usr/share/fonts: caching, new cache contents: 0 fonts, 3 dirs\n/usr/share/fonts/TTF: caching, new cache contents: 16 fonts, 0 dirs\n/usr/share/fonts/encodings: caching, new cache contents: 0 fonts, 1 dirs\n/usr/share/fonts/encodings/large: caching, new cache contents: 0 fonts, 0 dirs\n/usr/share/fonts/util: caching, new cache contents: 0 fonts, 0 dirs\n/var/cache/fontconfig: cleaning cache directory\nfc-cache: succeeded\n}}\n\nYou can test for a default font being set like so:\n\n{{hc|$ fc-match|\nLiberationMono-Regular.ttf: \"Liberation Mono\" \"Regular\"\n}}\n\n== Font packages ==\n\nThis is a selective list that includes many font packages from the [[AUR]] along with those in the official repositories. Fonts are tagged \"Unicode\" if they have wide [[wikipedia:unicode|Unicode]] support.\n\n{{Tip|[https://github.com/ternstor/distrofonts Archfonts] is a Python script that can be used to generate an overview of all the TTF fonts found in the official repositories and in the AUR.}}\n\n=== Bitmap ===\n\n{{Note|{{Pkg|pango}} 1.44 [https://blogs.gnome.org/mclasen/2019/05/25/pango-future-directions/ dropped support for FreeType in favor of HarfBuzz] thus [https://blogs.gnome.org/mclasen/2019/08/07/pango-1-44-wrap-up/ losing support for traditional BDF/PCF bitmap fonts], so some applications (e.g. {{Pkg|gnome-terminal}}) will not work with such fonts anymore, showing rectangles instead of glyphs. See {{Bug|63297}}, [https://gitlab.gnome.org/GNOME/pango/issues/386 Pango issue #386] and [https://github.com/harfbuzz/harfbuzz/issues/1897 HarfBuzz issue #1897].}}\n\n* Default 8\u00d716\n* [https://github.com/seraxis/pcf-spectrum-berry Berry] ({{AUR|pcf-spectrum-berry}}) \u2013 8px\n* [https://www.dcmembers.com/jibsen/download/61/ Dina] ({{AUR|dina-font}}) \u2013 6pt, 8pt, 9pt, 10pt, monospaced, based on Proggy\n* [http://openlab.jp/efont/unicode/ Efont] ({{AUR|efont-unicode-bdf}}) \u2013 10px, 12px, 14px, 16px, 24px, normal, bold and italic\n* [https://font.gohu.org/ Gohu] ({{AUR|gohufont}}) \u2013 11px, 14px, normal and bold\n* [https://typedesign.replit.app/kissinger2.html Kissinger 2] \u2013 8\u00d716, 16\u00d716 (Unifont competitor)\n* [http://artwizaleczapka.sourceforge.net/ Lime] ({{AUR|artwiz-fonts}})\n* [https://tobiasjung.name/profont/ ProFont] ({{AUR|ttf-profont-iix}}) \u2013 10px, 11px, 12px, 15px, 17px, 22px, 29px, normal\n* [[Wikipedia:Proggy programming fonts|Proggy]] ({{AUR|proggyfonts}}) \u2013 Has different variants\n* [http://www.fial.com/~scott/tamsyn-font/ Tamsyn] ({{AUR|tamsyn-font}})\n* [https://github.com/lucy/tewi-font Tewi] ({{AUR|bdf-tewi-git}})\n* [https://unifoundry.com/unifont.html Unifont] \u2013 8\u00d716, 16\u00d716 ([[Wikipedia:Unicode font#Comparison of fonts|most extensive]] Unicode coverage of any font) ({{AUR|bdf-unifont}})\n\nWorks with Pango 1.44 and later:\n\n* [https://tobiasjung.name/profont/ ProFont] ({{AUR|profont-otb}}) \u2013 OpenType Bitmap (OTB) variant of ProFont\n* [https://xorg.freedesktop.org/releases/individual/font/ Misc Fixed] {{AUR|xorg-fonts-misc-otb}}\n* [https://font.gohu.org/ Gohufont] ({{AUR|gohufont-otb}})\n* [https://github.com/slavfox/Cozette/ Cozette] ({{AUR|cozette-otb}})\n* [https://terminus-font.sourceforge.net/ Terminus] ({{Pkg|terminus-font}})\n* More [https://aur.archlinux.org/packages/?O=0&SeB=n&K=-otb&outdated=&SB=n&SO=a&PP=50&do_Search=Go OTB] fonts on the AUR\n\n=== Latin script ===\n\n==== Families ====\n\nPackages [[Font package guidelines#Provides|providing a base font set]]:\n\n* [[Wikipedia:Bitstream Vera|Bitstream Vera]] ({{Pkg|ttf-bitstream-vera}}) \u2013 Includes sans-serif, serif, and monospaced fonts. Bitstream Vera Sans is metrically compatible with [[Wikipedia:Verdana|Verdana]].\n* [[Wikipedia:Croscore fonts|Croscore fonts]] ({{Pkg|ttf-croscore}}) \u2013 [[Metric-compatible fonts]] for Helvetica, Times, Courier and Georgia \u2014 named Arimo, Tinos, Cousine and Gelasio respectively, shipped with Chrome OS\n* [[Wikipedia:DejaVu fonts|DejaVu fonts]] ({{Pkg|ttf-dejavu}}) \u2013 Bitstream Vera modified for greater Unicode coverage\n* [[Wikipedia:Droid (font)|Droid]] ({{Pkg|ttf-droid}}) \u2013 Default font for older Android versions with wide Unicode coverage including CJK but not symbols and emojis\n* [[Wikipedia:GNU FreeFont|GNU FreeFont]] ({{Pkg|gnu-free-fonts}}) \u2013 Includes three fonts \u2014 FreeSans, FreeSerif and FreeMono \u2014 that are clones of Helvetica, Times, and Courier respectively. Most Latin characters are from [[Wikipedia:URW Type Foundry|URW]] [[Wikipedia:Ghostscript#Free_fonts|Ghostscript]] fonts (e.g., [[Wikipedia:Nimbus Roman No. 9 L|Nimbus Roman]], [[Wikipedia:Nimbus Sans|Nimbus Sans]]), non-Latin characters come from many sources with good Unicode coverage, but do not include CJK.\n* [[Wikipedia:IBM Plex|IBM Plex]] ({{Pkg|ttf-ibm-plex}}) \u2013 Serif, sans-serif, condensed sans-serif and monospace with true italics\n* [https://input.djr.com/info/ Input] ({{Pkg|ttf-input}}) \u2013 Fonts for code from DJR & Font Bureau\n* [[Wikipedia:Liberation fonts|Liberation fonts]] ({{Pkg|ttf-liberation}}) \u2013 [[Metric-compatible fonts]] for Helvetica, Times, and Courier, but are visually different\n* [https://github.com/alerque/libertinus Libertinus Fonts] ({{Pkg|libertinus-font}}) \u2013 Forks of [[Wikipedia:Linux Libertine|Linux Libertine]] and Linux Biolinum, with extended math support, see [[#Math]]\n* [[Microsoft fonts]] ({{AUR|ttf-ms-win11}}) \u2013 Windows 11 fonts (Windows 11 installation or installation medium needed)\n* [[Wikipedia:Noto fonts|Noto fonts]] ({{Pkg|noto-fonts}}) \u2013 Google font family with full Unicode coverage if installed with its emoji and CJK optional dependencies\n\nPackages not providing a base font set:\n\n* [https://b612-font.com/ B612] ({{AUR|ttf-b612}}) \u2013 Open source font family (sans and mono) sponsored by Airbus, designed for comfort of reading on aircraft cockpit screens\n* [[Wikipedia:Ghostscript#Free_fonts|Ghostscript]] ({{Pkg|gsfonts}}) \u2013 The Ghostscript fonts donated by [[Wikipedia:URW Type Foundry|URW]], includes clones of Helvetica, Times, Courier, and others. GNU FreeFont ({{Pkg|gnu-free-fonts}}) and TeX Gyre fonts ({{Pkg|tex-gyre-fonts}}) are both partially based on the Ghostscript fonts\n* [[Wikipedia:Luxi fonts|Luxi fonts]] ({{AUR|font-bh-ttf}}) \u2013 X.Org font family similar to Lucida\n* [[Wikipedia:Roboto|Roboto]] ({{Pkg|ttf-roboto}}) \u2013 Default font for newer Android versions where it is complemented by Noto fonts for languages not supported like CJK\n* [https://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html TeX Gyre fonts] ({{Pkg|tex-gyre-fonts}}) \u2013 Created by the Polish GUST association of TeX users, mostly based on [[Wikipedia:URW Type Foundry|URW]] [[Wikipedia:Ghostscript#Free_fonts|Ghostscript]] fonts, includes clones of Helvetica, Times, Courier, and others. Some have their own math companion fonts, see [[#Math]].\n* [[Wikipedia:Ubuntu Font Family|Ubuntu font family]] ({{Pkg|ttf-ubuntu-font-family}})\n\nLegacy Microsoft font packages:\n\n* [https://corefonts.sourceforge.net/ Microsoft fonts] ({{AUR|ttf-ms-fonts}}) \u2013 Andal\u00e9 Mono, Courier New, Arial, Arial Black, Comic Sans, Impact, Lucida Sans, Microsoft Sans Serif, Trebuchet, Verdana, Georgia, Times New Roman\n* Vista fonts ({{AUR|ttf-vista-fonts}}) \u2013 Consolas, Calibri, Candara, Corbel, Cambria, Constantia\n\n==== Monospaced ====\n\nFonts supporting \"programming ligatures\" (e.g., the display of the \"->\" sequence as a double-width \"\u27f6\" glyph)  are identified below with a \u27f6 sign. For more monospaced fonts, also see [[#Bitmap]] and [[#Families]].\n\n* [https://www.marksimonson.com/fonts/view/anonymous-pro Anonymous Pro] ({{Pkg|ttf-anonymous-pro}}, included in {{AUR|ttf-google-fonts-git}})\n* [https://github.com/microsoft/cascadia-code Cascadia Code] ({{Pkg|ttf-cascadia-code}}) \u27f6 \u2013 Designed to enhance the look of the Windows Terminal, with programming ligatures, released by Microsoft under the Open Font License.\n* [https://quoteunquoteapps.com/courierprime/ Courier Prime] ({{AUR|ttf-courier-prime}}) \u2013 Courier alternative which has been supplemented by a sans serif font and a version optimized for programming, released under the Open Font License.\n* [https://damieng.com/envy-code-r Envy Code R] ({{AUR|ttf-envy-code-r}}) \u2013 Font designed for programmers\n* Fantasque Sans Mono ({{Pkg|ttf-fantasque-sans-mono}}, {{Pkg|otf-fantasque-sans-mono}})\n* [[Wikipedia:Fira_(typeface)|Fira Mono]] ({{Pkg|ttf-fira-mono}}, {{Pkg|otf-fira-mono}}) \u2013 Font optimized for small screens and adopted by Mozilla for the Firefox OS\n* [[Wikipedia:Fira_(typeface)#Fira_Code|Fira Code]] ({{Pkg|ttf-fira-code}}) \u27f6 \u2013 Extension of Fira Mono with programming ligatures for common programming multi-character combinations\n* [https://sourcefoundry.org/hack/ Hack] ({{Pkg|ttf-hack}}) - Open source monospaced font, used as the default in KDE Plasma\n* [https://github.com/i-tu/Hasklig Hasklig] ({{AUR|otf-hasklig}}) - A code font with monospaced ligatures\n* [https://pcaro.es/p/hermit/ Hermit] ({{Pkg|otf-hermit}}) - A font for programmers, by a programmer\n* [[Wikipedia:Inconsolata|Inconsolata]] ({{Pkg|ttf-inconsolata}}, included in {{AUR|ttf-google-fonts-git}}) \u2013 Designed for source code listing, inspired by Consolas and Letter Gothic\n* [https://leonardo-m.livejournal.com/77079.html Inconsolata-g] ({{AUR|ttf-inconsolata-g}}) \u2013 Adds some programmer-friendly modifications\n* [https://be5invis.github.io/Iosevka/ Iosevka] ({{Pkg|ttc-iosevka}}) \u27f6 \u2013 Slender sans-serif and slab-serif typeface inspired by Pragmata Pro, M+ and PF DIN Mono, designed to be the ideal font for programming; it supports programming ligatures and over 2000 latin, greek, cyrillic, phonetic and PowerLine glyphs\n* [https://www.jetbrains.com/lp/mono/ JetBrains Mono] ({{Pkg|ttf-jetbrains-mono}}) \u27f6 \u2013 Free and open-source font developed by JetBrains\n* [https://mishamyrt.github.io/Lilex/ Lilex] ({{AUR|ttf-lilex}}) \u27f6 \u2013 Free and open-source modern programming font containing a set of ligatures for common programming multi-character combinations\n* [[Wikipedia:Lucida Typewriter|Lucida Typewriter]] (included in package {{AUR|jre}})\n* [[Wikipedia:Menlo (typeface)|Menlo]] ({{AUR|ttf-meslo}}) \u2013 Customized version of Apple's Menlo Regular font for OS X with larger vertical gap spacing\n* [[Wikipedia:Monaco (typeface)|Monaco]] ({{AUR|ttf-monaco}}) \u2013 Proprietary font designed by Apple for OS X\n* Monofur ({{Pkg|ttf-monofur}})\n* [https://madmalik.github.io/mononoki Mononoki] ({{AUR|ttf-mononoki}}) \u2013 A font for programming and code review\n* [[Wikipedia:Roboto#Roboto_Mono|Roboto Mono]] ({{Pkg|ttf-roboto-mono}}) \u2013 Based on Roboto ({{Pkg|ttf-roboto}})\n* [[Wikipedia:Source Code Pro|Source Code Pro]] ({{Pkg|adobe-source-code-pro-fonts}}, included in {{AUR|ttf-google-fonts-git}})\n* [https://dtinth.github.io/comic-mono-font/ Comic Mono] ({{AUR|ttf-comic-mono-git}}) A legible monospace font\u2026 the very typeface you\u2019ve been trained to recognize since childhood, ergo Comic Sans\n\nRelevant websites:\n\n* [http://www.lowing.org/fonts/ Trevor Lowing's font list]\n* [https://www.slant.co/topics/67/~what-are-the-best-programming-fonts Slant: What are the best programming fonts?]\n* [https://stackoverflow.com/questions/4689/recommended-fonts-for-programming Stack Overflow: Recommended fonts for programming]\n* [https://www.programmingfonts.org Programming Fonts - Test Drive]\n* [http://s9w.io/font_compare Programming Fonts Compare]\n* [https://www.codingfont.com/ Coding Font by Typogram]\n\n==== Sans-serif ====\n\n* [http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika Andika]{{Dead link|2024|03|03|status=404}} ({{AUR|ttf-andika}})\n* [[Wikipedia:Cantarell (typeface)|Cantarell]] ({{Pkg|cantarell-fonts}}) \u2013 Default font supplied with GNOME, it is required by the GNOME and GTK 3 related packages\n* [https://typedesign.replit.app/dmcasansserif.html DMCA Sans Serif] ({{AUR|ttf-dmcasansserif}}) \u2013 General purpose sans serif font metric-compatible with Microsoft Consolas\n* [[Wikipedia:Fira (typeface)|Fira Sans]] ({{Pkg|ttf-fira-sans}}, {{Pkg|otf-fira-sans}}) \u2013 Sans serif font designed by Erik Spiekermann for Mozilla and the Firefox OS. Fira Mono and Fira Code are monospaced companions of Fira Sans (see [[#Monospaced]])\n* [[Wikipedia:FreeSans|FreeSans]] ({{Pkg|gnu-free-fonts}}) \u2013 [[Commons:File:FreeSansDemonstration.png|Visually similar]] to Helvetica but metrically different, see [[#Families]]\n* [https://github.com/rsms/inter Inter] ({{Pkg|inter-font}}) \u2013 A geometric neo-grotesque font designed for user interfaces\n* [https://indestructibletype.com/Jost.html Jost*] ({{AUR|otf-jost}}) \u2013 An open-source typeface based on [[Wikipedia:Futura (typeface)|Futura]]\n* [[Wikipedia:Liberation Sans|Liberation Sans]] ({{Pkg|ttf-liberation}}) \u2013 Metric-compatible with Helvetica but [[Commons:File:Font_Sample_-_Liberation_Sans.svg|visually distinct]], see [[#Families]]\n* [https://fonts.google.com/specimen/Montserrat Montserrat] ({{Pkg|otf-montserrat}}) \u2013 An open source font that shares similarities with [[Wikipedia:Gotham (typeface)|Gotham]] and [[Wikipedia:Proxima Nova|Proxima Nova]]\n* [https://fonts.google.com/specimen/Nunito Nunito] ({{Pkg|ttf-nunito}}) \u2013 An open source font with rounded terminal, hence shares similarities with [[Wikipedia:Gotham_(typeface)#Variations|Gotham Rounded]] and [https://fonts.adobe.com/fonts/proxima-soft Proxima Soft]\n* [[Wikipedia:Open Sans|Open Sans]] ({{Pkg|ttf-opensans}}) \u2013 Sans serif font commissioned by Google, based on Droid sans but slightly wider.\n* [[Wikipedia:PT Sans|PT Sans]] ({{AUR|ttf-google-fonts-git}}) \u2013 3 major variations: normal, narrow, and caption - Unicode: Latin, Cyrillic\n* [[Wikipedia:Source Sans|Source Sans]] ({{Pkg|adobe-source-sans-fonts}}) \u2013 Open source sans serif font from Adobe with a design based on News Gothic and Franklin Gothic\n* [https://www.winehq.org/announce/0.9.47 Tahoma (Wine Replacement)] ({{AUR|ttf-tahoma}}) \u2013 Open source substitute for [[Wikipedia:Tahoma (typeface)|Tahoma]] developed by the [[Wine]] project. It was created because many Windows applications expected Tahoma to be available\n\n==== Serif ====\n\n* [[Wikipedia:Bitstream Charter|Bitstream Charter]] ({{AUR|ttf-bitstream-charter}}, {{AUR|otf-bitstream-charter}}) \u2013 Originally a commercial font designed by [[Wikipedia:Matthew Carter|Matthew Carter]]. A version was released under a free license and later [https://practicaltypography.com/charter.html converted] to modern formats (provided as the aforementioned packages).\n* [https://indestructibletype.com/Bodoni.html Bodoni*] ({{AUR|otf-bodoni}}) \u2013 An open-source [[Wikipedia:Bodoni|Bodoni]] revival\n* [https://github.com/skosch/Crimson Crimson] ({{Pkg|otf-crimson}}) \u2013 An open-source font that shares similarities with [[Wikipedia:Minion_(typeface)|Minion]]\n* [[Wikipedia:EB_Garamond|EB Garamond]] ({{AUR|ebgaramond-otf}}) \u2013 An open-source [[Wikipedia:Garamond|Garamond]] revival, the aforementioned package is the version developed by [https://github.com/octaviopardo/EBGaramond12 Octavio Pardo]\n* [[Wikipedia:FreeSerif|FreeSerif]] ({{Pkg|gnu-free-fonts}}) \u2013 [[Commons:File:FreeSerifDemonstration.png|Visually similar]] to Times New Roman but [https://askubuntu.com/questions/346552/closest-alternative-to-times-new-roman/1148247#1148247 metrically different], see [[#Families]]\n* [[Wikipedia:Gentium|Gentium]] ({{Pkg|ttf-gentium-plus}}) \u2013 Unicode, comprehensive support for Latin, Greek, Cyrillic, International Phonetic Alphabet (IPA) characters\n* [[Wikipedia:Utopia_(typeface)#Derived_typefaces|Heuristica]] ({{AUR|ttf-heuristica}}) \u2013 Based on a version of [[Wikipedia:Utopia_(typeface)|Utopia]] that was released under a free license\n* [[Wikipedia:Liberation Serif|Liberation Serif]] ({{Pkg|ttf-liberation}}) \u2013 Metric-compatible with Times New Roman but [[Wikipedia:File:Times New Roman Liberation Serif comparison.png|visually distinct]], see [[#Families]]\n* [https://fonts.google.com/specimen/Libre+Baskerville Libre Baskerville] ({{AUR|ttf-librebaskerville}}) \u2013 An open-source [[Wikipedia:Baskerville|Baskerville]] revival designed by Impallari Type\n* [https://fonts.google.com/specimen/Libre+Caslon+Text Libre Caslon] ({{AUR|otf-libre-caslon}}) \u2013 An open-source [[Wikipedia:Caslon|Caslon]] revival designed by Impallari Type\n* [[Wikipedia:Linux Libertine|Linux Libertine]] ({{Pkg|ttf-linux-libertine}}) \u2013 Developed as a substitute of Times New Roman, but different both visually and metrically (the metric differences are more notable for italic and bold fonts). Its fork [[Wikipedia:Linux_Libertine#Derivative_works|Libertinus Fonts]] ({{Pkg|libertinus-font}}) is the version that is under active development\n* [https://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html TeX Gyre Termes] ({{Pkg|tex-gyre-fonts}}) \u2013 Visually similar to Times New Roman (but there are some minor metric differences), see [[#Families]]\n* [[Wikipedia:Croscore_fonts|Tinos]] ({{Pkg|ttf-croscore}}) \u2013 Metric-compatible with Times New Roman but visually distinct (and looks similar to Liberation Serif), see [[#Families]]\n\n==== Handwriting ====\n\n* {{AUR|ttf-nothingyoucoulddo}} \u2013 Handwriting of a photographer\n* {{AUR|ttf-indieflower}} \u2013 Handwriting sans-serif font with bubbly and rounded edges\n* {{AUR|ttf-pacifico}} \u2013 Brush script handwriting font which was inspired by the 1950s American surf culture and expanded to Cyrillic\n* {{AUR|otf-londrina}} \u2013 Handwriting font inspired from the streets of Sao Paulo, Brazil\n* {{AUR|otf-tesla}} \u2013 Script font based on a reconstruction of Nikola Tesla's handwriting\n* {{AUR|ttf-architects-daughter}} \u2013 Font incorporating the graphic, squared look of architectural writing and the natural feel of daily handwriting\n\n==== Unsorted ====\n\n{{Style|This section should be absorbed into the Monospace/Serif/Sans-Serif structure}}\n\n* {{AUR|ttf-cheapskate}} \u2013 Font collection from ''dustismo.com''\n* {{Pkg|ttf-junicode}} \u2013 Junius font containing almost complete medieval latin script glyphs\n* {{AUR|ttf-mph-2b-damase}} \u2013 Covers full plane 1 and several scripts\n* {{Pkg|xorg-fonts-type1}} \u2013 IBM Courier and Adobe Utopia sets of [[Wikipedia:PostScript fonts|PostScript fonts]]\n* {{AUR|all-repository-fonts}} \u2013 Meta package for all fonts in the official repositories.\n* {{AUR|ttf-google-fonts-git}} \u2013 A huge collection of free fonts (including Ubuntu, Inconsolata, Roboto, etc.) - Note: Your font dialog might get very long as >100 fonts will be added.\n\n=== Non-latin scripts ===\n\n==== Ancient Scripts ====\n\n* {{AUR|ttf-ancient-fonts}} \u2013 Font containing Unicode symbols for Aegean, Egyptian, Cuneiform, Anatolian, Maya, and Analecta scripts\n\n==== Arabic ====\nSee [[Localization/Arabic#Fonts]].\n\n==== Bengali ====\n\nRead [[Localization/Bengali#Fonts]] for details.\n\n==== Braille ====\n\n* {{AUR|ttf-ubraille}} \u2013 Font containing Unicode symbols for ''braille''\n\n==== Chinese, Japanese, Korean, Vietnamese ====\n\n===== Pan-CJK =====\n\nAdobe Source Han fonts and Noto CJK fonts have [https://github.com/adobe-fonts/source-han-sans/issues/122 identical glyphs and metrics], but with different branding since the project was commissioned by both Adobe and Google.\n\nBoth collections comprehensively support Simplified Chinese, Traditional Chinese, Japanese, and Korean, with a consistent design and look. Noto Sans CJK fonts lack localized menu names, that are not required, but may make fonts more user-friendly for customers whose native language is that of the target language of the font.\n\n* Adobe Source Han fonts\n** [[Wikipedia:Source_Han_Sans|Source Han Sans]] ({{Pkg|adobe-source-han-sans-otc-fonts}})\n** [[Wikipedia:Source_Han_Serif|Source Han Serif]] ({{Pkg|adobe-source-han-serif-otc-fonts}})\n* [[Wikipedia:Noto_fonts#CJK|Noto CJK fonts]] ({{Pkg|noto-fonts-cjk}}) \u2013 Includes both Noto Sans CJK and Noto Serif CJK\n\n===== Chinese =====\n\nSee [[Localization/Chinese#Fonts]].\n\n===== Japanese =====\n\nSee [[Localization/Japanese#Fonts]].\n\n===== Korean =====\n\nSee [[Localization/Korean#Fonts]].\n\n===== Vietnamese =====\n\n* {{Pkg|ttf-hannom}} \u2013 Vietnamese TrueType font for ch\u1eef N\u00f4m characters\n\n==== Cyrillic ====\n\nSee also [[#Latin script]].\n\n* {{AUR|ttf-paratype}} \u2013 Font family by ParaType: sans, serif, mono, extended cyrillic and latin, OFL license\n* {{AUR|otf-russkopis}} \u2013 A free OpenType cursive font for Cyrillic script\n\n==== Greek ====\n\nAlmost all Unicode fonts contain the Greek character set (polytonic included). Some additional font packages, which might not contain the complete Unicode set but utilize high quality Greek (and Latin, of course) typefaces are:\n\n* {{AUR|otf-gfs}} \u2013 Selection of OpenType fonts from the Greek Font Society\n* {{AUR|ttf-mgopen}} \u2013 Professional TrueType fonts from Magenta\n* {{AUR|ttf-sbl-greek}} \u2013 SBL Greek, created by the Society of Biblical Literature (SBL)\n* {{AUR|ttf-sbl-biblit}} \u2013 SBL BibLit, includes characters from both SBL Greek and SBL Hebrew\n\n==== Hebrew ====\n\n* {{AUR|opensiddur-hebrew-fonts}} \u2013 Large collection of Open-source licensed Hebrew fonts. There are also few Latin, Greek, Cyrillic, Arabic, and Amharic.\n* {{AUR|culmus}} \u2013 Nice collection of free Hebrew fonts.\n* {{AUR|alefbet}} \u2013 2 Hebrew fonts (at the moment): the commonly used \"David Libre\", and the handwriting font \"Gveret Levin\".\n* {{AUR|ttf-ms-fonts}} \u2013 contains Arial and other fonts.\n* {{AUR|ttf-sbl-hebrew}} \u2013 SBL Hebrew, created by the Society of Biblical Literature (SBL)\n* {{AUR|ttf-sbl-biblit}} \u2013 SBL BibLit, includes characters from both SBL Hebrew and SBL Greek\n\n===== Monospaced =====\n\n* '''Cousine''' ({{pkg|ttf-croscore}}) \u2013 part of the [[Wikipedia:Croscore fonts|Chrome OS Core Fonts]]\n* [https://www.evertype.com/emono/ Everson Mono] ({{AUR|ttf-everson-mono}}) \u2013 is lighter and a bit looser than Courier, with wide range of supported Unicode blocks\n* '''FreeMono''' ({{pkg|gnu-free-fonts}}) \u2013 part of the [[Wikipedia:GNU FreeFont|GNU FreeFont]]\n\n==== Indic ====\n\nSee [[Localization/Indic#Fonts]].\n\n==== Khmer ====\n\n* {{Pkg|ttf-khmer}} \u2013 Font covering glyphs for Khmer language\n* [https://www.google.com/fonts/specimen/Hanuman Hanuman] ({{AUR|ttf-google-fonts-git}})\n\n==== Mongolic and Tungusic ====\n\n* {{AUR|ttf-abkai}} \u2013 Fonts for Sibe, Manchu and Daur scripts (incomplete, currently in development)\n\n==== Persian ====\n\n* {{AUR|persian-fonts}} \u2013 Meta package for installing all Persian fonts in AUR.\n* {{AUR|borna-fonts}} \u2013 Borna Rayaneh Co. Persian B font series.\n* {{AUR|iran-nastaliq-fonts}} \u2013 A free Unicode calligraphic Persian font.\n* {{AUR|iranian-fonts}} \u2013 Iranian-Sans and Iranian-Serif Persian font family.\n* {{AUR|ir-standard-fonts}} \u2013 Iran Supreme Council of Information and Communication Technology (SCICT) standard Persian fonts.\n* {{AUR|persian-hm-ftx-fonts}} \u2013 A Persian font series derived from X Series 2, Metafont and FarsiTeX fonts with Kashida feature.\n* {{AUR|persian-hm-xs2-fonts}} \u2013 A Persian font series derived from X Series 2 fonts with Kashida feature.\n* {{AUR|gandom-fonts}}, {{AUR|parastoo-fonts}}, {{AUR|sahel-fonts}}, {{AUR|samim-fonts}}, {{AUR|shabnam-fonts}}, {{AUR|tanha-fonts}}, {{AUR|vazirmatn-fonts}}, {{AUR|vazir-code-fonts}} \u2013 Beautiful Persian fonts made by Saber RastiKerdar.\n* {{AUR|ttf-yas}} \u2013 The Yas Persian font series (with '''hollow zero''').\n* {{AUR|ttf-x2}} \u2013 Free fonts with support for Persian, Arabic, Urdu, Pashto, Dari, Uzbek, Kurdish, Uighur, old Turkish (Ottoman) and modern Turkish (Roman).\n\n==== Tai\u2013Kadai ====\n\n* {{AUR|fonts-tlwg}} \u2013 Collection of scalable Thai fonts\n* {{AUR|ttf-google-thai}} \u2013 High-quality Thai fonts from Google and new [https://cadsondemak.github.io/ improvement] for Thai National Fonts\n* {{AUR|ttf-lao}} \u2013 Lao TTF font (Phetsarath_OT)\n\n==== Tibeto-Burman ====\n\n* {{Pkg|ttf-tibetan-machine}} \u2013 Tibetan Machine TTFont\n* {{AUR|ttf-sil-padauk}} \u2013 Unicode font that supports the many diverse languages that use the Myanmar script\n\n=== Emoji and symbols ===\n\nA section of the Unicode standard is designated for pictographic characters called \"emoji\".\n\n[[Wikipedia:Emoji|Emoji]] fonts come in different formats: CBDT/CBLC (Google), SBIX (Apple), COLR/CPAL (Microsoft), SVG (Mozilla/Adobe).\n\nEmojis should work out of the box once you have at least one emoji font installed of a supported format. However, some of the emoji fonts encode their glyphs as large fixed-size bitmaps and thus, for the purpose of displaying at the intended size, rely on [[Font configuration#Disable scaling of bitmap fonts|bitmap font downscaling]], which is enabled by default.\n\nEmoji font fallback according to [[Wikipedia:Emoji#Emoji versus text presentation|the standard]] requires [https://github.com/google/emoji-segmenter extra code to handle emoji].\n\nFor the discovery and input of Emoji see [[List of applications/Utilities#Text input]].\n\n{| class=\"wikitable\"\n|-\n! Software !! CBDT/CBLC !! SBIX !! COLR/CPAL !! SVG !! Emoji font fallback\n|-\n! [[Wikipedia:Freetype|Freetype]]\n| {{Yes}} || {{Yes}} || {{Yes}} || {{No|https://savannah.nongnu.org/bugs/?46141}} || {{-}}\n|-\n! [[Wikipedia:Pango|Pango]]\n| colspan=4 {{C|Freetype}} || {{Yes|https://gitlab.gnome.org/GNOME/pango/-/issues/298}}\n|-\n! [[List of applications/Internet#WebKit-based|WebKitGTK]]\n| colspan=4 {{C|Freetype}} || {{Yes|https://trac.webkit.org/changeset/239822/webkit}}\n|-\n! [[Qt]]\n| colspan=4 {{C|Freetype}} || {{No}} [https://bugreports.qt.io/browse/QTBUG-71568] [https://bugreports.qt.io/browse/QTBUG-85014] [https://bugreports.qt.io/browse/QTBUG-85744]\n|-\n! [[Chromium]]\n| colspan=4 {{C|Freetype}} || {{Yes|https://chromium.googlesource.com/chromium/src.git/+/671511b00e2d6c374a3079c1c379d2d0dfad32fe}}\n|-\n! [[Firefox]]\n| colspan=3 {{C|Freetype}} || {{Yes}} || {{No|1=https://bugzilla.mozilla.org/show_bug.cgi?id=1509988}}, see [[Firefox#Font troubleshooting]] for workaround.\n|}\n\n{{Note|Qt can only use first 255 fonts at a time [https://bugreports.qt.io/browse/QTBUG-80434]. Make sure you have an emoji font in your list of [[Font configuration#Set default or fallback fonts|preferred fallback fonts]].}}\n\nCBDT/CBLC:\n\n* {{Pkg|noto-fonts-emoji}} \u2013 Google's open-source Emoji 15.1.\n* {{Pkg|ttf-joypixels}} \u2013 EmojiOne creator's proprietary Emoji 15.0.\n* {{AUR|ttf-twemoji}} \u2013 Twitter's open-source Emoji 15.0.\n\nSVG:\n\n* {{AUR|otf-openmoji}} \u2013 German University of Design in Schw\u00e4bisch Gm\u00fcnd open-source Emoji 15.0.\n* {{AUR|ttf-twemoji-color}} \u2013 Twitter's open-source Emoji 14.0.\n\nOutline only:\n\n* {{AUR|ttf-symbola}} \u2013 provides many Unicode symbols, including emoji.\n\n[[wikipedia:Emoticon#Japanese_style|Kaomoji]] are sometimes referred to as \"Japanese emoticons\" and are composed of characters from various character sets, including CJK and Indic fonts. For example, the following set of packages covers most of existing kaomoji: {{Pkg|gnu-free-fonts}}, {{Pkg|ttf-arphic-uming}}, and {{Pkg|ttf-indic-otf}}.\n\n=== Math ===\n\n* [[wikipedia:Computer Modern|Computer Modern]] ({{AUR|ttf-cm-unicode}}, {{AUR|otf-cm-unicode}})\n* Computer Modern ({{Pkg|otf-latin-modern}}, {{Pkg|otf-latinmodern-math}}) \u2013 Improved version used in LaTeX\n* [[wikipedia:Linux_Libertine#Derivative_works|Libertinus Math]] ({{Pkg|libertinus-font}}) \u2013 A math font based on Libertinus Serif which is a fork of [[Wikipedia:Linux Libertine|Linux Libertine]] ({{Pkg|ttf-linux-libertine}})\n* [[Wikipedia:STIX Fonts project|STIX fonts]] ({{AUR|otf-stix}}) \u2013 STIX is designed to be a royalty-free alternative that resembles Times New Roman. The current version is called STIX Two and includes a math companion named STIX Two Math.\n* [https://www.gust.org.pl/projects/e-foundry/tg-math TeX Gyre math fonts] ({{AUR|tex-gyre-math-fonts}}) \u2013 Math companions of TeX Gyre fonts (see [[#Families]]). Notably, TeX Gyre Termes Math is a math companion of Times New Roman.\n\nAdditionally, {{Pkg|texlive-basic}} and {{Pkg|texlive-fontsextra}} contain many math fonts such as Latin Modern Math and STIX fonts. See [[TeX Live#Making fonts available to Fontconfig]] for configuration.\n\n=== Other operating system fonts ===\n\n* {{AUR|ttf-mac-fonts}} - Apple MacOS TrueType fonts\n\n== Fallback font order ==\n\nFontconfig automatically chooses a font that matches the current requirement. That is to say, if one is looking at a window containing English and Chinese for example, it will switch to another font for the Chinese text if the default one does not support it.\n\nFontconfig lets every user configure the order they want via {{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}}.\nIf you want a particular Chinese font to be selected after your favorite Serif font, your file would look like this:\n\n <?xml version=\"1.0\"?>\n <!DOCTYPE fontconfig SYSTEM \"fonts.dtd\">\n <fontconfig>\n <alias>\n    <family>serif</family>\n    <prefer>\n      <family>Your favorite Latin Serif font name</family>\n      <family>Your Chinese font name</family>\n    </prefer>\n  </alias>\n </fontconfig>\n\n{{Tip|\n* If you use a Chinese locale, set {{ic|LC_LANG}} to {{ic|und}} to make this work. Otherwise both English and Chinese text will be rendered in the Chinese font.\n* After changing the configuration run {{ic|fc-match -a monospace {{!}} head}} to verify your fallback font is set correctly.\n}}\n\nYou can add a section for sans-serif and monospace as well. For more information, have a look at the fontconfig manual.\n\nSee also [[Font configuration#Set default or fallback fonts]].\n\n== Font alias ==\n\nThere are several font aliases which represent other fonts in order that applications may use similar fonts. The most common aliases are: {{ic|serif}} for a font of the serif type (e.g. DejaVu Serif); {{ic|sans-serif}} for a font of the sans-serif type (e.g. DejaVu Sans); and {{ic|monospace}} for a monospaced font (e.g. DejaVu Sans Mono). However, the fonts which these aliases represent may vary and the relationship is often not shown in font management tools, such as those found in [[KDE]] and other [[desktop environments]].\n\nTo reverse an alias and find which font it is representing, run:\n\n{{hc|$ fc-match monospace|\nDejaVuSansMono.ttf: \"DejaVu Sans Mono\" \"Book\"\n}}\n\nIn this case, {{ic|DejaVuSansMono.ttf}} is the font represented by the monospace alias.\n\n== Tips and tricks ==\n\n=== List all installed fonts ===\n\nYou can use the following command to list all installed Fontconfig fonts that are available on your system.\n\n $ fc-list\n\n=== List installed fonts for a particular language ===\n\nApplications and browsers select and display fonts depending upon fontconfig preferences and available font glyph for Unicode text. To list installed fonts for a particular language, issue a command {{ic|1=fc-list :lang=\"''two letter language code''\"}}. For instance, to list installed Arabic fonts or fonts supporting Arabic glyph:\n\n{{hc|1=$ fc-list -f '%{file}\\n' :lang=ar|2=\n/usr/share/fonts/TTF/FreeMono.ttf\n/usr/share/fonts/TTF/DejaVuSansCondensed.ttf\n/usr/share/fonts/truetype/custom/DroidKufi-Bold.ttf\n/usr/share/fonts/TTF/DejaVuSansMono.ttf\n/usr/share/fonts/TTF/FreeSerif.ttf\n}}\n\n=== List installed fonts for a particular Unicode character ===\n\n{{Expansion|When is {{ic|fc-list}} a better alternative?|section=List font containing a specific glyph?}}\n\nTo search for monospace fonts supporting a particular Unicode codepoint:\n\n $ fc-match -s monospace:charset=1F4A9\n\n=== Application-specific font cache ===\n\nMatplotlib ({{Pkg|python-matplotlib}}) uses its own font cache, so after updating fonts, be sure to remove {{ic|~/.matplotlib/fontList.cache}}, {{ic|~/.cache/matplotlib/fontList.cache}}, {{ic|~/.sage/matplotlib-1.2.1/fontList.cache}}, etc. so it will regenerate its cache and find the new fonts [https://discourse.matplotlib.org/t/getting-matplotlib-to-recognize-a-new-font/17754].\n\n=== Bidirectional text support ===\n\nSee [[Bidirectional text]] for troubleshooting problems related to RTL languages.\n\n=== Braille font not displaying correctly inside terminals ===\n\nIf braille characters in terminals exhibit [https://www.reddit.com/r/archlinux/comments/gf2vgb/the_braille_fonts_dont_show_properly_anywhere/ rendering issues], try [[install|installing]] a braille font and uninstalling {{Pkg|gnu-free-fonts}}.\n\n=== Application-specific font configuration tips ===\n\n==== Emacs ====\n\nEmacs calculates sizes differently than standard Linux desktop applications, and Emacs packages do not all use the same config format, so if points or raw pixel size doesn't work, try using the other value.\n\n==== Visual Studio Code ====\n\nChange the setting '''Editor: Experimental Whitespace Rendering''' from \"svg\" to \"font\" if your monospace fonts have problems scaling certain characters correctly.  This is known to help with \"Terminus (TTF)\" and \"IBM 3270\" fonts.\n\n== See also ==\n\n* [http://behdad.org/text/ State of Text Rendering]\n* [https://fontlibrary.org/en Font Library] \u2014 Fonts under free licenses"
                    }
                ]
            },
            "2335": {
                "pageid": 2335,
                "ns": 0,
                "title": "Enlightenment",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Desktop environments]]\n[[de:Enlightenment]]\n[[es:Enlightenment]]\n[[ja:Enlightenment]]\n[[zh-hans:Enlightenment]]\n{{Related articles start}}\n{{Related|Desktop environment}}\n{{Related|Display manager}}\n{{Related|Window manager}}\n{{Related articles end}}\n\n== Enlightenment ==\n\nThis comprises both the [https://www.enlightenment.org/ Enlightenment] [[window manager]] and Enlightenment Foundation Libraries (EFL), which provide additional desktop environment features such as a toolkit, object canvas, and abstracted objects. It has been under development since 2005, but in February 2011 the core EFLs saw their first stable 1.0 release.\n\n=== Installation ===\n\n[[Install]] the {{Pkg|enlightenment}} package.\n\nYou might also want to install some EFL-based applications that integrates well with Enlightenment:\n\n* {{Pkg|ecrire}} \u2013 Ecrire text editor\n* {{Pkg|ephoto}} \u2013 [https://smhouston.us/ephoto/ Ephoto] picture viewer\n* {{Pkg|evisum}} \u2013 Evisum task manager\n* {{Pkg|rage}} \u2013 Rage video player\n* {{Pkg|terminology}} \u2013 Terminology terminal emulator.\n\nDevelopment PKGBUILDs which download and install the very latest development code are available as {{AUR|enlightenment-git}} and its dependencies.\n\n{{Warning|Some of the following PKGBUILDs use unstable development code. Use them at your own risk.}}\n\nThe following are EFL-based applications, most in an early stage of development and not yet released:\n\n* {{AUR|econnman}} \u2013 An EFL based user interface for [[ConnMan]] network manager\n* {{AUR|edi}} \u2013 An EFL based IDE\n* {{AUR|enjoy-git}} \u2013 Enjoy music player\n* {{AUR|eperiodique}} \u2013 [http://eperiodique.sourceforge.net/ Eperiodique] periodic table viewer\n* {{AUR|epour}} \u2013 Torrent client based on EFL\n* {{AUR|epymc-git}} \u2013 E Python Media Center\n* {{AUR|eruler-git}} \u2013 Eruler on-screen ruler and measurement tools\n\n=== Starting Enlightenment ===\n\nSimply choose ''Enlightenment'' session from your favourite [[display manager]] or configure [[xinitrc]] to start it from the console.\n\n==== Entrance ====\n\n{{Warning|Entrance is highly experimental, and does not have proper systemd support. Use it at your own risk.}}\n\nEnlightenment has a new display manager called Entrance, which is provided by the {{AUR|entrance-git}} package. Entrance is quite sophisticated and its configuration is controlled by {{ic|/etc/entrance/entrance.conf}}. It can be used by enabling {{ic|entrance.service}} [[systemd#Using units|using systemd]].\n\n==== Manually ====\n\nIf you prefer to start Enlightenment manually, enter {{ic|startx /usr/bin/enlightenment_start}} in the console. See [[xinitrc]] for details.\n\nTo try the [[Wayland]] compositor, enter {{ic|enlightenment_start}} instead.\n\n{{Note|If you use a software rasterizer OpenGL driver under Wayland, specify the {{ic|<nowiki>EVAS_GL_NO_BLACKLIST=1</nowiki>}} [[environment variable]], otherwise Enlightenment refuses to start.[https://git.enlightenment.org/enlightenment/efl/src/commit/81cba676d77be3508aab01866c7590211b21d23a/src/modules/evas/engines/gl_drm/evas_outbuf.c#L338-L355]}}\n\n=== Configuration ===\n\nEnlightenment has a sophisticated configuration system that can be accessed from the Main menu's Settings submenu.\n\n==== Network ====\n\n'''ConnMan'''\n\nEnlightenment's preferred network manager is [[ConnMan]] which can be installed from the {{Pkg|connman}} package. Follow the instructions on [[ConnMan]] to do the configuration.\n\nFor extended configuration, you may also install Econnman (available in AUR as {{AUR|econnman}} or {{AUR|econnman-git}}) and its associated dependencies. This is not required for general functionality though.\n\n'''Adding the ConnMan Gadget to the Shelf'''\n\n# Settings -> Extensions -> Modules\n# under System\n# Connection Manager\n# Load that (select then hit ''Load'').\n# Right-click on the shelf at the bottom of the screen.\n# Go to Shelf -> Contents\n# Then, just scroll around and find ''ConnMan''.\n# and hit ''Add''.\n\n'''NetworkManager'''\n\nYou can also use {{Pkg|networkmanager}} to manage your network connections - see [[NetworkManager]] for more information.\n\nNote however that the applet will need Appindicator support to show in Enlightenment's [[#System tray|system tray]]. See [[NetworkManager#Appindicator]]. As an alternative to using the applet, NetworkManager includes both CLI and TUI interfaces for network configuration - see [[NetworkManager#Usage]].\n\n==== Polkit agent ====\n\nEnlightenment version DR 0.24.0 ships with a built-in polkit agent, and no extra polkit package is required to authenticate for privileged actions. Earlier versions of Enlightenment do not ship with a [[Polkit#Authentication agents|graphical polkit authentication agent]]. If you want to access privileged actions (e.g. mount a filesystem on a system device), you have to install one and autostart it. For that you should go to ''Settings Panel > Apps > Startup Applications > System'' and activate it. There is an EFL based authentication agent available: {{AUR|polkit-efl-git}}.\n\n==== GNOME Keyring integration ====\n\nIt is possible to use gnome-keyring in Enlightenment. However, at the time of writing, you need a small hack to make it work in full.\nFirst, you must tell Enlightenment to autostart gnome-keyring. For that you should go to ''Settings Panel > Apps > Startup Applications > System'' and activate ''Certificate and Key Storage'', ''GPG Password Agent'', ''SSH Key Agent'' and \"Secret Storage Service\".\nAfter this, you should [[Environment variables#Per user|set]] the following:\n\n{{bc|1=\nSSH_AUTH_SOCK=/run/user/${UID}/keyring/ssh\n}}\n\nThis \"hack\" is used to override the automatic setting of the variable by \"enlightenment-start\" from \"ssh-agent\" to gnome-keyring. \n\nMore information on this topic in the [[GNOME Keyring]] article.\n\n==== System tray ====\n\n{{Note|Since Enlightenment 20, Xembed support has been removed [https://twitter.com/_enlightenment_/status/538000507315314688] meaning that many 'legacy' applets can no longer be displayed in the Systray. To use these applets, you will need to use a standalone system tray application such as {{Pkg|stalonetray}} instead.}}\n\nEnlightenment has support for a system tray but it is disabled by default. To enable the system tray, open the Enlightenment main menu, navigate to the ''Settings'' submenu and click on the ''Modules'' option. Scroll down until you see the ''Systray'' option. Highlight that option and click the ''Load'' button. Now that the module has been loaded, it can be added to the shelf. Right click on the shelf you wish to add the Systray to, hightlight the ''Shelf'' submenu and click on the ''Contents'' option. Scroll down until you see ''Systray''. Highlight that option and click the ''Add'' button.\n\n==== Notifications ====\n\nEnlightenment provides a notification server through its Notification extension.\n* Notifications may be displayed in any corner of the \"screen\" as defined below\n* Available screen policies are Primary Screen, Current Screen, All Screens, and Xinerama\n* Notifications may be filtered based on urgency (Low, Normal, or Critical in any combination)\n* A default notification timeout may be set and optionally enforced for all notifications\n* The notification server may also optionally ignore replace ID requests\n\n=== Themes ===\n\nMore themes to customize the look of Enlightenment are available from:\n* [https://www.enlightenment-themes.org/ enlightenment-themes.org]\n* [https://relighted.c0n.de/#100 relighted.c0n.de] for the default theme in 200 different colors\n* [https://git.enlightenment.org git.enlightenment.org] (git clone the theme you like, run 'make' and you end up with a .edj theme file)\n* [http://packages.bodhilinux.com/bodhi/pool/b6main/b/ packages.bodhilinux.com] has a good collection (you will need to extract the .edj file from the .deb; bsdtar will do this and is part of the base Arch Linux install). A nice catalog can be seen at [https://web.archive.org/web/20140120083020/http://art.bodhilinux.com/doku.php?id=bodhi_e17_themes_v3 their wiki].\n* [https://web.archive.org/web/20161025233126/https://exchange.enlightenment.org/theme exchange.enlightenment.org] (archived)\n\nYou can install the themes (coming in .edj format) using the theme configuration dialog or by moving them to {{ic|~/.e/e/themes}}. \n\n{{Note|Enlightenment does not provide a stable theme API, and there have been numerous theme API changes over the years, even after E17 was released. Themes that have not been updated regularly are unlikely to work.}}\n\n{{Tip|1=To make GTK and Qt applications match the default theme of Enlightenment you can download a theme like the [https://www.gnome-look.org/p/1013662 E17 GTK theme]. Place it in {{ic|~/.themes/}} or install the {{AUR|gtk-theme-e17gtk-git}} package and select application themes from Enlightenments settings, and set it to that, this will make all GTK2 and GTK3 applications match the default Enlightenment theme, you can then configure Qt applications (or configure Qt's default settings) to use the GTK theme so it will mimic the theme your GTK applications are using, this way you can make sure most applications will blend in perfectly with your default enlightenment theme. See also [[Uniform look for Qt and GTK applications]].}}\n\n==== GTK ====\n\nTo alter the GTK theme, go to ''Settings > All > Look > Application Theme''.\n\n=== Modules and Gadgets ===\n\n;Module:Name used in enlightenment to refer to the \"backing\" code for a gadget.  \n;Gadget:Front-end or user interface that should help the end users of Enlightenment do something.\n\nMany Modules provide Gadgets that can be added to your desktop or on a shelf. Some Modules (such as CPUFreq) only provide a single Gadget while others (such as Composite) provide additional features without any gadgets.  Note that certain gadgets such as Systray can only be added to a shelf while others such as Moon can only be loaded on the desktop. \n\n==== \"Extra\" modules ====\n\n{{Warning|These are 3rd party modules and not officially supported by the Enlightenment developers. They are also pulled directly from git, so they are development code that may or may not work at any time. Use at your own risk.}}\nBeyond the modules described here, more \"extra\" modules are available from {{AUR|e-modules-extra-git}}.\n\n'''Scale Windows'''\n\nThe ''Scale Windows'' module, which requires compositing to be enabled, adds several features. The scale windows effect shrinks all open windows and brings them all into view. This is known in \"Mission Control\" in macOS. The scale pager effect zooms out and shows all desktops as a wall, like the compiz expo plugin. Both can be added to the desktop as a gadget or bound to a key binding, mouse binding or screen edge binding.  \n\nSome people like to change the standard window selection key binding {{ic|ALT + Tab}} to use Scale Windows to select windows.  To change this setting, you navigate to ''Menu > Settings > Settings Panel > Input > Keys''.  From here, you can set any key binding you would like.  \n\nTo replace the window selection key binding functionality with Scale Windows, scroll through the left panel until you find the ''ALT'' section and then find and select {{ic|ALT + Tab}}.  Then, scroll through the right panel looking for the \"Scale Windows\" section and choose either ''Select Next'' or ''Select Next (All)'' depending on whether you would like to see windows from only the current desktop or from all desktops and click ''Apply'' to save the binding.\n\nAvailable from [https://git.enlightenment.org/enlightenment/enlightenment-module-comp-scale upstream git].\n\n=== Default Keybindings ===\n\n{| class=\"wikitable\"\n! Key !! Effect\n|-\n| {{ic|Shift+F10}}\n| Maximize vertically\n|-\n| {{ic|Ctrl+Menu}}\n| Show \"Clients\" (windows) Menu\n|-\n| {{ic|Alt+Esc}}\n| Show \"Everything Launcher\" (apps, windows, etc) \n|-\n| {{ic|Super+Left}}\n| Maximize left\n|-\n| {{ic|Super+Right}}\n| Maximize right\n|-\n| {{ic|Alt+Shift+F10}}\n| Maximize horizontally\n|-\n| {{ic|Alt+Shift+Left}}\n| Flip to the desktop on the left\n|-\n| {{ic|Alt+Shift+Right}}\n| Flip to the desktop on the right\n|-\n| {{ic|Ctrl+Alt+d}}\n| Show the desktop\n|-\n| {{ic|Ctrl+Alt+f}}\n| Toggle fullscreen\n|-\n| {{ic|Ctrl+Alt+i}}\n| Toggle iconic mode\n|-\n| {{ic|Ctrl+Alt+k}}\n| Kill window\n|-\n| {{ic|Ctrl+Alt+l}}\n| Invoke the screensaver\n|-\n| {{ic|Ctrl+Alt+n}}\n| Maximize Window                                 \n|-\n| {{ic|Ctrl+Alt+r}}\n| Toggle shade up\n|-\n| {{ic|Ctrl+Alt+w}}\n| Window menu\n|-\n| {{ic|Ctrl+Alt+x}}\n| Close a window\n|-\n| {{ic|Ctrl+Alt+Down}}\n| Lower\n|-\n| {{ic|Ctrl+Alt+Up}}\n| Raise\n|-\n| {{ic|Ctrl+Alt+Left}}\n| Flip to desktop on left\n|-\n| {{ic|Ctrl+Alt+Right}}\n| Flip to desktop on right\n|-\n| {{ic|Ctrl+Alt+Del}}\n| Show \"End session\" dialog\n|-\n| {{ic|Ctrl+Alt+Ins}}\n| Launch the default terminal\n|}\n\n=== Troubleshooting ===\n\nIf you find some unexpected behavior, there are a few things you can do:\n# try to see if the same behavior exists with the default theme\n# disable any 3rd party modules you may have installed\n# backup {{ic|~/.e}} and remove it (e.g. {{ic|mv ~/.e ~/.e.back}})\n\nIf you are sure you found a bug open an issue for the relevant component at https://git.enlightenment.org/. \n\n==== Compositing ====\n\nWhen the configuration needs to be reset and the settings windows can no longer be approached, configuration for the compositor can be reset using the hardcoded keybinding {{ic|Ctrl + Alt + Shift + Home}}.\n\n==== Unreadable fonts ====\n\nIf fonts are too small and your screen is unreadable, be sure the right font packages are installed. {{Pkg|ttf-dejavu}} and {{Pkg|ttf-bitstream-vera}} are valid candidates.\n\nYou also should consider just increasing the scaling size under the Scaling. You can set scaling under ''Settings > Settings Panel > Look > Scaling''.\n\n==== Backlight always dimmed ====\n\nYou may find that Enlightenment routinely dims the backlight to 0% on logout and will only restore it to 100% when you log into another Enlightenment session. Enlightenment assumes that whatever comes after it will set the backlight to whatever it prefers, if anything as this is what Enlightenment does at start. This is especially problematic when using another desktop environment alongside Enlightenment that cannot control backlight as the backlight will not automatically be restored to its normal level when using that desktop environment. To fix this issue, open the Enlightenment ''Settings Panel'' and, under the ''Look'' tab, click on the ''Composite'' option. Tick the ''Don't fade backlight'' box and click ''OK''.\n\n==== Inconsistent cursor theme ====\n\nYou may find that the cursor theme for the desktop is different to the one used in applications such as [[Firefox]]. This is because desktop applications are using X cursor themes whilst Enlightenment has its own set of cursor themes. For consistency, you can set Enlightenment to always use the X cursor theme. To do this, open the Enlightenment ''Settings Panel'' and click on the ''Input'' tab. Click on the ''Mouse'' option. Change the theme from ''Enlightenment'' to ''X'' and click ''OK''. You should now find that the same cursor theme is used everywhere. If the X cursor theme itself is not always consistent, see [[Cursor themes#XDG specification]].\n\n==== Background images ====\n\nYou can just select wallpapers in the wallpaper settings dialog and import any image with the provided settings dialog, or you can put desired wallpapers into {{ic|~/.e/e/backgrounds/}}\n\nLMB anywhere on the desktop will give access to the settings, select {{ic|/Desktop/Backgrounds/}}\n\nAny new image copied in the {{ic|~/.e/e/backgrounds/}} folder will get the list of available backgrounds auto-updated. You can drop animated gifs and even mp4 and other video files in here and use them as wallpapers if you want. Select desired wallpaper from drop-down menu. Inside the appropriate tabs in the global settings, you can adjust things like tiling of the background image, filling screen and such.\n\n== Enlightenment DR16 ==\n\nEnlightenment, Development Release 16 was first released in 2000, and reached version 1.0 in 2009. Originally, the DR16 stood for the 0.16 version of the Enlightenment project. You will find it as \"Enlightenment16\" now in the Arch repositories, it is still under development today, regularly updated by its maintainer Kim 'kwo' Woelders. With compositing, shadows and transparencies, E16 kept all of the speed that presided over its foundation by original author Carsten \"Rasterman\" Haitzler but with up to date refinement.\n\n=== To install E16 ===\n\nInstall {{AUR|enlightenment16}}.\n\nSee {{ic|/usr/share/doc/e16/e16.html}} for in depth documentation.\n\n=== Basic Configuration ===\n\nMost configuration files for E16 reside in {{ic|~/.e16}} and are text-based, editable at will. That includes the Menus too.\n\nShortcut keys can be either modified by hand, or with the e16keyedit software provided as source on the [https://sourceforge.net/projects/enlightenment/ sourceforge] page of the e16 project. Note that the keyboard shortcuts file is not created in {{ic|~/.e16}} by default. You can copy the packaged version to your home directory if you wish to make changes:\n $ cp /usr/share/e16/config/bindings.cfg ~/.e16\n\n==== Start/Restart/Stop Scripts ====\n\nCreate an Init, a Start and a Stop folder in your {{ic|~/.e16}} folder: any .sh script found there will either be executed at Startup (from Init folder), at each Restart (from Start folder), or at Shutdown (from Stop folder); provided you allowed it through the MMB / settings / session / <enable scripts> button and made them [[executable]]. Typical examples involves starting pulseaudio or your favorite network manager applet.\n\n==== Compositor ====\n\nShadows, Transparent effects ''et al'' can be found in MMB or RMB /Settings, under Composite .\n\n== See also ==\n\n* [https://www.enlightenment.org/ Enlightenment Homepage]\n* [https://docs.enlightenment.org/ Enlightenment Developer Documentation]\n* [https://sourceforge.net/projects/enlightenment/ DR16 download resource]\n* [https://lists.sourceforge.net/lists/listinfo/enlightenment-users Enlightenment users mail list]\n* [https://lists.sourceforge.net/lists/listinfo/enlightenment-devel Enlightenment developer mail list]\n* ircs://irc.libera.chat/e"
                    }
                ]
            },
            "2431": {
                "pageid": 2431,
                "ns": 0,
                "title": "Locale",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Localization]]\n[[de:Locale]]\n[[fr:Locale]]\n[[ja:\u30ed\u30b1\u30fc\u30eb]]\n[[pt:Locale]]\n[[ru:Locale]]\n[[zh-hans:Locale]]\n{{Related articles start}}\n{{Related|Environment variables}}\n{{Related|Localization}}\n{{Related articles end}}\n[[w:Locale (computer software)|Locales]] are used by {{Pkg|glibc}} and other locale-aware programs or libraries for rendering text, correctly displaying regional monetary values, time and date formats, alphabetic idiosyncrasies, and other locale-specific standards.\n\n== Generating locales ==\n\nLocale names are typically of the form {{ic|language[_territory][.codeset][@modifier]}}, where ''language'' is an [[w:List_of_ISO_639-1_codes|ISO 639 language code]], ''territory'' is an [[w:ISO_3166-1#Current_codes|ISO 3166 country code]], and ''codeset'' is a [[w:Character_encoding|character set]] or encoding identifier like [[w:ISO/IEC_8859-1|ISO-8859-1]] or [[w:UTF-8|UTF-8]]. See {{man|3|setlocale}}.\n\nFor a list of enabled locales, run:\n\n $ locale -a\n\nBefore a locale can be enabled on the system, it must be generated. This can be achieved by uncommenting applicable entries in {{ic|/etc/locale.gen}}, and running ''locale-gen''. Equivalently, commenting entries disables their respective locales. While making changes, consider any localisations required by other users on the system, as well as specific [[#Variables]].\n\nFor example, uncomment {{ic|en_US.UTF-8 UTF-8}} for American-English:\n\n{{hc|/etc/locale.gen|\n...\n#en_SG ISO-8859-1\nen_US.UTF-8 UTF-8\n#en_US ISO-8859-1\n...\n}}\n\nSave the file, and generate the locale:\n\n # locale-gen\n\n{{Note|1=<nowiki></nowiki>\n* {{ic|locale-gen}} also runs with every update of {{Pkg|glibc}}. [https://gitlab.archlinux.org/archlinux/packaging/packages/glibc/-/blob/main/glibc.install?ref_type=heads#L2]\n* {{ic|UTF-8}} is recommended over other character sets. [https://utf8everywhere.org/]}}\n\n== Setting the locale ==\n\nTo display the currently set locale and its related environmental settings, type:\n\n $ locale\n\nThe locale to be used, chosen among the previously generated ones, is set in {{ic|locale.conf}} files. Each of these files must contain a new-line separated list of [[environment variable]] assignments, having the same format as output by ''locale''.\n\nTo list available locales which have been previously generated, run:\n\n $ localedef --list-archive\n\nAlternatively, using {{man|1|localectl}}:\n\n $ localectl list-locales\n\n=== Setting the system locale ===\n\nTo set the system locale, write the {{ic|LANG}} variable to {{ic|/etc/locale.conf}}, where {{ic|''en_US.UTF-8''}} belongs to the '''first column''' of an uncommented entry in {{ic|/etc/locale.gen}}:\n\n{{hc|1=/etc/locale.conf|2=\nLANG=''en_US.UTF-8''\n}}\n\nAlternatively, run:\n\n # localectl set-locale LANG=''en_US.UTF-8''\n\nSee [[#Variables]] and {{man|5|locale.conf}} for details.\n\n=== Overriding system locale per user session ===\n\nThe system-wide locale can be overridden in each user session by creating or editing {{ic|$XDG_CONFIG_HOME/locale.conf}} (usually {{ic|~/.config/locale.conf}}).\n\nThe precedence of these {{ic|locale.conf}} files is defined in {{ic|/etc/profile.d/locale.sh}}.\n\n{{Tip|\n* This can also allow keeping the logs in {{ic|/var/log/}} in English while using the local language in the user environment.\n* You can create a {{ic|/etc/skel/.config/locale.conf}} file so that any new users added using ''useradd'' and the {{ic|-m}} option will have {{ic|~/.config/locale.conf}} automatically generated.}}\n\n=== Make locale changes immediate ===\n\nOnce system and user {{ic|locale.conf}} files have been created or edited, their new values will take effect for new sessions at login. To have the current environment use the new settings unset {{ic|LANG}} and source {{ic|/etc/profile.d/locale.sh}}:\n\n $ unset LANG\n $ source /etc/profile.d/locale.sh\n\n{{Note|The {{ic|LANG}} variable has to be unset first, otherwise {{ic|locale.sh}} will not update the values from {{ic|locale.conf}}. Only new and changed variables will be updated; variables removed from {{ic|locale.conf}} will still be set in the session.}}\n\n=== Other uses ===\n\nLocale variables can also be defined with the standard methods as explained in [[Environment variables]].\n\nFor example, in order to test or debug a particular application during development, it could be launched with something like:\n\n $ LANG=C ./my_application.sh\n\nSimilarly, to set the locale for all processes run from the current shell (for example, during system installation):\n\n $ export LANG=C\n\n== Variables ==\n\n{{ic|locale.conf}} files support the following environment variables. \n\n* [[#LANG: default locale|LANG]]\n* [[#LANGUAGE: fallback locales|LANGUAGE]]\n* {{ic|LC_ADDRESS}}\n* [[#LC_COLLATE: collation|LC_COLLATE]]\n* {{ic|LC_CTYPE}}\n* {{ic|LC_IDENTIFICATION}}\n* {{ic|LC_MEASUREMENT}}\n* {{ic|LC_MESSAGES}}\n* {{ic|LC_MONETARY}}\n* {{ic|LC_NAME}}\n* {{ic|LC_NUMERIC}}\n* {{ic|LC_PAPER}}\n* {{ic|LC_TELEPHONE}}\n* [[#LC_TIME: date and time format|LC_TIME]]\n\nFull meaning of the above {{ic|LC_*}} variables can be found on manpage {{man|7|locale}}, whereas details of their definition are described on {{man|5|locale}}.\n\n{{Note|Programs follow the [https://www.gnu.org/software/gettext/manual/gettext.html#Locale-Environment-Variables priority order] when looking up locale dependent values.}}\n\n=== LANG: default locale ===\n\nThe locale set for this variable will be used for all the {{ic|LC_*}} variables that are not explicitly set.\n\n{{Tip|Assume that you are an English user in Spain, and you want your programs to handle numbers and dates according to Spanish conventions, and only the messages should be in English. Then you could set the {{ic|LANG}} variable to {{ic|es_ES.UTF-8}} and the {{ic|LC_MESSAGES}} (user interface for message translation) variable to {{ic|en_US.UTF-8}}.}}\n\n=== LANGUAGE: fallback locales ===\n\nPrograms which use {{Pkg|gettext}} for translations respect the {{Ic|LANGUAGE}} option in addition to the usual variables. This allows users to specify a [https://www.gnu.org/software/gettext/manual/gettext.html#The-LANGUAGE-variable list] of locales that will be used in that order. If a translation for the preferred locale is unavailable, another from a similar locale will be used instead of the default. For example, an Australian user might want to fall back to British rather than US spelling:\n\n{{hc|locale.conf|2=\nLANG=en_AU.UTF-8\nLANGUAGE=en_AU:en_GB:en\n}}\n\n{{Note|1=Many applications do not name or alias their English locale as {{ic|en}} or {{ic|en_US}}, but instead make it the default locale, which is {{ic|C}}. If in {{ic|LANGUAGE}} a non-English locale is placed after English, e.g. {{ic|1=LANGUAGE=en_US:en:es_ES}}, then applications may choose the secondary locale despite English strings being available.[https://bugs.kde.org/show_bug.cgi?id=192019] The solution is to always explicitly place the {{ic|C}} locale after English. E.g. {{ic|1=LANGUAGE=en_US:en:C:es_ES}}.}}\n\n=== LC_TIME: date and time format ===\n\nIf {{ic|LC_TIME}} is set to {{ic|en_US.UTF-8}}, for example, the date format will be \"MM/DD/YYYY\".  If wanting to use the [[Wikipedia:ISO 8601|ISO 8601]] date format of \"YYYY-MM-DD\" use:\n\n{{hc|locale.conf|2=\nLC_TIME=en_DK.UTF-8\n}}\n\nYou can print the current timestamp using your locale date and time format with {{ic|date +\"%c\"}}.\n\n{{pkg|glibc}} 2.29 fixed a bug, {{ic|en_US.UTF-8}} started showing in 12-hour format, as was intended.  If wanting to use 24-hour format, use {{ic|1=LC_TIME=C.UTF-8}}.\n\n{{Note|1=Programs do not necessarily respect this variable to format the date. For example, {{man|1|date}} uses its own parameters to do so, and [[Firefox]] stopped honouring {{ic|LC_TIME}} with versions 57 to 84 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1429578 Bug 1429578]).}}\n\n=== LC_COLLATE: collation ===\n\nThis variable governs the collation rules used for sorting and regular expressions.\n\nSetting the value to {{ic|C}} can for example make the ''ls'' command sort dotfiles first, followed by uppercase and lowercase filenames:\n\n{{hc|locale.conf|2=\nLC_COLLATE=C\n}}\n\nSee also [https://superuser.com/a/448294].\n\nTo get around potential issues, Arch used to set {{ic|1=LC_COLLATE=C}} in {{ic|/etc/profile}}, but this method is now deprecated.\n\n=== LC_ALL: troubleshooting ===\n\nThe locale set for this variable will always override {{ic|LANG}} and all the other {{ic|LC_*}} variables, whether they are set or not. If {{ic|LC_ALL}} is set to {{ic|C}} or {{ic|C.UTF-8}}, it will also override {{ic|LANGUAGE}}.\n\n{{ic|LC_ALL}} is the only {{ic|LC_*}} variable which '''cannot''' be set in {{ic|locale.conf}} files: it is meant to be used only for testing or troubleshooting purposes, for example in {{ic|/etc/profile}}.\n\n== Troubleshooting ==\n\nFor encoding problems, check [[Character encoding#Troubleshooting]].\n\n=== My system is still using wrong language ===\n\nIt is possible that the environment variables are redefined in other files than {{ic|locale.conf}}. See [[Environment variables#Defining variables]] for details.\n\nIf you are using a desktop environment, such as [[GNOME]], its language settings may be overriding the settings in {{ic|locale.conf}}.\n\n[[KDE]] Plasma also allows to change the UI's language through the system settings. If the desktop environment is still using the default language after the modification, [https://bbs.archlinux.org/viewtopic.php?pid=1435219#p1435219 deleting the file at] {{ic|~/.config/plasma-localerc}} (previously: {{ic|~/.config/plasma-locale-settings.sh}}) should resolve the issue.\n\nIf you are using a display manager in combination with {{pkg|accountsservice}}, follow the instructions in [[Display manager#Set language for user session]].\n\n[[LightDM]] will automatically use {{pkg|accountsservice}} to set a user's locale if it is installed. Otherwise, LightDM stores the user session configuration in {{ic|~/.dmrc}}. It is possible that an unwanted locale setting is retrieved from there as well.\n\n=== Using a custom locale causes problems ===\n\nWhen installing a locale that is not officially supported (e.g., {{AUR|locale-en_xx}}), some problems can occur, like [https://youtrack.jetbrains.com/issue/IDEA-59679/Cannot-type-dead-keys-in-Linux#focus=Comments-27-5724886.0-0 dead/compose keys not working in some applications] or [https://git.suckless.org/tabbed/commit/aa5f91e0d54333e4da247528f5eacb721710d16d.html#h0-0-304 applications reporting missing locales].\nAfter installing a custom locale, manual intervention is required to resolve these problems.\nThere are [https://xyne.dev/projects/locale-en_xx/#usage two approaches] (replace {{ic|en_XX.UTF-8}} with the identifier of your custom locale):\n\n==== Set LC_CTYPE ====\n\nSet {{ic|LC_CTYPE}} to an officially supported locale (like {{ic|en_US.UTF-8}}), e.g.: \n\n{{hc|/etc/locale.conf|2=\nLANG=en_XX.UTF-8\nLC_CTYPE=en_US.UTF-8\n}}\n\n==== Modify the Xlib database ====\n\nModify the Xlib database by adding the following: \n\n{{hc|/usr/share/X11/locale/locale.dir|\nen_US.UTF-8/XLC_LOCALE en_XX.UTF-8\nen_US.UTF-8/XLC_LOCALE: en_XX.UTF-8\n}}\n\n{{hc|/usr/share/X11/locale/compose.dir|\nen_US.UTF-8/Compose en_XX.UTF-8\nen_US.UTF-8/Compose: en_XX.UTF-8\n}}\n\n== See also ==\n\n* [https://sourceware.org/glibc/wiki/Locales Locales - glibc wiki]\n* [[Gentoo:Localization/Guide]]\n* [https://web.archive.org/web/20220715154210/http://wikigentoo.ksiezyc.pl/Locales.htm Supposedly 2008, or earlier, Gentoo wiki article]\n* [https://icu4c-demos.unicode.org/icu-bin/collation.html ICU's interactive collation testing]\n* [http://www.openi18n.org/ Free Standards Group Open Internationalisation Initiative]\n* [https://pubs.opengroup.org/onlinepubs/007908799/xbd/locale.html The Single UNIX Specification definition of Locale] by The Open Group\n* [https://help.ubuntu.com/community/EnvironmentVariables#Locale_setting_variables Locale environment variables]"
                    }
                ]
            },
            "2847": {
                "pageid": 2847,
                "ns": 0,
                "title": "Vi",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "{{Lowercase title}}\n[[Category:Text editors]]\n[[de:Vi]]\n[[es:Vi]]\n[[fr:Vi]]\n[[pt:Vi]]\n[[zh-hans:Vi]]\nAccording to [[Wikipedia:Vi|Wikipedia]]:\n\n:vi is a screen-oriented text editor originally created for the Unix operating system. The portable subset of the behavior of vi and programs based on it, and the ex editor language supported within these programs, is described by (and thus standardized by) the Single Unix Specification and POSIX.\n\n== Installation ==\n\n[[Install]] the {{Pkg|vi}} package.\n\nThe package also provides line-oriented [[text editor]]s ''edit'' and ''ex'', as well as the ''vedit'' and ''view'' commands.\n\n== Vi-style software ==\n\nThe key bindings and modes of vi have been recreated in various other software:\n\n* [[List of applications/Documents#Vi-style text editors|text editors]], the most popular of which being [[Vim]]\n* [[List of applications/Utilities#File managers|file managers]] like [[ranger]] and [[Vifm]]\n* the [[Readline#Editing mode|Readline]] input library (used by [[Bash]])\n* [[shell]]s like [[Zsh#Key bindings|Zsh]]\n* [[web browser]]s like [[Luakit]], [[qutebrowser]] or {{Pkg|vimb}}; for [[Firefox]] and [[Chromium]] there are [[Browser extensions#Keyboard shortcuts|browser extensions]] available.\n* most [[tiling window manager]]s can be configured for vi-style control\n\n== See also ==\n\n* {{man|1|vi}}\n* [https://web.archive.org/web/20140822135551/http://usalug.com/vi.html vi Tutorial and Reference Guide]"
                    }
                ]
            },
            "3051": {
                "pageid": 3051,
                "ns": 0,
                "title": "XScreenSaver",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:X server]]\n[[ja:XScreenSaver]]\n[[ru:XScreenSaver]]\n[[zh-hans:XScreenSaver]]\n{{Related articles start}}\n{{Related|DPMS}}\n{{Related|Xresources}}\n{{Related|Session lock}}\n{{Related|List of applications/Security#Screen lockers}}\n{{Related articles end}}\n\n[https://www.jwz.org/xscreensaver/ XScreenSaver] is a screen saver and locker for the X Window System.\n\n== Installation ==\n\n[[Install]] the {{Pkg|xscreensaver}} package.\n\nFor an Arch Linux branded experience, install the {{AUR|xscreensaver-arch-logo}} package.\n\n== Configuration ==\n\nMost options are configured on a user-by-user basis by running ''xscreensaver-settings''. ''xscreensaver-settings'' writes the chosen configuration to {{ic|~/.xscreensaver}}, discarding any manual modifications to the file. Global options are defined in {{ic|/usr/share/X11/app-defaults/XScreenSaver}}.\n\nSince at least XScreenSaver 5.22, there is another way to edit XScreenSaver's user configuration, using [[X resources]].\n\n=== Theming ===\n\nStarting from version 6.0, XScreenSaver comes with several pre-installed themes. You can select a theme using ''xscreensaver-settings'' or by changing the {{ic|dialogTheme}} option ({{ic|dialogTheme: ''themename''}} in {{ic|~/.xscreensaver}} or using X resources: {{ic|xscreensaver-auth.dialogTheme: ''themename''}}).\n\nYou can customize themes using X resources. The example below demonstrates changing some colors and fonts. If you are using a non-default theme, replace {{ic|default}} with the name of your chosen theme in lower case, or use question mark ({{ic|?}}) to affect all themes:\n\n{{hc|~/.Xresources|\n! Font for regular texts.\n! Font names are case-insensitive.\n! You can use a comma-separated list of fonts to set a fallback font.\nxscreensaver-auth.default.Dialog.bodyFont: times new roman 12, dejavu serif 12\n\n! Window background color. You can use color names.\nxscreensaver-auth.default.Dialog.background: black\n\n! Main text color. You can also use HEX color codes.\nxscreensaver-auth.default.Dialog.foreground: #ffffff\n}}\n\nYou can view a list of the available X resources in {{ic|/usr/share/X11/app-defaults/XScreenSaver}}.\n\nDo not forget to [[X resources#Load resource file|reload the resource file]] after changes.\n\n=== DPMS and blanking settings ===\n\n{{Style|\"overrides DPMS\" is vague\u2014''xscreensaver'' does the equivalent of {{ic|xset s 0 0}}, uses its own timer for the various animations, but sets the DPMS timeout to the values in ''Display Power Management''.}}\n\nXScreenSaver manages screen blanking and display energy saving ([[DPMS]]) independently of X itself and overrides it. To configure the timings for blanking, standby, display poweroff and such, use ''xscreensaver-demo'' or edit the configuration file manually, e.g. {{ic|~/.xscreensaver}}:\n\n{{bc|\ntimeout:\t1:00:00\ncycle:\t\t0:05:00\nlock:\t\tFalse\nlockTimeout:\t0:00:00\npasswdTimeout:\t0:00:30\nfade:\t\tTrue\nunfade:\t\tFalse\nfadeSeconds:\t0:00:03\nfadeTicks:\t20\ndpmsEnabled:\tTrue\ndpmsStandby:\t2:00:00\ndpmsSuspend:\t2:00:00\ndpmsOff:\t4:00:00\n}}\n\nDPMS and screen blanking can be disabled by starting ''xscreensaver-demo'' and, for the ''Mode'' setting, choosing ''Disable Screen Saver''.\n\n{{Note|If ''Lock Screen After'' in ''xscreensaver-demo'' is ticked and set to 0 minutes, the screen will be locked immediately upon blanking. If ''Power Manager Enabled'' is unticked, DPMS is disabled; it does not mean that XScreenSaver will relinquish control of DPMS settings.}}\n\n== Usage ==\n\n{{Tip|To start XScreenSaver without the splash screen, use the {{ic|--no-splash}} switch. See {{man|1|xscreensaver}} for a full list of options.}}\n\nIn the [[Xfce]], [[LXDE]] and [[LXQt]] environments, XScreenSaver is autostarted automatically if it is available - no further action is required.\n\nIn [[KDE Plasma]], screen saver and locker features are handled by ''ksmserver'', which conflicts with XScreenSaver. To disable it, you need to [[KDE#systemd startup|enable systemd startup for KDE]] and then edit the {{ic|plasma-ksmserver.service}} [[user unit]]:\n\n{{hc|1=~/.config/systemd/user/plasma-ksmserver.service.d/override.conf|2=\n[Service]\nExecStart=\nExecStart=/usr/bin/ksmserver --no-lockscreen\n}}\n\nThen logout and login again, and XScreenSaver should work properly now. See {{man|1|xscreensaver|INSTALLING XSCREENSAVER ON KDE}} for more information.\n\nFor other environments, see [[Autostarting]].\n\nTo immediately trigger ''xscreensaver'', if it is running, and lock the screen, execute the following command:\n\n $ xscreensaver-command -lock\n\n=== Lock on suspend ===\n\nXScreenSaver ships with a small utility named ''xscreensaver-systemd'', which handles the {{ic|PrepareForSleep}} signal from [[systemd]] using [[D-Bus]] and automatically locks the screen on suspend and hibernate. It is started automatically with ''xscreensaver'', no further action required. See {{Man|6|xscreensaver-systemd}} for more information.\n\nHowever, it does not handle other systemd signals such as {{ic|loginctl lock-session}}. To handle it, you can use [[Power management#xss-lock|xss-lock]]. Use the {{ic|--ignore-sleep}} option because the suspend/hibernate events are already handled by ''xscreensaver-systemd''.\n\n $ xss-lock --ignore-sleep -- xscreensaver-command -lock\n\nYou may want to set XScreenSaver's fade out time to 0.\n\n=== User switching from the lock screen ===\n\n{{Warning|When switching users using a display manager such as GDM or LightDM, XScreenSaver will not lock the original session\u2014it can be accessed without a password simply by switching TTYs to the session in question. If you are using LightDM, as a workaround, install {{Pkg|light-locker}} and run it alongside XScreenSaver. Alternatively, use a different screen locking program altogether\u2014see [[List of applications/Security#Screen lockers]].}}\n\nBy default, XScreenSaver's ''New Login'' button in the lock screen will call {{ic|gdmflexiserver -ls}} to switch users. [[Display manager]]s other than [[GDM]] that support user switching require a different command.\n\n{{Tip|Adding {{ic|xscreensaver-auth.default.*.newLoginCommand:}} to {{ic|~/.Xresources}} whilst leaving the argument blank will make the ''New Login'' button disappear.}}\n\nAs modifications in {{ic|~/.xscreensaver}} are [[#Configuration|discarded]] by ''xscreensaver-settings'', {{ic|~/.Xresources}} is used in this section.\n\n==== LXDM ====\n\nTo use LXDM's switching mode:\n\n xscreensaver-auth.default.*.newLoginCommand: lxdm -c USER_SWITCH\n\n==== LightDM ====\n\nTo use [[LightDM]]'s switching mode:\n\n xscreensaver-auth.default.*.newLoginCommand: dm-tool switch-to-greeter\n\n{{Note|If you use this to switch to an already-logged-in user, you might have to enter the password twice (once for LightDM, and once for the XScreenSaver dialog of the user you logged in to).}}\n\n==== SDDM ====\n\n[[SDDM]] does not support user switching. [https://github.com/sddm/sddm/issues/579] You can try to call the {{ic|SwitchToGreeter}} method [https://github.com/sddm/sddm/issues/824 using dbus-send], but it may not work properly.\n\n== Tips and tricks ==\n\n=== Disable during media playback ===\n\nStarting from version 5.45, the ''xscreensaver-systemd'' utility implements the [[D-Bus]] ScreenSaver interface. It is started automatically with ''xscreensaver'', so most applications should properly disable the screensaver without additional configuration. However, some applications do not support D-Bus or use another interfaces.\n\n==== mpv ====\n\nBy default [[mpv]] uses the X11 Screen Saver extension (XSS). It turns off the screensaver at startup and turns it on again on exit. The screensaver is always re-enabled when the player is paused. The option can be controlled in ''mpv''<nowiki/>'s configuration file located in {{ic|~/.config/mpv/mpv.conf}}:\n\n stop-screensaver = \"yes\"\n\nThis is not supported on all video outputs or platforms. If you face some issues you might use a Lua script to manually disable the screensaver. Create a file at {{ic|~/.config/mpv/scripts/xscreensaver.lua}} with the following contents:\n\n local utils = require 'mp.utils'\n mp.add_periodic_timer(30, function()\n     utils.subprocess({args={\"xscreensaver-command\", \"-deactivate\"}})\n end)\n\nThe above script will call {{ic|xscreensaver-command -deactivate}} every 30 seconds.\n\n==== mplayer ====\n\nAdd the following to {{ic|~/.mplayer/config}}:\n\n heartbeat-cmd=\"xscreensaver-command -deactivate >&- 2>&- &\"\n\n==== Kodi ====\n\n[[Kodi]] has no native support to disable XScreenSaver (it uses its own screensaver). [[Install]] the {{AUR|kodi-prevent-xscreensaver}} package as a workaround or try Kodi extension from https://sourceforge.net/projects/osscreensavermanager/.\n\n==== Browser HTML5 video ====\n\nMost browsers ([[Chromium]] and Chromium-based spin-offs, [[Firefox]], [[GNOME Web]], [[Otter Browser]] etc.) support the D-Bus ScreenSaver interface and should disable the screensaver during HTML5 video playback.\n\n==== Other applications ====\n\nIf you are using applications that do not disable the screensaver, you can try a script named [https://github.com/devkral/lightsonplus lightsonplus], which disables the screensaver when a fullscreen video is detected. Some applications (such as {{Pkg|totem}}, [[Steam]] and others) are supported out of the box, you just need to enable their detection in the {{ic|lightson+}} script. If your application is unsupported but has a permanent window name, you can set it in the {{ic|window_name}} variable.\n\n=== Animated wallpaper ===\n\nOne can run {{ic|xscreensaver}} in the background, just like a wallpaper. First, kill any process that is controlling the background (the root window).\n\nThen, locate the desired XScreenSaver executable (typically in {{ic|/usr/lib/xscreensaver/}}) and run it with the {{ic|-root}} flag, for example:\n\n $ /usr/lib/xscreensaver/glslideshow -root &\n\n{{Note|If [[xcompmgr]] or [[picom]] causes problems, [[install]] the {{AUR|shantz-xwinwrap-bzr}} package, and run:\n\n $ xwinwrap -b -fs -sp -nf -ov -- /usr/lib/xscreensaver/glslideshow -root -window-id WID &\n}}\n\n== Troubleshooting ==\n\nTo log verbose debugging information, start ''xscreensaver'' with the {{ic|--verbose}} command line option. You can also add {{ic|verbose: True}} to the {{ic|~/.xscreensaver}} file to make it persistent.\n\nTo save the log to a file, you can set the path using the {{ic|--log}} option. Using this option also implies verbose output. (There is no equivalent option in {{ic|~/.xscreensaver}} or X resources).\n\n== See also ==\n\n* [https://www.jwz.org/xscreensaver/ Homepage for XScreenSaver]"
                    }
                ]
            },
            "3130": {
                "pageid": 3130,
                "ns": 0,
                "title": "Tor",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Anonymity networks]]\n[[de:Tor]]\n[[ja:Tor]]\n[[ru:Tor]]\n[[zh-hans:Tor]]\n{{Related articles start}}\n{{Related|GNUnet}}\n{{Related|I2P}}\n{{Related|Freenet}}\n{{Related articles end}}\nThe [https://www.torproject.org Tor Project] (''T''he ''o''nion ''r''outing) is an open source implementation of [[Wikipedia:Onion routing|onion routing]] that provides free access to an anonymous proxy network. Its primary goal is to enable [[Wikipedia:Internet anonymity|online anonymity]] by protecting against [[Wikipedia:Traffic analysis|traffic analysis]] attacks.\n\nUsers of the Tor network run an onion proxy software on their machines, which presents a SOCKS interface to its clients. This software connects out to Tor, periodically negotiating a virtual circuit through the Tor network. Tor employs cryptography in a layered manner (hence the 'onion' analogy), ensuring forward secrecy between routers.\n\nThrough this process the onion proxy manages networking traffic for end-user anonymity. It keeps a user anonymous by encrypting traffic, sending it through other nodes of the Tor network, and decrypting it at the last node to receive your traffic before forwarding it to the server you specified. One trade off is that using Tor can be considerably slower than a regular direct connection, due to the large amount of traffic re-routing. Additionally, although Tor provides protection against traffic analysis it cannot prevent traffic confirmation at the boundaries of the Tor network (i.e. the traffic entering and exiting the network). See [[Wikipedia:Tor (anonymity network)]] for more information.\n\n{{Note|Tor by itself is '''not''' all you need to maintain anonymity. There are several major pitfalls to watch out for (see [https://support.torproject.org/#faq_staying-anonymous Am I totally anonymous if I use Tor?]).}}\n\n== Installation ==\n\n[[Install]] the {{Pkg|torbrowser-launcher}} package to use the [https://www.torproject.org/download/ Tor Browser], which is the only supported way to browse the web anonymously using Tor.\n\nUsers intending to manually use Tor with other software, run relays, or host onion services should install the {{Pkg|tor}} package. The majority of this article covers this usage.\n\n''Nyx'' is a command line monitor for Tor, it provides bandwidth usage, connection details and on-the-fly configuration editing. To use it, [[install]] the {{Pkg|nyx}} package.\n\n== Usage ==\n\n[[Start/enable]] {{ic|tor.service}}. Alternatively, launch it manually as the tor user: \n\n [tor]$ /usr/bin/tor\n\nTo use a program over Tor, configure it to use {{ic|127.0.0.1}} or {{ic|localhost}} as a SOCKS5 proxy, with port {{ic|9050}} for plain Tor with standard settings.\n\nThe proxy supports remote DNS resolution: use {{ic|socks5'''h'''://localhost:9050}} for DNS resolution from the exit node (instead of {{ic|socks5}} for a local DNS resolution).\n\nTo check if Tor is functioning properly, visit https://check.torproject.org/ or https://torcheck.xenobite.eu/{{Dead link|2023|07|30|status=domain name not resolved}} websites.\n\n== Configuration ==\n\nTor reads its configurations from the file {{ic|/etc/tor/torrc}} by default, or if the latter is not found, from {{ic|$HOME/.torrc}}. The configuration options are explained in {{man|1|tor}} and the [https://torproject.org/docs/tor-manual.html.en Tor website]. The default configuration should work fine for most Tor users.\n\nTo reload the configuration after a change, [[reload]] {{ic|tor.service}}.\n\n=== Relay Configuration ===\n\nThe maximum file descriptor number that can be opened by Tor can be set with {{ic|LimitNOFILE}} in {{ic|tor.service}}. Fast relays may want to increase this value.\n\nIf your computer is not running a web server, and you have not set {{ic|AccountingMax}}, consider changing your {{ic|ORPort}} to {{ic|443}} and/or your {{ic|DirPort}} to {{ic|80}}. Many Tor users are stuck behind firewalls that only let them browse the web, and this change will let them reach your Tor relay. If you are already using ports {{ic|80}} and {{ic|443}}, other useful ports are {{ic|22}}, {{ic|110}}, {{ic|143}} and {{ic|9001}}.[https://trac.torproject.org/projects/tor/wiki/TorRelayGuide#TorRelaySetup:InstallationandConfiguration]\nPorts below 1024 are privileged ports, so to use those, Tor must be run as root by setting {{ic|1=User=root}} in {{ic|tor.service}} and {{ic|User tor}} in {{ic|torrc}}.\n\nYou may wish to review the [https://blog.torproject.org/lifecycle-new-relay/ Tor documentation].\n\n=== Open Tor ControlPort ===\n\nMost users will not need this. \nBut some programs will ask you to ''open your Tor ControlPort'' \nso they get low-level access to your Tor node.\n\nVia the ControlPort, \nother applications can change and monitor your Tor node, \nto modify your Tor configuration while Tor is running, \nor to get details about Tor network status and Tor circuits.\n\nappend to your {{ic|torrc}} file\n\n ControlPort 9051\n\nFrom Tor's [https://gitweb.torproject.org/torspec.git/tree/control-spec.txt control-spec.txt]: \n: For security, the [Tor control] stream should not be accessible by untrusted parties.\n\nSo, for more security, we will restrict access to the ControlPort, \neither with a ''cookie file'', or a ''control password'', or both.\n\n{{Warning|Only provide the password or access to the cookie to trusted processes and users, since they can be used to modify arbitrary configuration options of the service.}}\n\n==== Set a Tor Control cookie file ====\n\nTo your {{ic|torrc}} add\n\n{{bc|\nCookieAuthentication 1\nCookieAuthFile /var/lib/tor/control_auth_cookie\nCookieAuthFileGroupReadable 1\nDataDirectoryGroupReadable 1\n}}\n\nWith ''cookie auth'', access to your ControlPort is restricted by file permissions \nto your Tor cookie file, and to your Tor data directory.\n\nWith the configuration above, \nall users in the {{ic|tor}} group have access to your Tor cookie file.\n\nAdd them to the {{ic|tor}} [[user group]].\n\n[[Restart]] {{ic|tor.service}}\n\nNow ''user'' should have access to your Tor cookie file.\n\n $ stat -c%a /var/lib/tor /var/lib/tor/control_auth_cookie\n\nshould print {{ic|750}} and {{ic|640}}.\n\n==== Set a Tor Control password ====\n\nConvert your password from plain-text to hash\n\n{{bc|\n# set +o history # unset bash history\n# tor --hash-password ''your_password''\n# set -o history # set bash history\n}}\n\nand add that hash to your {{ic|torrc}}\n\n HashedControlPassword ''your_hash''\n\nthe bash history commands prevent your clear-text password \nfrom being written to your bash {{ic|$HISTFILE}}\n\n==== Open Tor ControlSocket ====\n\nIf some program needs access to your Tor ControlSocket, \nas in Unix Domain Socket,\nadd the following to your {{ic|torrc}}:\n\n{{bc|\nControlSocket /var/lib/tor/control_socket\nControlSocketsGroupWritable 1\nDataDirectoryGroupReadable 1\nCacheDirectoryGroupReadable 1 # workaround for tor bug #26913\n}}\n\nAdd the user who will run the program to the {{ic|tor}} [[user group]]\n\n[[Restart]] {{ic|tor.service}} and relaunch the program.\n\nTo verify the status of the control sockets:\n\n # stat -c%a /var/lib/tor /var/lib/tor/control_socket\n\nshould print {{ic|750}} and {{ic|660}}\n\n==== Test your Tor Control ====\n\nTo test your ControlPort, run {{Pkg|gnu-netcat}} with\n\n $ echo -e 'PROTOCOLINFO\\r\\n' | nc 127.0.0.1 9051\n\nTo test your ControlSocket, run {{Pkg|socat}} with\n\n $ echo -e 'PROTOCOLINFO\\r\\n' | socat - UNIX-CLIENT:/var/lib/tor/control_socket\n\nboth commands should print\n\n{{bc|1=\n250-PROTOCOLINFO 1\n250-AUTH METHODS=COOKIE,SAFECOOKIE,HASHEDPASSWORD COOKIEFILE=\"/var/lib/tor/control_auth_cookie\"\n250-VERSION Tor=\"0.3.4.8\"\n250 OK\n514 Authentication required.\n}}\n\nSee Tor's [https://gitweb.torproject.org/torspec.git/tree/control-spec.txt control-spec.txt] for more commands.\n\n=== Using system Tor service in the browser ===\n\nWhen using the Tor browser, it is possibly to use the running system service instead of initiating a second connection to the Tor network.\nInstructions are contained in the starter file for the browser, which by default is located at {{ic| ~/.local/share/torbrowser/tbb/x86_64/tor-browser/Browser/start-tor-browser}}.\n\nAs of version {{ic|0.3.7}}, the following steps can be followed:\n# In {{ic|/etc/tor/torrc}}, look for the setting {{ic|#SOCKSPort}} and copy down the address and port there. If no address is given, it is {{ic|127.0.0.1}} by default, and if not port is given it is {{ic|9050}} by default.\n# Follow the steps in [[#Open Tor ControlPort]] and [[#Set a Tor Control password]], and copy down both the password and control port you've set.\n# In the Tor browser, navigate to {{ic|about:config}} and set the following flags: {{bc|<nowiki>\n# SETTING NAME                             VALUE\n# network.proxy.socks                      <SocksAddress>\n# network.proxy.socks_port                 <SocksPort>\n# extensions.torbutton.inserted_button     true\n# extensions.torbutton.launch_warning      false\n# extensions.torbutton.loglevel            2\n# extensions.torbutton.logmethod           0\n# extensions.torlauncher.control_port      <ControlPort>\n# extensions.torlauncher.loglevel          2\n# extensions.torlauncher.logmethod         0\n# extensions.torlauncher.prompt_at_startup false\n# extensions.torlauncher.start_tor         false</nowiki>}}\n# Edit the start file of the Tor browser, which by default is {{ic| ~/.local/share/torbrowser/tbb/x86_64/tor-browser/Browser/start-tor-browser}}. Replace the word {{ic|secret}} with the control password in the following line: {{bc|<nowiki>\nsetControlPortPasswd ${TOR_CONTROL_PASSWD:='\"secret\"'}</nowiki>}}{{Warning|Do not modify the set of two quotes around the word secret.}}\n# Restart the Tor browser. If succesful, there should be a message on the startup page explaining the connection is not managed by the Tor browser, and {{ic|tor.service}} should log a line saying {{ic|New control connection opened from <SocksAddress>}}.\n\n== Running Tor in a chroot ==\n\n{{Note| Connecting with telnet to the local ControlPort seems to be broken while running Tor in a chroot}}\n\nFor security purposes, it may be desirable to run Tor in a [[chroot]]. The following script will create an appropriate chroot in {{ic|/opt/torchroot}}:\n\n{{hc|~/torchroot-setup.sh|2=<nowiki>\n#!/bin/sh\nexport TORCHROOT=/opt/torchroot\n\nmkdir -p $TORCHROOT\nmkdir -p $TORCHROOT/etc/tor\nmkdir -p $TORCHROOT/dev\nmkdir -p $TORCHROOT/usr/bin\nmkdir -p $TORCHROOT/usr/lib\nmkdir -p $TORCHROOT/usr/share/tor\nmkdir -p $TORCHROOT/var/lib\nmkdir -p $TORCHROOT/var/log/tor/\n\nln -s /usr/lib  $TORCHROOT/lib\ncp /etc/hosts           $TORCHROOT/etc/\ncp /etc/host.conf       $TORCHROOT/etc/\ncp /etc/localtime       $TORCHROOT/etc/\ncp /etc/nsswitch.conf   $TORCHROOT/etc/\ncp /etc/resolv.conf     $TORCHROOT/etc/\n\ncp /usr/bin/tor         $TORCHROOT/usr/bin/\ncp /usr/share/tor/geoip* $TORCHROOT/usr/share/tor/\ncp /lib/libnss* /lib/libnsl* /lib/ld-linux-*.so* /lib/libresolv* /lib/libgcc_s.so* $TORCHROOT/usr/lib/\ncp $(ldd /usr/bin/tor | awk '{print $3}'|grep --color=never \"^/\") $TORCHROOT/usr/lib/\n\n### /var/log/tor/notices.log is only needed if you run hidden services\n# cp /var/log/tor/notices.log $TORCHROOT/var/log/tor/\n\ncp -r /var/lib/tor      $TORCHROOT/var/lib/\ncp /etc/tor/torrc       $TORCHROOT/etc/tor/\n\nchown tor:tor $TORCHROOT\nchmod 700 $TORCHROOT\nchown -R tor:tor $TORCHROOT/var/lib/tor\nchown -R tor:tor $TORCHROOT/var/log/tor\n\nsh -c \"grep --color=never ^tor /etc/passwd > $TORCHROOT/etc/passwd\"\nsh -c \"grep --color=never ^tor /etc/group > $TORCHROOT/etc/group\"\n\nmknod -m 644 $TORCHROOT/dev/random c 1 8\nmknod -m 644 $TORCHROOT/dev/urandom c 1 9\nmknod -m 666 $TORCHROOT/dev/null c 1 3\n\nif [ \"$(uname -m)\" = \"x86_64\" ]; then\n  cp /usr/lib/ld-linux-x86-64.so* $TORCHROOT/usr/lib/.\n  ln -sr /usr/lib64 $TORCHROOT/lib64\n  ln -s $TORCHROOT/usr/lib ${TORCHROOT}/usr/lib64\nfi\n\n</nowiki>}}\n\nAfter running the script as root, Tor can be launched in the [[chroot]] with the command:\n\n # chroot --userspec=tor:tor /opt/torchroot /usr/bin/tor\n\nor, if you use systemd, [[Systemd#Editing provided units|overload]] the service:\n\n{{hc|/etc/systemd/system/tor.service.d/chroot.conf|2=\n[Service]\nUser=root\nExecStart=\nExecStart=/usr/bin/sh -c \"chroot --userspec=tor:tor /opt/torchroot /usr/bin/tor -f /etc/tor/torrc\"\nKillSignal=SIGINT\n}}\n\n== Running Tor in a systemd-nspawn container with a virtual network interface ==\n\nIn this example we will create a [[systemd-nspawn]] container named {{ic|tor-exit}} with a virtual macvlan network interface.\n\nSee [[systemd-nspawn]] and [[systemd-networkd]] for full documentation.\n\n=== Host installation and configuration ===\n\nIn this example the container will reside in {{ic|/srv/container}}:\n\n # mkdir /srv/container/tor-exit\n\n[[Install]] the {{Pkg|arch-install-scripts}}.\n\nInstall {{Pkg|base}}, {{Pkg|tor}} and {{Pkg|nyx}} as per [[systemd-nspawn#Create and boot a minimal Arch Linux container]]:\n\n # pacstrap -K -ci /srv/container/tor-exit base tor nyx\n\nCreate directory if it does not exist:\n\n # mkdir /var/lib/container\n\nSymlink to register the container on the host, as per [[systemd-nspawn#Management]]:\n\n # ln -s /srv/container/tor-exit /var/lib/container/tor-exit\n\n==== Virtual network interface ====\n\nCreate a drop-in configuration file for the container:\n\n{{hc|/etc/systemd/nspawn/tor-exit.nspawn|2=\n[Network]\nMACVLAN=''interface''\n\n[Exec]\nLimitNOFILE=32768\n}}\n\n{{ic|1=MACVLAN=''interface''}} creates a \"macvlan\" interface named {{ic|mv-''interface''}} and assigns it to the container, see [[systemd-nspawn#Use a \"macvlan\" or \"ipvlan\" interface]] for details. This is advisable for security as it will allow you to give a private IP to the container, and it will not know what your machine's IP is. This can help obscure DNS requests.\n\n{{ic|1=LimitNOFILE=32768}} per [[#Raise maximum number of open file descriptors]].\n\nSet up [[systemd-networkd]] according to your network in {{ic|/srv/container/tor-exit/etc/systemd/network/mv-''interface''.network}}.\n\n==== Start and enable systemd-nspawn ====\n\n[[Start/enable]] {{ic|systemd-nspawn@tor-exit.service}}.\n\n=== Container configuration ===\n\nLogin to the container (see [[systemd-nspawn#machinectl]]):\n\n # machinectl login tor-exit \n\nSee [[systemd-nspawn#Root login fails]] if you cannot log in.\n\n==== Start and enable systemd-networkd ====\n\n[[Start]] and enable {{ic|systemd-networkd.service}}. {{ic|networkctl}} displays if {{ic|systemd-networkd}} is correctly configured.\n\n=== Configure Tor ===\n\nSee [[#Running a Tor server]].\n\n{{Tip|It is easier to edit files in the container from the host with your normal editor.}}\n\n== Web browsing ==\n\nThe only way to browse anonymously is with the supported ''Tor Browser Bundle'', which uses a patched version of [[Firefox]]. It can be installed with the {{Pkg|torbrowser-launcher}} package.\n\nTor can also be used with regular browsers: see [[#Firefox]] or [[#Chromium]] to run these browsers through the Tor network. Note this is not an anonymous way to browse even in \"private browsing\" mode: fingerprinting, plugins, DNS leak and other shortcomings may reveal your IP address or identity. [https://www.torproject.org/docs/faq.html.en#TBBOtherBrowser]\n\n{{Tip|For makepkg to verify the signature on the AUR source tarball download for ''Tor Browser'', import the [https://support.torproject.org/tbb/how-to-verify-signature/ signing keys from the Tor Project] as explained in [[GnuPG#Use a keyserver]].}}\n\n=== Firefox ===\n\nIn ''Preferences > General > Network Settings > Settings...'' , select ''Manual proxy configuration'' and enter SOCKS host {{ic|localhost}} with port {{ic|9050}} (SOCKS v5). To channel all DNS requests through TOR's socks proxy, also select ''Proxy DNS when using SOCKS v5''.\n\n=== Chromium ===\n\nYou can simply run:\n\n $ chromium --proxy-server=\"socks5://myproxy:8080\" --host-resolver-rules=\"MAP * ~NOTFOUND , EXCLUDE myproxy\"\n\nThe {{ic|1=--proxy-server=\"socks5://myproxy:8080\"}} flag tells Chrome to send all {{ic|http://}} and {{ic|https://}} URL requests through the SOCKS proxy server {{ic|\"myproxy:8080\"}}, using version 5 of the SOCKS protocol. The hostname for these URLs will be resolved by the proxy server, and not locally by Chrome.\n\n{{Note|Proxying of {{ic|ftp://}} URLs through a SOCKS proxy is not yet implemented[https://www.chromium.org/developers/design-documents/network-stack/socks-proxy].}}\n\nThe {{ic|--proxy-server}} flag applies to URL loads only. There are other components of Chrome which may issue DNS resolves directly and hence bypass this proxy server. The most notable such component is the \"DNS prefetcher\". Hence if DNS prefetching is not disabled in Chrome then you will still see local DNS requests being issued by Chrome despite having specified a SOCKS v5 proxy server. Disabling DNS prefetching would solve this problem, however it is a fragile solution since one needs to be aware of all the areas in Chrome which issue raw DNS requests. To address this, the next flag, {{ic|1=--host-resolver-rules=\"MAP * ~NOTFOUND , EXCLUDE myproxy\"}}, is a catch-all to prevent Chrome from sending any DNS requests over the network. It says that all DNS resolves are to be simply mapped to the (invalid) address {{ic|~NOTFOUND}} (think of it as {{ic|0.0.0.0}}). The {{ic|\"EXCLUDE\"}} clause make an exception for {{ic|\"myproxy\"}}, because otherwise Chrome would be unable to resolve the address of the SOCKS proxy server itself, and all requests would necessarily fail with {{ic|PROXY_CONNECTION_FAILED}}.\n\nTo prevent the [https://ipleak.net/#webrtcleak WebRTC leak] you can install the extension [https://chrome.google.com/webstore/detail/webrtc-network-limiter/npeicpdbkakmehahjeeohfdhnlpdklia WebRTC Network Limiter].\n\n{{Note|For [[Wikipedia:Electron_(software_framework)|Electron]] apps you do not need {{ic|--host-resolver-rules}}}}\n\n==== Debug ====\n\nThe first thing to check when debugging is look at the Proxy tab on about:net-internals, and verify what the effective proxy settings are: {{ic|chrome://net-internals/#proxy}}\n\nNext, take a look at the DNS tab of {{ic|about:net-internals}} to make sure Chrome is not issuing local DNS resolves: {{ic|chrome://net-internals/#dns}}\n\n==== Extension ====\n\nJust as with Firefox, you can setup a fast switch for example through [https://chrome.google.com/webstore/detail/dpplabbmogkhghncfbfdeeokoefdjegm Proxy SwitchySharp].\n\nOnce installed enter in its configuration page. Under the tab ''Proxy Profiles'' add a new profile ''Tor'', if ticked untick the option ''Use the same proxy server for all protocols'', then add ''localhost'' as SOCKS Host, ''9050'' to the respective port and select ''SOCKS v5''.\n\nOptionally you can enable the quick switch under the ''General'' tab to be able to switch between normal navigation and Tor network just by left-clicking on the Proxy SwitchySharp's icon.\n\n==== Electron ====\n\nSee [[#Chromium]]\n\n=== Luakit ===\n\n{{Note|It will not be hard for an observer to identify you by the rare user-agent string, and there may be further issues with Flash, JavaScript or similar.}}\n\nYou can simply run:\n\n $ torsocks luakit\n\n== HTTP proxy ==\n\nTor offers a builtin tunneled HTTP proxy and can also be used with an HTTP proxy like [[Privoxy]], however the Tor development team recommends using the SOCKS5 library since browsers directly support it.\n\n=== Tor ===\n\nAdd following line to your {{ic|torrc}} file to set port {{ic|8118}} on your {{ic|localhost}} as HTTP proxy:\n\n HTTPTunnelPort 127.0.0.1:8118\n\nRefer to [https://2019.www.torproject.org/docs/tor-manual.html.en#HTTPTunnelPort Tor manual] for further information.\n\n=== Firefox ===\n\nThe [https://addons.mozilla.org/firefox/addon/foxyproxy-standard/ FoxyProxy] add-on  allows you to specify multiple proxies for different URLs or for all your browsing. After restarting Firefox manually set Firefox to port {{ic|8118}} on {{ic|localhost}}, which is where [[Privoxy]] are running. These settings can be access under ''Add > Standard proxy type''. Select a proxy label (e.g Tor) and enter the port and host into the ''HTTP Proxy'' and ''SSL Proxy'' fields. To check if Tor is functioning properly visit the [https://check.torproject.org/ Tor Check] website and toggle Tor.\n\n=== Privoxy ===\n\nYou can also use this setup in other applications like messaging (e.g. [[Jabber]], [[IRC]]). Applications that support HTTP proxies you can connect to Privoxy (i.e. {{ic|127.0.0.1:8118}}). To use SOCKS proxy directly, you can point your application at Tor (i.e. {{ic|127.0.0.1:9050}}). A problem with this method though is that applications doing DNS resolves by themselves may leak information. Consider using Socks4A (e.g. with Privoxy) instead.\n\n== Instant messaging ==\n\nIn order to use an instant messaging client with tor, we do not need an HTTP proxy like [[privoxy]]. We will be using tor's daemon directly which listens to port 9050 by default.\n\n=== Pidgin ===\n\nYou can set up [[Pidgin]] to use Tor globally, or per account. To use Tor globally, go to ''Tools -> Preferences -> Proxy''. To use Tor for specific accounts, go to ''Accounts > Manage Accounts'', select the desired account, click Modify, then go to the Proxy tab. The proxy settings are as follows:\n\n Proxy type SOCKS5\n Host 127.0.0.1\n Port 9150\n\nNote that [https://trac.torproject.org/projects/tor/ticket/8135 some time in 2013] the Port has changed from 9050 to 9150 if you use the Tor Browser Bundle. Try the other value if you receive a \"Connection refused\" message.\n\n=== Irssi ===\n\n{{Out of date|{{ic|cap_sasl.pl}} is broken with ''perl'' 5.20; SSL does also not work with {{ic|torsocks}}}}\n\nLibera Chat recommends connecting to {{ic|.onion}} directly. It also requires SASL to identify to NickServ during connection; see [[Irssi#Authenticating with SASL]]. Start irssi:\n\n $ torsocks irssi\n\nSet your identification to nickserv, which will be read when connecting. Supported mechanisms are ECDSA-NIST256P-CHALLENGE (see [https://github.com/kaniini/ecdsatool/blob/master/example-for-cap_sasl.pl ecdsatool]) and PLAIN. DH-BLOWFISH [https://libera.chat/guides/sasl is not supported].\n\n /sasl set ''network'' ''username'' ''password'' ''mechanism''\n\nDisable CTCP and DCC and set a different hostname to prevent information disclosure: [https://encrypteverything.ca/IRC_Anonymity_Guide]\n\n /ignore * CTCPS\n /ignore * DCC\n /set hostname ''fake_host''\n\nConnect to Libera Chat:\n\n /connect -network ''network'' libera75jm6of4wxpxt4aynol3xjmbtxgfyjpu34ss4d7r7q2v5zrpyd.onion\n\nFor more information check [https://libera.chat/guides/connect#accessing-liberachat-via-tor Accessing Libera.Chat Via Tor], [https://libera.chat/guides/sasl Using SASL] or [https://trac.torproject.org/projects/tor/wiki/doc/TorifyHOWTO/IrcSilc IRC/SILC Wiki article].\n\n== Pacman ==\n\n[[Pacman]] download operations (repository databases, packages, and public keys) can be done using the Tor network.\n\nAdvantages:\n* Attackers that can monitor your Internet connection and that specifically targets your machine cannot watch the updates anymore and, because of that, they cannot deduce the packages you have installed, how up to date they are, when or how frequently you update them. An attacker can still learn what software and the versions you use by other means, for instance watching the packets from your HTTP server or probing the machine will show that you have an HTTP server installed and its version.\n* If the mirror is not an onion, a malicious exit nodes you are going through can watch the updates, and may decide to attack you, however they probably cannot know who they are attacking.\n* Attackers trying to make your machine believe that there are no new updates to prevent it from getting security fixes will have a harder time doing it since they cannot target your machine specifically.\n\nDisadvantages:\n* Longer update times due to longer latency and lower throughput. This can be a big security risk if/when the updates needs to be done as fast as possible, especially on machines directly connected to the Internet. That is the case when there is a huge security flaw, and that the flaws are fast to probe, easy to exploit, and that attackers have already started targeting as many systems as they can before the systems are updated.\n\nReliability with Tor:\n* You do not need a working DNS anymore.\n* You depend on the Tor network and the exit nodes not blocking the updates.\n* You depend on the Tor daemon to work properly. The Tor daemon may not work if there is no more disk space available to it. \"Reserved blocks gid:\" in ext4, quotas, or other means can fix that.\n* If you are in a country where Tor is blocked, or that there are almost or no Tor users at all, you should use bridges.\n\nNote on GPG:\nOn stock Arch, pacman only trust keys which are either signed by you (that can be done with {{ic|pacman-key --lsign-key}}) or signed by 3 of 5 Arch master keys. If a malicious exit node replaces packages with ones signed by its key, pacman will not let the user install the package.\n\n{{Note| This might not be true for other distributions derived from ARCH, for non-official repositories and for AUR}}\n\n{{hc|/etc/pacman.conf|2=\n...\nXferCommand = /usr/bin/curl --socks5-hostname localhost:9050 --location --continue-at - --fail --output %o %u\n...\n}}\n\n{{note|Due to work in progress for database signatures, you might get 404 for the signatures. Depending on your [[Pacman/Package signing#Configuring pacman]], it should be harmless.}}\n\n== Java ==\n\nOne can ensure a [https://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html java application proxies] run its connections through Tor by appending the following command line options:\n\n export JAVA_OPTIONS=\"$JAVA_OPTIONS -DsocksProxyHost=localhost -DsocksProxyPort=9050\"\n\n== Running a Tor server ==\n\nThe Tor network is reliant on people contributing bandwidth and setting up services. There are several ways to contribute to the network.\n\n=== Running a Tor bridge ===\n\nA Tor bridge is a Tor relay that is not listed in the public Tor directory, thus making it possible for people to connect to the Tor network when governments or ISPs block all public Tor relays. Visit https://bridges.torproject.org/ for more information and instructions on how to get bridge addresses.\n\nTo run a Tor bridge, make your {{ic|torrc}} configuration file be just these four lines (also see [https://2019.www.torproject.org/docs/bridges#RunningABridge Tor Project running a bridge]):\n\n SOCKSPort 0\n ORPort 443\n BridgeRelay 1\n ExitRelay 0\n\n=== Running a Tor relay ===\n\nThis means that your machine will act as an entry node or forwarding relay and, unlike a bridge, it will be listed in the public Tor directory. Your IP address will be publicly visible in the Tor directory but the relay will only forward to other relays or Tor exit nodes, not directly to the internet.\n\nTo run a Tor relay, add the following options to the {{ic|torrc}} configuration file, you should at least share 20KiB/s:\n\n Nickname ''tornickname''\n ORPort 9001                  # This TCP-Port has to be opened/forwarded in your Firewall\n BandwidthRate 20 KB          # Throttle traffic to 20KB/s\n BandwidthBurst 50 KB         # But allow bursts up to 50KB/s\n ExitRelay 0                  # Disallow exits from your relay\n\n=== Running a Tor exit node ===\n\nAny requests from a Tor user to the regular internet obviously need to exit the network somewhere, and exit nodes provide this vital service. To the accessed host, the request will appear as having originated from your machine. This means that running an exit node is generally considered more legally onerous than running other forms of Tor relays. Before becoming an exit relay, you may want to read [https://blog.torproject.org/tips-running-exit-node/ Tor Project - tips for running an exit node].\n\n==== Configuration ====\n\nUsing the {{ic|torrc}}, you can configure which services you wish to allow through your exit node.\n\nMake the relay an exit relay:\n\n ExitRelay 1\n\nAllow all traffic:\n\n ExitPolicy accept *:*\n\nAllow only IRC ports 6660-6667 but nothing else to exit from node:\n\n ExitPolicy accept *:6660-6667,reject *:*\n\nBy default, Tor will block certain ports. You can use the {{ic|torrc}} to override this, for example accepting NNTP: \n\n ExitPolicy accept *:119\n\n==== +100Mbps Exit Relay configuration example ====\n\nIf you run a fast exit relay (+100Mbps) with {{ic|ORPort 443}} and {{ic|DirPort 80}}, the following configuration changes might serve as inspiration to setup Tor alongside [[iptables]] firewall, [[Haveged]] to increase system entropy and [[pdnsd]] as DNS cache. It is important to ''first'' read [https://www.torproject.org/docs/tor-relay-debian.html.en#after Configuring a Tor relay on Debian/Ubuntu]. \n\n{{Note|See [[#Running Tor in a systemd-nspawn container with a virtual network interface]] for instructions to install Tor in a {{ic|systemd-nspawn}} container. [[Haveged]] should be installed on the container host.}}\n\n===== Tor =====\n\n====== Raise maximum number of open file descriptors ======\n\nTo handle more than 8192 connections {{ic|LimitNOFILE}} can be raised to 32768 as per [https://support.torproject.org/#packaged-tor Tor FAQ (Should I install Tor from my package manager, or build from source?)].\n\n{{hc|/etc/systemd/system/tor.service.d/increase-file-limits.conf|2=\n[Service]\nLimitNOFILE=32768\n}}\n\nTo successfully raise {{ic|nofile}} limit, you may also have to append the following:\n\n{{hc|/etc/security/limits.conf|\n...\ntor     soft    nofile    32768\ntor     hard    nofile    32768\n@tor    soft    nofile    32768\n@tor    hard    nofile    32768\n}}\n\nCheck if the {{ic|nofile}} (filedescriptor) limit is successfully raised with {{ic|ulimit -Hn}} as the tor user.\n\n====== Start tor.service as root to bind Tor to privileged ports ======\n\nTo bind Tor to privileged ports the service must be started as root. Please specify {{ic|User tor}} option in {{ic|/etc/tor/torrc}}.\n\n{{hc|/etc/systemd/system/tor.service.d/start-as-root.conf|2=\n[Service]\nUser=root\n}}\n\n====== Tor configuration ======\n\nTo listen on Port 80 and 443 the service need to be started as {{ic|root}} as described in [[#Start tor.service as root to bind Tor to privileged ports]].\nUse the {{ic|User tor}} option in {{ic|/etc/tor/torrc}} to properly reduce Tor\u2019s privileges.\n\n{{hc|/etc/tor/torrc|2=\nSOCKSPort 0                                       ## Pure relay configuration without local socks proxy\n\nLog notice stdout                                 ## Default Tor behavior\n\nControlPort 9051                                  ## For nyx connection\nCookieAuthentication 1                            ## For nyx connection\n\nORPort 443                                        ## Service must be started as root\n\nAddress $IP                                       ## IP or FQDN\nNickname $NICKNAME                                ## Nickname displayed in [https://metrics.torproject.org/rs.html Tor Relay Search]\n\nRelayBandwidthRate 500 Mbits                      ## bytes/KBytes/MBytes/GBytes/KBits/MBits/GBits\nRelayBandwidthBurst 1000 MBits                    ## bytes/KBytes/MBytes/GBytes/KBits/MBits/GBits\n\nContactInfo $E-MAIL                               ## [https://gitlab.torproject.org/tpo/community/relays/-/issues/18 Tor Relay good practices] suggests an email\n\nDirPort 80                                        ## Service must be started as root\nDirPortFrontPage /etc/tor/tor-exit-notice.html    ## Original: [https://gitweb.torproject.org/tor.git/plain/contrib/operator-tools/tor-exit-notice.html https://gitweb.torproject.org/tor.git/plain/contrib/operator-tools/tor-exit-notice.html]\n\nMyFamily $($KEYID),$($KEYID)...                   ## Remember $ in front of keyid(s) ;)\n\nExitPolicy reject XXX.XXX.XXX.XXX/XX:*            ## Block domain of public IP in addition to std. exit policy\n\nUser tor                                          ## Return to tor user after service started as root to listen on privileged ports\n\nDisableDebuggerAttachment 0                       ## For nyx connection\n\n### Performance related options ###\nAvoidDiskWrites 1                                 ## Reduce wear on SSD\nDisableAllSwap 1                                  ## Service must be started as root\nHardwareAccel 1                                   ## Look for OpenSSL hardware cryptographic support\nNumCPUs 2                                         ## Only start two threads\n}}\n\nThis configuration is based on the [https://2019.www.torproject.org/docs/tor-manual.html.en Tor Manual]. \n\nTor opens a socks proxy on port 9050 by default -- even if you do not configure one. Set {{ic|SOCKSPort 0}} if you plan to run Tor only as a relay, and not make any local application connections yourself.\n\n{{ic|Log notice stdout}} changes logging to stdout, which is also the Tor default.\n{{ic|ControlPort 9051}}, {{ic|CookieAuthentication 1}} and {{ic|DisableDebuggerAttachment 0}} enables {{Pkg|nyx}} to connect to Tor and display connections.\n\n{{ic|ORPort 443}} and {{ic|DirPort 80}} lets Tor listen on port 443 and 80 and {{ic|DirPortFrontPage}} displays the [https://gitweb.torproject.org/tor.git/plain/contrib/operator-tools/tor-exit-notice.html tor-exit-notice.html] on port 80.\n\n{{ic|ExitPolicy reject XXX.XXX.XXX.XXX/XX:*}} should reflect your public IP and netmask, which can be obtained with the command {{ic|ip addr}}, so exit connections cannot connect to the host or neighboring machines public IP and circumvent firewalls.\n\n{{ic|AvoidDiskWrites 1}} reduces disk writes and wear on SSD.\n{{ic|DisableAllSwap 1}} \"will attempt to lock all current and future memory pages, so that memory cannot be paged out\". \n\nIf {{ic|grep aes /proc/cpuinfo}} returns that your CPU supports AES instructions and {{ic|lsmod {{!}} grep aes}} returns that the module is loaded, you can specify {{ic|HardwareAccel 1}} which tries \"to use built-in (static) crypto hardware acceleration when available\", see [https://www.torservers.net/wiki/setup/server#aes-ni_crypto_acceleration https://www.torservers.net/wiki/setup/server#aes-ni_crypto_acceleration].\n\n{{ic|ORPort 443}}, {{ic|DirPort 80}} and {{ic|DisableAllSwap 1}} require that you start the Tor service as {{ic|root}} as described in [[#Start tor.service as root to bind Tor to privileged ports]].\nUse the {{ic|User tor}} option to properly reduce Tor\u2019s privileges.\n\n===== nyx =====\n\nIf {{ic|ControlPort 9051}} and {{ic|CookieAuthentication 1}} is specified in {{ic|/etc/tor/torrc}}, {{Pkg|nyx}} can be started as the tor user: \n\n [tor]$ nyx\n\nIf you want to watch Tor connections in {{Pkg|nyx}} {{ic|DisableDebuggerAttachment 0}} must also be specified.\n\nIf you want to run {{ic|nyx}} as a different user than {{ic|tor}}, read section [[#Set a Tor Control cookie file]]\n\n===== iptables =====\n\nSetup and learn to use [[iptables]]. Instead of being a [[Simple stateful firewall]] where connection tracking would have to track thousands of connections on a tor exit relay this firewall configuration is stateless.\n\n{{hc|/etc/iptables/iptables.rules|2=\n*raw\n-A PREROUTING -j NOTRACK\n-A OUTPUT -j NOTRACK\nCOMMIT\n\n*filter\n:INPUT DROP [0:0]\n:FORWARD DROP [0:0]\n:OUTPUT ACCEPT [0:0]\n-A INPUT -p tcp ! --syn -j ACCEPT\n-A INPUT -p udp -j ACCEPT\n-A INPUT -p icmp -j ACCEPT\n-A INPUT -p tcp --dport 443 -j ACCEPT\n-A INPUT -p tcp --dport 80 -j ACCEPT\n-A INPUT -i lo -j ACCEPT\nCOMMIT\n}}\n\n{{ic|-A PREROUTING -j NOTRACK}} and {{ic|-A OUTPUT -j NOTRACK}} disables connection tracking in the {{ic|raw}} table.\n\n{{ic|:INPUT DROP [0:0]}} is the default {{ic|INPUT}} target and drops input traffic we do not specifically {{ic|ACCEPT}}.\n\n{{ic|:FORWARD DROP [0:0]}} is the default {{ic|FORWARD}} target and only relevant if the host is a normal router, not  when the host is an onion router.\n\n{{ic|:OUTPUT ACCEPT [0:0]}} is the default {{ic|OUTPUT}} target and allows all outgoing connections.\n\n{{ic|-A INPUT -p tcp ! --syn -j ACCEPT}} allow already established incoming TCP connections per the rules below and TCP connections established from the exit node.\n\n{{ic|-A INPUT -p udp -j ACCEPT}} allow all incoming UDP connections because we do not use connection tracking.\n\n{{ic|-A INPUT -p icmp -j ACCEPT}} allow [[wikipedia:Internet_Control_Message_Protocol|ICMP]].\n\n{{ic|-A INPUT -p tcp --dport 443 -j ACCEPT}} allow incoming connections to the {{ic|ORPort}}.\n\n{{ic|-A INPUT -p tcp --dport 80 -j ACCEPT}} allow incoming connections to the {{ic|DirPort}}.\n\n{{ic|-A INPUT -i lo -j ACCEPT}} allows all connections on the loopback interface.\n\n===== Haveged =====\n\nSee [[Haveged]] to decide if your system generates enough entropy to handle a lot of OpenSSL connections, see [https://www.issihosts.com/haveged/ haveged - A simple entropy daemon] and [https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged how-to-setup-additional-entropy-for-cloud-servers-using-haveged] for documentation.\n\n===== pdnsd =====\n\n{{Warning|This configuration assumes your network DNS resolver is trusted (uncensored).}}\n\nYou can use [[pdnsd]] to cache DNS queries locally, so the exit relay can resolve DNS faster and the exit relay does not forward all DNS queries to an external DNS recursor.\n\n{{hc|/etc/pdnsd.conf|2=\n...\nperm_cache=102400                       ## (Default value)*100 = 1MB * 100 = 100MB\n...\nserver {\n    label= \"resolvconf\";\n    file = \"/etc/pdnsd-resolv.conf\";    ## Preferably do not use /etc/resolv.conf\n    timeout=4;                          ## Server timeout, this may be much shorter than the global timeout option.\n    uptest=query;                       ## Test availability using empty DNS queries. \n    query_test_name=\".\";                ## To be used if remote servers ignore empty queries.\n    interval=10m;                       ## Test every 10 minutes.\n    purge_cache=off;                    ## Ignore TTL.\n    edns_query=yes;                     ## Use EDNS for outgoing queries to allow UDP messages larger than 512 bytes. May cause trouble with some legacy systems.\n    preset=off;                         ## Assume server is down before uptest.\n }\n...\n}}\n\nThis configuration stub shows how to cache queries to your normal DNS recursor locally and increase pdnsd cache size to 100MB.\n\n====== Uncensored DNS ======\n\nIf your local DNS recursor is in some way censored or interferes with DNS queries, see [[Alternative DNS services]] for alternatives and add them in a separate server-section in {{ic|/etc/pdnsd.conf}} as per [[Pdnsd#DNS servers]].\n\n==== Ensuring relay is working ====\n\nFirst check that {{ic|tor.service}} started correctly either with the [[journal]] or by checking the [[unit status]]. \n\nIf there are no errors, one can run {{ic|nyx}} to ensure your relay is making connections. Do not be concerned if your [https://blog.torproject.org/lifecycle-new-relay new relay] is slow at first; this is normal. After approximately 3 hours, your relay should be published and searchable on [https://metrics.torproject.org/rs.html#search Relay Search].\n\n== TorDNS ==\n\nDNS queries can be performed through a command line interface by using {{Ic|1=tor-resolve}} For example:\n\n{{hc|$ tor-resolve archlinux.org|\n66.211.214.131\n}}\n\nThe Tor 0.2.x series also provides a built-in DNS forwarder. To enable it add the following lines to the Tor configuration file and restart the daemon:\n\n{{hc|/etc/tor/torrc|\nDNSPort 9053\nAutomapHostsOnResolve 1\nAutomapHostsSuffixes .exit,.onion\n}}\n\nThis will allow Tor to accept DNS requests (listening on port 9053 in this example) like a regular DNS server, and resolve the domain via the Tor network.\n\nA downside of both methods is that they are only able to resolve DNS queries for A, AAAA and PTR records; MX and NS queries are never answered. For more information see this [https://techstdout.boum.org/TorDns/ Debian-based introduction].\n\n=== Using TorDNS systemwide ===\n\nIt is possible to configure your system, if so desired, to use TorDNS for any A, AAAA and PTR  queries your system makes, regardless of whether or not you eventually use Tor to connect to your final destination. To do this, configure your system to use 127.0.0.1 as its DNS server and edit the {{ic|DNSPort}} line in {{ic|/etc/tor/torrc}} to show:\n\n DNSPort 53\n\nAlternatively, you can use a local caching DNS server, such as [[dnsmasq]] or [[pdnsd]], which will also compensate for TorDNS being a little slower than traditional DNS servers. The following instructions will show how to set up ''dnsmasq'' for this purpose. Note, if you are using ''NetworkManager'' you will need to add your configuration file to the location outlined in [[NetworkManager#dnsmasq]].\n\nChange the tor setting to listen for the DNS request in port 9053 and install {{Pkg|dnsmasq}}.\n\nModify its configuration file so that it contains:\n\n{{hc|/etc/dnsmasq.conf|2=\nno-resolv\nport=53\nserver=127.0.0.1#9053\nlisten-address=127.0.0.1\n}}\n\nThese configurations set dnsmasq to listen only for requests from the local computer, and to use TorDNS at its sole upstream provider. It is now necessary to edit {{ic|/etc/resolv.conf}} so that your system will query only the dnsmasq server.\n\n{{hc|/etc/resolv.conf|\nnameserver 127.0.0.1\n}}\n\nStart the '''dnsmasq''' daemon.\n\nFinally if you use [[dhcpcd]] you would need to change its settings to that it does not alter the resolv configuration file. Just add this line in the configuration file:\n\n{{hc|/etc/dhcpcd.conf|\nnohook resolv.conf\n}}\n\nIf you already have an {{ic|nohook}} line, just add {{ic|resolv.conf}} separated with a comma.\n\n== Torsocks ==\n\n{{pkg|torsocks}} will allow you use an application via the Tor network without the need to make configuration changes to the application involved. From {{man|1|torsocks}}:\n\n''torsocks is a wrapper between the torsocks library and the application in order to make every Internet communication go through the Tor network.''\n\nNote the wrapper deliberately, and verbosely, fail for some system calls. So some applications will not fully work with it. See [https://stackoverflow.com/questions/46634215/torsocks-and-unsupported-syscalls torsocks-and-unsupported-syscalls]. \n\nUsage example:\n\n $ torsocks elinks checkip.dyndns.org\n $ torsocks wget -qO- https://check.torproject.org/ | grep -i congratulations\n\n== Transparent Torification ==\n\nIn some cases it is more secure and often easier to transparently torify an entire system instead of configuring individual applications to use Tor's socks port, not to mention preventing DNS leaks. Transparent torification can be done with [[iptables]] in such a way that all outbound packets are redirected through Tor's ''TransPort'', except the Tor traffic itself. Once in place, applications do not need to be configured to use Tor, though Tor's ''SOCKSPort'' will still work. This also works for DNS via Tor's ''DNSPort'', but realize that Tor only supports TCP, thus UDP packets other than DNS cannot be sent through Tor and therefore must be blocked entirely to prevent leaks. Using iptables to transparently torify a system affords comparatively strong leak protection, but it is not a substitute for virtualized torification applications such as Whonix, or TorVM [https://www.whonix.org/wiki/Comparison_with_Others]. Transparent torification also will not protect against fingerprinting attacks on its own, so it is recommended to use an amnesic solution like [https://tails.boum.org/ Tails] instead. Applications can still learn your computer's hostname, MAC address, serial number, timezone, etc. and those with root privileges can disable the firewall entirely. In other words, transparent torification with iptables protects against accidental connections and DNS leaks by misconfigured software, it is not sufficient to protect against malware or software with serious security vulnerabilities.\n\nWhen a transparent proxy is used, it is possible to start a Tor session from the client as well as from the transparent proxy, creating a \"Tor over Tor\" scenario.\nDoing so produces undefined and potentially unsafe behavior. In theory, the user could get six hops instead of three in the Tor network. However, it is not guaranteed that the three additional hops received are different; the user could end up with the same hops, possibly in reverse or mixed order. \nThe Tor Project opinion is that this is unsafe [https://2019.www.torproject.org/docs/faq.html.en#ChoosePathLength]\n[https://trac.torproject.org/projects/tor/wiki/doc/TorifyHOWTO#ToroverTor]\n\nTo enable transparent torification, use the following file for {{ic|iptables-restore}} and {{ic|ip6tables-restore}} (internally used by [[systemd]]'s {{ic|iptables.service}} and {{ic|ip6tables.service}}).\n\n{{Note|This file uses the NAT table to force outgoing connections through the TransPort or DNSPort, and blocks anything it cannot torrify.\n\n* Now using {{ic|--ipv6}} and {{ic|--ipv4}} for protocol specific changes. {{ic|iptables-restore}} and {{ic|ip6tables-restore}} can now use the same file.\n* Where --ipv6 or --ipv4 is explicitly defined, {{ic|ip*tables-restore}} will ignore the rule if it is not for the correct protocol.\n* {{ic|ip6tables}} does not support {{ic|--reject-with}}. Make sure your torrc contains the following lines:\n\n SOCKSPort 9050\n DNSPort 5353\n TransPort 9040\n\nSee {{man|8|iptables}}.\n}}\n\n{{Note|If you get this error: {{ic|iptables-restore: unable to initialize table 'nat'}}, you have to load the appropriate kernel modules:\n\n # modprobe ip_tables iptable_nat ip_conntrack iptable-filter ipt_state\n\n}}\n\n{{hc|/etc/iptables/iptables.rules|\n*nat\n:PREROUTING ACCEPT [6:2126]\n:INPUT ACCEPT [0:0]\n:OUTPUT ACCEPT [17:6239]\n:POSTROUTING ACCEPT [6:408]\n\n-A PREROUTING &#33; -i lo -p udp -m udp --dport 53 -j REDIRECT --to-ports 5353\n-A PREROUTING &#33; -i lo -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040\n-A OUTPUT -o lo -j RETURN\n--ipv4 -A OUTPUT -d 192.168.0.0/16 -j RETURN\n-A OUTPUT -m owner --uid-owner \"tor\" -j RETURN\n-A OUTPUT -p udp -m udp --dport 53 -j REDIRECT --to-ports 5353\n-A OUTPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040\nCOMMIT\n\n*filter\n:INPUT DROP [0:0]\n:FORWARD DROP [0:0]\n:OUTPUT DROP [0:0]\n\n-A INPUT -i lo -j ACCEPT\n-A INPUT -p icmp -j ACCEPT\n-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT\n--ipv4 -A INPUT -p tcp -j REJECT --reject-with tcp-reset\n--ipv4 -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable\n--ipv4 -A INPUT -j REJECT --reject-with icmp-proto-unreachable\n--ipv6 -A INPUT -j REJECT\n--ipv4 -A OUTPUT -d 127.0.0.0/8 -j ACCEPT\n--ipv4 -A OUTPUT -d 192.168.0.0/16 -j ACCEPT\n--ipv6 -A OUTPUT -d&#32;::1/8 -j ACCEPT\n-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT\n-A OUTPUT -m owner --uid-owner \"tor\" -j ACCEPT\n--ipv4 -A OUTPUT -j REJECT --reject-with icmp-port-unreachable\n--ipv6 -A OUTPUT -j REJECT\nCOMMIT\n}}\n\nThis file also works for ip6tables-restore, so you may symlink it:\n\n # ln -s /etc/iptables/iptables.rules /etc/iptables/ip6tables.rules\n\nThen make sure Tor is running, and [[start/enable]] the {{ic|iptables}} and {{ic|ip6tables}} systemd units.\n\nYou may want to add {{ic|1=Requires=iptables.service}} and {{ic|1=Requires=ip6tables.service}} to whatever systemd unit logs your user in (most likely a [[display manager]]), to prevent any user processes from being started before the firewall up. See [[systemd]].\n\n== Tips and tricks ==\n\n=== Kernel capabilities ===\n\nIf you want to run tor as a non-root user, and use a port lower than 1024 you can use kernel capabilities to allow {{ic|/usr/bin/tor}} to bind to ports lower than 1024:\n\n # setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/tor\n\n{{Note|Any upgrade to the tor package will reset the permissions, consider using [[pacman#Hooks]], to automatically set the permissions after upgrades.}}\n\nIf you use the systemd service, it is also possible to use systemd to give the tor process the appropriate permissions. This has the benefit that permissions do not need to be reapplied after every tor upgrade:\n\n{{hc|/etc/systemd/system/tor.service.d/netcap.conf|2=\n[Service]\nCapabilityBoundingSet=\nCapabilityBoundingSet=CAP_NET_BIND_SERVICE\nAmbientCapabilities=\nAmbientCapabilities=CAP_NET_BIND_SERVICE\n}}\n\nRefer to [https://superuser.com/questions/710253/allow-non-root-process-to-bind-to-port-80-and-443 superuser.com] for further explanations.\n\n== Troubleshooting ==\n\n=== Problem with user value ===\n\nIf the '''tor''' daemon failed to start, then run the following command as root (or use [[sudo]])\n\n # tor\n\nIf you get the following error\n\n May 23 00:27:24.624 [warn] Error setting groups to gid 43: \"Operation not permitted\".\n May 23 00:27:24.624 [warn] If you set the \"User\" option, you must start Tor as root.\n May 23 00:27:24.624 [warn] Failed to parse/validate config: Problem with User value. See logs for details.\n May 23 00:27:24.624 [err] Reading config failed--see warnings above.\n\nThen it means that the problem is with the User value, which likely means that one or more files or directories in your {{ic|/var/lib/tor}} directory is not owned by tor. This can be determined by using the following find command:\n\n # find /var/lib/tor/ '!' -user tor\n\nAny files or directories listed in the output from this command needs to have its ownership changed. This can be done individually for each file like so:\n\n # chown tor:tor /var/lib/tor/''filename''\n\nOr to change everything listed by the above find example, modify the command to this:\n\n # chown -R -v tor:tor /var/lib/tor\n\nTor should now start up correctly.\n\nStill if you cannot start the tor service, run the service using root (this will switch back to the tor user). To do this, change the user name in the {{ic|/etc/tor/torrc}} file:\n\n User tor\n\nNow [[edit]] {{ic|tor.service}} as follows\n\n [Service]\n User=root\n Group=root\n Type=simple\n\nThe process will be run as tor user. For this purpose change user and group ID to tor and also make it writable:\n\n # chown -R tor:tor /var/lib/tor/\n # chmod -R 700 /var/lib/tor\n\nNow do a [[daemon-reload]] then [[start]] {{ic|tor.service}}.\n\n=== tor-browser proxy problems ===\n\n{{AUR|tor-browser-bin}} should generally work without significant customization. If previously installed/configured and bundled proxy fails with {{ic|proxy server is refusing connections}} for any website, consider resetting settings by moving or deleting {{ic|~/.tor-browser}} directory.\n\n=== tor-browser blank black screen ===\n\nIf using [[AppArmor]], update the torbrowser profile to allow access to required resources [https://unix.stackexchange.com/questions/550074/debian-tor-browser-showing-a-black-screen/550246#550246], [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=942901]:\n\n{{hc|head= /etc/apparmor.d/local/torbrowser.Browser.firefox|output=\nowner /{dev,run}/shm/org.mozilla.*.* rw,\n}}\n\n== See also ==\n\n* [https://www.torproject.org/docs/tor-doc-unix.html.en Running the Tor client on Linux/BSD/Unix]\n* [https://trac.torproject.org/projects/tor/wiki#Unixish Unix-based Tor Articles]\n* [https://trac.torproject.org/projects/tor/wiki/doc/SupportPrograms Software commonly integrated with Tor]\n* [https://www.torproject.org/docs/tor-hidden-service.html.en How to set up a Tor ''Hidden Service'']\n* [https://trac.torproject.org/projects/tor/wiki/doc/PluggableTransports List of tor pluggable transports for obfuscating tor's traffic]\n* [https://gitlab.torproject.org/tpo/community/relays/-/issues/18 Tor Relay Operator best practices]"
                    }
                ]
            },
            "3158": {
                "pageid": 3158,
                "ns": 0,
                "title": "Bon Echo",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "#REDIRECT [[Firefox]]"
                    }
                ]
            },
            "3402": {
                "pageid": 3402,
                "ns": 0,
                "title": "Professional audio",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Sound]]\n[[fr:Professional audio]]\n[[ja:\u30d7\u30ed\u30d5\u30a7\u30c3\u30b7\u30e7\u30ca\u30eb\u30aa\u30fc\u30c7\u30a3\u30aa]]\n[[ru:Professional audio]]\n[[zh-hans:\u4e13\u4e1a\u97f3\u9891]]\n{{Related articles start}}\n{{Related|/Examples}}\n{{Related|/Development}}\n{{Related|/Hardware}}\n{{Related|Sound system}}\n{{Related|JACK}}\n{{Related|Realtime kernel}}\n{{Related|envy24control}}\n{{Related articles end}}\n\nThis article describes how to configure your system for [[Wikipedia:Multitrack recording#With computers|recording]], mixing and playing back audio as well as using it to synthesize and generate sounds. Those activities are subsumed under the term [[Wikipedia:Professional audio|professional audio]] (pro audio) and typically require low [[Wikipedia:Latency (audio)|latency]] performance.\n\nMost applications do not need as much high-end hardware, compared to video production or gaming. Almost any computer produced since late 2012 can be optimized for pro audio. Please refer to Ardour manual's page on [https://manual.ardour.org/setting-up-your-system/the-right-computer-system-for-digital-audio/ The Right Computer System for Digital Audio] for more information.\n\n{{Note|If you are looking for a guide on how to actually make music on GNU/Linux, search the [https://linuxmusicians.com LinuxMusicians] forums.}}\n\n== Getting started ==\n\nAfter reading the [[Sound system]] article, you might be aware that [[Advanced Linux Sound Architecture]] or ALSA is part of the Linux kernel and used for [[Sound system#Drivers and interface|drivers and interface]] on Arch Linux as the default Sound system. ALSA should work out of the box with a default Arch installation. If this is not the case, you must solve the problem before going any further.\n\nHowever, \"no sound\" is likely a simple [[Advanced Linux Sound Architecture#Unmuting the channels|unmuting the channels]] problem in ALSA's mixer configuration. If you are using multiple audio devices (e.g. a USB audio interface and keep in mind integrated soundcards), you would want to [[Advanced Linux Sound Architecture#Set the default sound card|set the default sound card]].\n\n'''Have I set up sound properly?'''\n\n $ speaker-test\n\n: See [[ALSA]] for troubleshooting.\n\nA vanilla Arch Linux kernel is sufficient for low latency operation in most use cases. Applying further [[#System configuration]] will be necessary only if you are experiencing audio drop-outs (also known as glitches) or if you need (or want) to reach ultra-low latency operations.\n\nTo finish with optimizations, these ultra low latency operations may require you to set up a [[#Realtime kernel]].\n\nAlthough some pro audio software can work with ALSA directly, most of the [[#Applications]] mentioned later are JACK Audio Connection Kit or [[JACK]] clients. Therefore, you will need to install and setup one of the available [[sound server]]s which are outlined soon.\n\n{{Tip|However, if you are new to Arch Linux, just finished the [[Installation guide]] and cannot wait to actually start making music, [[install]] the {{Grp|pro-audio}} [[package group]] as well as {{AUR|realtime-generic-setup}} and reboot. Refer to the [[#PipeWire-only]] section for a quick setup and find your [[#Applications]] for music and sound production.}}\n\n== System configuration ==\n\n{{Note| The quality of information on best practices and system configuration vary a great deal (and are outdated or sometimes even contradictory in many locations). While for some systems and setups a higher level of optimization is necessary, for most users this will not be the case. Try a standard setup with the vanilla Arch Linux kernel first. Only if you require a setup with lower latency and greater stability, start considering optimizations!}}\n\nYou may want to consider the following often seen system optimizations:\n\n* Setting the [[CPU frequency scaling]] governor to ''performance''.\n* [[Realtime process management#Configuring PAM|Configuring pam_limits]] (e.g. by installing {{pkg|realtime-privileges}} and adding your user to the {{ic|realtime}} group).\n* Using the {{ic|threadirqs}} [[kernel parameter]] (consult [https://docs.kernel.org/admin-guide/kernel-parameters.html] for reference) - enforced by default by the [[realtime kernel patchset]].\n* Using the [[realtime kernel patchset]].\n* Add {{ic|noatime}} to [[fstab]] (see [[Improving performance#Mount options]]).\n* Increasing the highest requested RTC interrupt frequency (default is 64 Hz) by [[systemd FAQ#How can I make a script start during the boot process?|running the following at boot]]:\n\n # echo 2048 > /sys/class/rtc/rtc0/max_user_freq\n # echo 2048 > /proc/sys/dev/hpet/max-user-freq\n\n* Reducing ''swappiness'' (aka swap frequency, set to {{ic|60}} by default) to e.g. {{ic|10}} will make the system wait much longer before trying to swap to disk (see [[wikipedia:Paging#Swappiness]]). This can be done on the fly with {{ic|1=sysctl vm.swappiness=10}} (see {{man|8|sysctl}}) or setup permanently, using a configuration file (see {{man|5|sysctl.d}}) such as:\n\n{{hc|/etc/sysctl.d/90-swappiness.conf|2=\nvm.swappiness = 10\n}}\n\n* Increasing the maximum watches on files (defaults to {{ic|524288}}) to e.g. {{ic|600000}}, that ''inotify'' keeps track of for your user, can help with applications, that require many file handles (such as [[List of applications/Multimedia#Digital audio workstations|DAWs]]). This again can be done on the fly with {{ic|1=sysctl fs.inotify.max_user_watches=600000}} or in a dedicated configuration file:\n\n{{hc|/etc/sysctl.d/90-max_user_watches.conf|2=\nfs.inotify.max_user_watches = 600000\n}}\n\nYou may also want to maximize the PCI latency timer of the PCI sound card and raise the latency timer of all other PCI peripherals (default is 64).\n\n $ setpci -v -d *:* latency_timer='''b0'''\n # setpci -v -s ''$SOUND_CARD_PCI_ID'' latency_timer='''ff'''\n\nE.g. {{ic|1=SOUND_CARD_PCI_ID=03:00.0}}.\n\nThe SOUND_CARD_PCI_ID can be obtained like so:\n\n{{hc|$ lspci {{!}} grep -i audio|\n'''03:00.0''' Multimedia audio controller: Creative Labs SB Audigy (rev 03)\n'''03:01.0''' Multimedia audio controller: VIA Technologies Inc. VT1720/24 [Envy24PT/HT] PCI Multi-Channel Audio Controller (rev 01)\n}}\n\n== Choosing a sound server ==\n\nSound hardware cannot play back sound from more than one application simultaneously. While ALSA can theoretically be configured to mix applications in software this is typically left to a [[sound server]]. As ALSA alone cannot achieve low latencies easily and cannot synchronise multiple audio applications to play on time, starting all at the same time, at the same tempo, etc, and as it can not share audio flux between applications simply by connecting all it's clients together, you not only need any sound server, but pro audio class one.\n\nThere are three of them, two meant for pro-audio:\n\n* [[PulseAudio]] is one of the standard server for playback and multimedia, such as videos, browser, music and games. It was not conceived for pro-audio and lacks the capability to achieve low latencies and sync applications.\n* [[JACK]] has been developed with all the needs of pro audio and has been in use all over the world for many years and is therefore very stable and mature. Pro-Audio applications are written for the JACK API.\n* [[PipeWire]] is a replacement of JACK and PulseAudio at the same time for the audio part. It should be considered as a good candidate for a daily use and not \"so professional audio\" use cases. It also handles video routing, which is not described in this article.\n\nThe sound server setup strongly depends on the use case as well as on the workflow and capabilities of some application interaction. The [[JACK Audio Connection Kit]] was designed to share audio between applications and access an audio device simultaneously by providing the synchronous execution of clients while maintaining constant low latency. Its PipeWire replacement provides a sufficient server for most of the use cases.\n\nThis layout illustrates a layer model of the sound server setups to be discussed:\n\n{{Text art|<nowiki>\n </nowiki>[[#PipeWire-only]]<nowiki>   </nowiki>[[#PipeWire-as-JACK-Client]]<nowiki>   </nowiki>[[#JACK-only]]<nowiki>\n\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 Applications \u2502    \u2502 Applications \u2502    \u2502 Applications \u2502\n \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524    \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524    \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502   PipeWire   \u2502    \u2502 PipeWire+JACK\u2502    \u2502     JACK     \u2502\n \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524    \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524    \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n \u2502     ALSA     \u2502    \u2502     ALSA     \u2502    \u2502     ALSA     \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n</nowiki>}}\n\n=== PipeWire-only ===\n\nThe newer [[PipeWire]] framework replaces JACK as well as other sound servers for the sake of simplicity. Thus, it's recommended to first go for a ''PipeWire-only'' setup implementing support for [[PipeWire#JACK clients|JACK clients]] by installing {{Pkg|pipewire-jack}} and using the vanilla Arch Linux kernel.\n\nFor Pro Audio use, you also have to select the [[PipeWire#Profiles|Pro Audio profile]] installing and using {{Pkg|pavucontrol}}, PulseAudio's mixer. Follow the link and read the PipeWire's page.\n\n=== PipeWire-as-JACK-Client ===\n\n[[PipeWire]] can also be used as a JACK client by installing {{Pkg|pipewire-jack-client}}. This is explained in [[PipeWire#Run PipeWire on top of native JACK|PipeWire]]'s page.\n\n=== JACK-only ===\n\nThe principle of [[Arch Linux#Versatility|versatility]] allows you to employ JACK and the [[#Realtime kernel]] with further [[#System configuration]] to achieve low latencies for advanced use cases known as ''JACK-only'' setup. Using JACK as the only sound server requires any software, that is intended for interaction and audio device access, to run as a JACK client.\n\nUnfortunately, popular desktop applications such as [[Firefox]] or most games either dropped JACK support or never implemented it. For that reason this setup should be used for a dedicated pro audio system where non-JACK software can be neglected. If you still need to use software that can't connect to JACK, refer to [[Professional audio/Examples#Advanced sound server setups]] after following the setup described here. Before installing and running JACK you should ensure it can access your audio device.\n\n'''Is PulseAudio or something else grabbing my device?'''\n\n $ lsof +c 0 /dev/snd/pcm* /dev/dsp*\n\nor\n\n $ fuser -fv /dev/snd/pcm* /dev/dsp*\n\nIf your audio device isn't listed, it may be used by PulseAudio (which was probably installed as dependency of another application). Remove those alongside PulseAudio, if you're not intending to use [[Professional audio/Examples#PulseAudio+JACK]] in order to make PulseAudio release your audio device.\n\nAs JACK version 1 is planned to be \"slowly phased out\" [https://github.com/jackaudio/jackaudio.github.com/wiki/Differences-between-jack1-and-jack2#which-one-should-i-choose], doesn't support [[Wikipedia:Symmetric_multiprocessing|Symmetric Multiprocessing (SMP)]], lacks [[D-Bus]] and [[Systemd]] integration you'd want to use version 2 which is available as {{Pkg|jack2}} package in the official repositories. If you're going to use a [[JACK Audio Connection Kit#Comparison of JACK control GUIs|JACK control GUI]] or a [[Systemd/User|Systemd user service]] for [[JACK Audio Connection Kit#Starting the audio graph|Starting the audio graph]], also install {{Pkg|jack2-dbus}}.\n\n: ''More details in [[JACK Audio Connection Kit#Comparison of JACK implementations]]''\n\nThe article on JACK describes a [[JACK Audio Connection Kit#A GUI-based example setup|GUI-based]] and a [[JACK Audio Connection Kit#A shell-based example setup|shell-based]] example setup as a point of reference for your own scenario. Parameter values of JACK are discussed in detail in the [[#JACK parameters]] section and may depend on other system factors covered by the [[#System configuration]] section above.\n\n== JACK parameters ==\n\n{{Note|The following guidelines should support finding best possible parameter values for running JACK without audio drop-outs ([https://alsa.opensrc.org/Xruns xruns]) when using the [[#JACK-only]] or [[/Examples#PulseAudio+JACK]] sound server setup type. Due to differences depending on the hardware, whether a [[#Realtime kernel]] is used or not, and if further [[#System configuration]] is applied, there is no general preset.}}\n\nThe aim here is to find the best possible combination of buffer size and periods, given the hardware you have. '''Frames/Period = 256''' is a sane starter. For onboard and USB devices, try '''Periods/Buffer = 3''' before lowering both values. Commonly used values are: 256/3, 256/2, 128/3, 128/2.\n\nAlso, the sample rate must match the hardware sample rate. To check what sample and bit rates your device supports:\n\n $ cat /proc/asound/card0/codec#0\n\nReplace ''card0'' and ''codec#0'' depending on what you have. You will be looking for '''rates''' or ''VRA'' in '''Extended ID'''. A common sample rate across many of today's devices is '''48000 Hz'''. Others common rates include 44100 Hz, 96000 Hz and 192000 Hz.\n\nAlmost always, when recording or sequencing with external gear is concerned, '''realtime''' is a must. Also, you may like to set maximum priority (at least 10 lower than system limits defined in {{ic|/etc/security/limits.d/99-realtime-privileges.conf}}; the highest is for the device itself).\n\nStart jack with the options you just found out:\n\n $ /usr/bin/jackd -R -P89 -dalsa -dhw:0 -r48000 -p128 -n2\n\n{{Pkg|qjackctl}}, {{AUR|cadence}}, {{AUR|patchage}} and {{AUR|studio-controls-git}} can all be used to as GUIs to monitor JACK's status and simplify its configuration.\n\n{{Note|Once you set up JACK, try different audio applications to test your configuration results. For example, do not spend days trying to troubleshoot JACK xrun issues with [[LMMS]] if the problem is with the latter.}}\n\n: ''Further reading: [https://www.linux-magazine.com/content/download/63041/486886/version/1/file/JACK_Audio_Server.pdf Linux Magazine article (2006)] for basic understanding on JACK parameter finding''\n\n== Latency verification ==\n\nJACK parameters are most significant for controlling the [[Wikipedia:Round-trip_delay|round-trip delay]] (RTD). In the context of this article that is the overall time it takes for an audio signal to be recorded, processed and played back. The next subsection deals with theoretical background on the sources of latency adding up to the RTD. If you are already familiar with that, you can go to [[#Measuring latency]] to verify your RTD or skip this section completely.\n\n=== Latency sources ===\n\nConsider a typical recording situation of a singer performance. The voice is being captured with a microphone as it propagates trough the air with the [[Wikipedia:Speed_of_sound|speed of sound]]. An [[Wikipedia:Analog-to-digital_conversion|analog-to-digital-conversion]] enables the electrical signal to be recorded by a computer for [[Wikipedia:Digital_signal_processing|digital signal processing]]. Finally, a [[Wikipedia:Digital-to-analog_conversion|digital-to-analog conversion]] returns the signal to be played back at the singer's headphones for monitoring similar to [[Wikipedia:Stage_monitor_system|stage monitor system]] usage.\n\nIn that voice recording situation there are five significant [https://wiki.linuxaudio.org/wiki/jack_latency_tests#latency_sources latency sources] constructing the RTD and occuring in the following order:\n# Sound propagation through the air from the mouth of the singer\n# Analog-to-digital conversion\n# Digital signal processing\n# Digital-to-analog conversion\n# Sound propagation through the air to the ear of the singer\n\nThe first and last latency source is hard to change as a particular distance is technically necessary to create an intended sound during recording or playback, respectively. Additionally, when using closer miking for capturing and headphones for monitoring both sound propagation latencies are typically within the range of a few microseconds which is not noticeable by humans. Thus, an objective for RTD minimization is to reduce the other sources of latency.\n\n=== Conversion latency ===\n\nIn theory JACK maintains a constant low latency by using fixed values (frames, periods, sample rate) for [[Wikipedia:Sampling_(signal_processing)|sampling]] and [[Wikipedia:Buffer_(telecommunication)|buffering]] of audio to be converted analog-to-digital and vice versa. The latency occurring in the capturing process is described by the following equation:\n\n: '''Lc = n / f'''\n\n'''Lc''': Capture latency in milliseconds (ms), '''n''': Frames or buffer (multiples of 2, starting at 16), '''f''': Sample rate in Hertz (Hz).\n\nThe playback latency is also employing the periods value:\n\n: '''Lp = n * p / f'''\n\n'''Lp''': Playback latency in milliseconds (ms), '''n''': Frames or buffer (multiples of 2, starting at 16), '''p''': Periods, '''f''': Sample rate in Hertz (Hz).\n\nAs already stated before the capabilities of the audio interface define working combinations. You have to trial and error to find a setup. Sure, it's a trade-off between xrun prevention and achieving low latency, but recent audio interfaces can be used at high sample rates (up to 192 kHz) to deal with that requirement. The audio flux of JACK clients in the digital domain is about zero and thus, negligible for latency measurements [https://man.archlinux.org/man/jackd.1].\n\n: See [https://www.alsa-project.org/main/index.php/FramesPeriods FramesPeriods] in the ALSA wiki for more information.\n\n=== Measuring latency ===\n\nOnce you have set up [[#JACK parameters]] you might want to verify the RTD described above. For example, using a frames or buffer size of '''n = 128''', a periods value of '''p = 2''', and a sample rate of '''f = 48000''' results in a capture latency of about '''Lc = 2,666... ms''' and a playback latency of about '''Lp = 5,333... ms''' summing up to a total round-trip delay of '''RTD = 8 ms'''.\n\n{{Note|This latency value is comparable to a typical monitoring situation on stage using speakers with a distance to the performer's ear ranging between 2 m and 3 m according to the equation for the [[Wikipedia:Speed_of_sound#Speed_of_sound_in_ideal_gases_and_air|speed of sound in air]]. Performers experienced with on stage monitoring are typically used to such latencies.}}\n\nThe {{Pkg|jack_delay}} utility by Fons Adriaensen measures RTD by emitting test tones out a playback channel and capturing them again at a capture channel for measuring the phase differences to estimate the round-trip time the signal has taken through the whole chain. Use an appropriate cable to connect an input and output channel of your audio device or put a speaker close to a microphone as described by [https://wiki.linuxaudio.org/wiki/jack_latency_tests#measuring_roundtrip_latency_with_jack_delay JACK Latency tests].\n\nFor example, running {{ic|jack_delay}} for a JACK-only setup using a cable connection between the ports '''playback_1''' and '''capture_1''' (the description may differ depending on your hardware) to close the loop, as well as the values discussed before yields the following insights:\n\n{{hc|$ jack_delay -O system:playback_1 -I system:capture_1|2=\ncapture latency  = 128\nplayback_latency = 256\nSignal below threshold...\nSignal below threshold...\nSignal below threshold...\n  422.507 frames      8.802 ms total roundtrip latency\n       extra loopback latency: 38 frames\n       use 19 for the backend arguments -I and -O\n  422.507 frames      8.802 ms total roundtrip latency\n       extra loopback latency: 38 frames\n       use 19 for the backend arguments -I and -O\n  422.506 frames      8.802 ms total roundtrip latency\n       extra loopback latency: 38 frames\n       use 19 for the backend arguments -I and -O\n  422.507 frames      8.802 ms total roundtrip latency\n       extra loopback latency: 38 frames\n       use 19 for the backend arguments -I and -O\n<output omitted>}}\n\nAs the output indicates further optimization of JACK can be done by using the parameters {{ic|-I 19}} and {{ic|-O 19}} to compensate for the reported extra loopback latency in the chain:\n\n $ /usr/bin/jackd -R -P89 -dalsa -dhw:0 -r48000 -p128 -n2 -I19 -O19\n\n: ''More details can be found in the Ardour Manual page about [https://manual.ardour.org/synchronization/latency-and-latency-compensation/ latency and latency compensation].''\n\n== Realtime kernel ==\n\n\"[[Wikipedia:Real-time|Realtime]]\" in the context of an operating system is [https://www.iso.org/obp/ui/#iso:std:iso-iec:2382:ed-1:v1:en defined] that the results of a computation are available within a fixed period of time. Only in a broader sense does it mean \"time running simultaneously with reality\", for example, that a sound is produced immediately in response to musical user input. The latter is called \"low latency\" and it's setup is one of the main goals of this articles.\n\nSince a while ago, the stock Linux kernel (with {{ic|1=CONFIG_PREEMPT=y}}, [https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/blob/main/config default] in Arch Linux vanilla kernel) has proven to be adequate for low latency operation. Latency in an operating system context is the time between the moment an interrupt occurs in hardware, and the moment the corresponding interrupt-thread gets running. Unfortunately, some device drivers can introduce higher latencies. So depending on your hardware, drivers, and requirements, you might want a kernel with [[Wikipedia:Real-time_computing#Criteria_for_real-time_computing|hard realtime]] capabilities.\n\n=== Pros and cons ===\n\nThe [https://wiki.linuxfoundation.org/realtime/documentation/technical_details/start RT_PREEMPT] patch by Ingo Molnar and Thomas Gleixner is an interesting option for hard and firm realtime applications, reaching from professional audio to industrial control. Most audio-specific Linux distributions ships with this patch applied. A realtime-preemptible kernel will also make it possible to tweak priorities of IRQ handling threads and help ensure smooth audio almost regardless of the load.\n\n{{Note|Currently, there are [https://wiki.linuxfoundation.org/realtime/documentation/known_limitations known limitations] for using a realtime kernel with other specific applications typically related to [[Virtualization]] (such as [[Xen]] and [[KVM]]). If you also need those capabilities, consider installing the realtime kernel in addition to the vanilla Arch Linux kernel and creating a second [[boot loader]] entry for booting the appropriate kernel on demand.}}\n\n=== Installation ===\n\n[[Install]] either the {{Pkg|linux-rt}} or {{Pkg|linux-rt-lts}} package.\n\n=== Compilation ===\n\nIf you are going to [[Kernel#Compilation|compile your own kernel]] using the [[Realtime kernel patchset]], remember that removing modules/options does not equate to a \"leaner and meaner\" kernel. It is true that the size of the kernel image is reduced, but in today's systems it is not as much of an issue as it was back in '''1995'''.\n\n: See [https://wiki.linuxfoundation.org/realtime/documentation/howto/applications/preemptrt_setup HOWTO setup Linux with PREEMPT_RT properly] for further general instructions.\n\nIn any way, you should also ensure that:\n\n* '''Timer Frequency''' is set to '''1000Hz''' ({{ic|1=<nowiki/>CONFIG_HZ_1000=y}}; if you do not do ''MIDI'' you can ignore this)\n* '''APM''' is '''DISABLED''' ({{ic|1=<nowiki/>CONFIG_APM=n}}; Troublesome with some hardware - default in x86_64)\n\nIf you truly want a slim system, we suggest you go your own way and deploy one with ''static /devs''. You should, however, set your CPU architecture. Selecting \"Core 2 Duo\" for appropriate hardware will allow for a good deal of optimisation, but not so much as you go down the scale.\n\nGeneral issue(s) with (realtime) kernels:\n\n* Hyperthreading (if you suspect, disable in [[UEFI]] settings)\n\n== Tips and tricks ==\n\n* Disable WiFi and close any programs that do not need to be open when recording such as browsers. Many have reported disabling WiFi has led to more reliable JACK performance.\n\n* Some USB audio hardware is known not to work properly when plugged into USB 3 ports so try USB 2/1 ports instead.\n\n* IRQ issues can occur and cause problems. An example is video hardware reserving the bus, causing needless interrupts in the system I/O path. See discussion at [http://subversion.ffado.org/wiki/IrqPriorities FFADO IRQ Priorities How-To]. If you have a realtime or a recent kernel, you can use {{Pkg|rtirq}} to adjust priorities of IRQ handling threads.\n\n* Do not use the '''irqbalance''' daemon, or do so carefully [https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_for_real_time/7/html/tuning_guide/interrupt_and_process_binding].\n\n* If you need to use multiple audio devices with JACK2, the '''alsa_in''' and '''alsa_out''' utilities can be used to have extra devices wrapped and show up as outputs in the JACK patchbay.\n\n* Some daemons/processes can unexpectedly cause '''xruns'''. If you do not need it - kill it. No questions asked.\n\n $ ls /var/run/daemons\n $ top # or htop, ps aux, whatever you are comfortable with\n $ killall -9 $processname\n # systemctl stop $daemonname\n\n* If you are facing a lot of ''xruns'' especially with {{Pkg|nvidia}}, disable your GPU throttling. This can be done via the card's control applet and for NVIDIA it is \"prefer maximum performance\" (thanks to a post in LAU by Frank Kober[http://lalists.stanford.edu/lau/2009/10/0467.html]).\n\n* You may like to read more on ALSA: https://www.volkerschatz.com/noise/alsa.html\n\n== Applications ==\n\nArch Linux provides the package group {{Grp|pro-audio}} holding all relevant (semi-) professional applications. All applications in the pro-audio package group are JACK clients. Also {{Grp|lv2-plugins}}, {{Grp|ladspa-plugins}}, {{Grp|dssi-plugins}}, {{Grp|vst-plugins}} and {{Grp|clap-plugins}} are subgroups of the pro-audio group.\n\n{{Tip| See [[Pacman/Tips and tricks#Listing packages]] for listing members of and [[Pacman#Installing package groups]] for installing package groups.}}\n\nAn overview and brief information on some applications is found in [[List of applications/Multimedia#Audio]]. Especially the categories [[List of applications/Multimedia#Digital audio workstations|Digital audio workstations]], [[List of applications/Multimedia#Audio effects|Audio effects]] and [[List of applications/Multimedia#Music trackers|Music trackers]], as well as [[List of applications/Multimedia#Audio synthesis environments|Audio synthesis environments]] and [[List of applications/Multimedia#Sound generators|Sound generators]], provide examples of pro audio software for e.g. recording, mixing, mastering, and sound design. Other categories include [[List of applications/Multimedia#Scorewriters|Scorewriters]], [[List of applications/Multimedia#Audio editors|Audio editors]], [[List of applications/Multimedia#Audio converters|Audio converters]], and [[List of applications/Multimedia#DJ|DJ]] software.\n\nPackages not (yet) in the official repositories can be found in [[Unofficial user repositories#proaudio|proaudio]]. Browse the [https://arch.osamc.de/#packages list of packages] to find the application you need or request packaging of your desired applications via [https://github.com/osam-cologne/archlinux-proaudio GitHub].\n\n== Hardware ==\n\nThe majority of sound cards and audio devices will work with no extra configuration or packages, simply set JACK to use the desired one.\n\nThis is not true for all devices, have a look at the [[:Category:Sound]], [[/Hardware]] as well as [[Envy24control#Supported cards]] for those special cases.\n\n== Get help ==\n\n=== Mailing lists ===\n\n* [https://lists.archlinux.org/mailman3/lists/arch-proaudio.lists.archlinux.org/ Arch Linux Pro-audio] Discussion about real-time multimedia, including (semi-)pro audio and video.\n* [https://lists.linuxaudio.org/listinfo/linux-audio-user Linux Audio User] The Linux pro-audio related mailing list with much traffic and a huge subscriber community of users and developers.\n\n=== IRC ===\n\n* [ircs://irc.libera.chat/archlinux-proaudio #archlinux-proaudio] - Arch Linux pro-audio channel\n* [ircs://irc.libera.chat/lau #lau] - General Linux Audio channel for users\n* [ircs://irc.libera.chat/jack #jack] - Development and support related to JACK audio system\n* [ircs://irc.libera.chat/lv2 #lv2] - Development and support related to the LV2 plugin format\n* [ircs://irc.libera.chat/ardour #ardour] - Discussion and support relating to the Ardour DAW\n* [ircs://irc.libera.chat/opensourcemusicians #opensourcemusicians] - Large general OSS musician discussion channel\n\n== See also ==\n\n* [https://lar.ven.uber.space/floss_media_studio/audio_setup Audio setup] Comprehensive guide for a pro-audio setup based on Arch Linux\n* AUR meta packages: {{AUR|proaudio-meta}}, {{AUR|soundfonts-aur-meta}}, {{AUR|lv2-plugins-aur-meta}}\n* [https://github.com/nodiscc/awesome-linuxaudio awesome-linuxaudio] A list of software and resources for professional audio/video/live events production on the Linux platform\n* [https://bbs.archlinux.org/viewforum.php?id=32 Multimedia and Games / Arch Linux Forums]\n* [https://wiki.linuxfoundation.org/realtime/start Realtime] The Linux Foundation wiki on the PREEMPT_RT patches"
                    }
                ]
            },
            "3928": {
                "pageid": 3928,
                "ns": 0,
                "title": "Firefox (\u010ce\u0161tina)",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "#redirect [[Firefox]]"
                    }
                ]
            },
            "4115": {
                "pageid": 4115,
                "ns": 0,
                "title": "OpenSSH",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Secure Shell]]\n[[Category:Servers]]\n[[Category:OpenBSD]]\n[[de:SSH]]\n[[es:OpenSSH]]\n[[fr:OpenSSH]]\n[[ja:OpenSSH]]\n[[pt:Secure Shell]]\n[[ru:OpenSSH]]\n[[zh-hans:OpenSSH]]\n{{Related articles start}}\n{{Related|SSH keys}}\n{{Related|Pam abl}}\n{{Related|fail2ban}}\n{{Related|sshguard}}\n{{Related|Sshfs}}\n{{Related|Syslog-ng}}\n{{Related|SFTP chroot}}\n{{Related|SCP and SFTP}}\n{{Related|VPN over SSH}}\n{{Related articles end}}\n\n[[Wikipedia:OpenSSH|OpenSSH]] (OpenBSD Secure Shell) is a set of computer programs providing encrypted communication sessions over a computer network using the [[Secure Shell]] (SSH) protocol. It was created as an open source alternative to the proprietary Secure Shell software suite offered by SSH Communications Security. OpenSSH is developed as part of the OpenBSD project, which is led by Theo de Raadt.\n\nOpenSSH is occasionally confused with the similarly-named OpenSSL; however, the projects have different purposes and are developed by different teams, the similar name is drawn only from similar goals.\n\n== Installation ==\n\n[[Install]] the {{Pkg|openssh}} package.\n\n== Client usage ==\n\nTo connect to a server, run:\n\n $ ssh -p ''port'' ''user''@''server-address''\n\nIf the server only allows public-key authentication, follow [[SSH keys]].\n\n=== Configuration ===\n\n{{Expansion|{{Pkg|openssh}} 9.4p1-2 added {{ic|Include /etc/ssh/ssh_config.d/*.conf}} to {{ic|/etc/ssh/ssh_config}}. The instructions can now be made to use drop-in files.}}\n\nThe client can be configured to store common options and hosts. All options can be declared globally or restricted to specific hosts. For example:\n\n{{hc|~/.ssh/config|# global options\nUser ''user''\n\n# host-specific options\nHost ''myserver''\n    Hostname ''server-address''\n    Port     ''port''\n}}\n\nWith such a configuration, the following commands are equivalent\n\n $ ssh -p ''port'' ''user''@''server-address''\n $ ssh ''myserver''\n\nSee {{man|5|ssh_config}} for more information.\n\nSome options do not have command line switch equivalents, but you can specify configuration options on the command line with {{ic|-o}}. For example {{ic|1=-oKexAlgorithms=+diffie-hellman-group1-sha1}}.\n\n== Server usage ==\n\n{{Expansion|{{Pkg|openssh}} 9.4p1-2 added {{ic|Include /etc/ssh/sshd_config.d/*.conf}} to {{ic|/etc/ssh/sshd_config}}. The instructions can now be made to use drop-in files.}}\n\n{{ic|sshd}} is the OpenSSH server daemon, configured with {{ic|/etc/ssh/sshd_config}} and managed by {{ic|sshd.service}}. Whenever changing the configuration, use {{ic|sshd}} in test mode before restarting the service to ensure it will be able to start cleanly. Valid configurations produce no output.\n\n # sshd -t\n\n=== Configuration ===\n\nTo allow access only for some users, add this line:\n\n AllowUsers    ''user1 user2''\n\nTo allow access only for some groups:\n\n AllowGroups   ''group1 group2''\n\nTo add a nice welcome message (e.g. from the {{ic|/etc/issue}} file), configure the {{ic|Banner}} option:\n\n Banner /etc/issue\n\nPublic and private host keys are automatically generated in {{ic|/etc/ssh}} by the ''sshdgenkeys'' [[#Daemon management|service]] and regenerated if missing even if {{ic|HostKeyAlgorithms}} option in {{ic|sshd_config}} allows only some. Three key pairs are provided based on the algorithms [[SSH keys#Choosing the authentication key type|rsa, ecdsa and ed25519]]. To have sshd use a particular key, specify the following option:\n\n HostKey /etc/ssh/ssh_host_rsa_key\n\nIf the server is to be exposed to the WAN, it is recommended to change the default port from 22 to a random higher one like this:\n Port 39901\n\n{{Tip|\n* To help select an alternative port that is not already assigned to a common service, review the [[Wikipedia:List of TCP and UDP port numbers|list of TCP and UDP port numbers]]. You can also find port information locally in {{ic|/etc/services}}. A port change from default port 22 will reduce the number of log entries caused by automated authentication attempts but will not eliminate them. See [[Port knocking]] for related information.\n* It is recommended to disable password logins entirely. This will greatly increase security, see [[#Force public key authentication]] for more information. See [[#Protection]] for more recommend security methods.\n* OpenSSH can listen to multiple ports simply by having multiple {{ic|Port ''port_number''}} lines in the configuration file.\n* New (or missing) host key pairs can be generated by removing the pair(s) that you want to replace from {{ic|/etc/ssh}} and running {{ic|ssh-keygen -A}} as root.\n}}\n\n=== Daemon management ===\n\n[[Start/enable]] {{ic|sshd.service}}. It will keep the SSH daemon permanently active and fork for each incoming connection.\n\n{{Note|{{Pkg|openssh}} 8.0p1-3 removed {{ic|sshd.socket}} that used systemd's socket activation due to it being susceptible to denial of service. See {{Bug|62248}} for details. If {{ic|sshd.socket}} is enabled when updating to {{Pkg|openssh}} 8.0p1-3, the {{ic|sshd.socket}} and {{ic|sshd@.service}} units will be copied to {{ic|/etc/systemd/system/}} and [[reenable]]d. This is only done to not break existing setups; users are still advised to migrate to {{ic|sshd.service}}.}}\n\n{{Warning|If you continue using {{ic|sshd.socket}}, be aware of its issues:\n* {{ic|sshd.socket}} unit may fail (e.g. due to out-of-memory situation) and {{ic|1=Restart=always}} cannot be specified on socket units. See [https://github.com/systemd/systemd/issues/11553 systemd issue  11553].\n* Using socket activation can result in denial of service, as too many connections can cause refusal to further activate the service. See {{Bug|62248}}.\n}}\n\n{{Note|Using {{ic|sshd.socket}} negates the {{ic|ListenAddress}} setting, so it will allow connections over any address. To achieve the effect of setting {{ic|ListenAddress}}, you must specify the port ''and'' IP for {{ic|ListenStream}} (e.g. {{ic|1=ListenStream=192.168.1.100:22}}) by [[edit]]ing {{ic|sshd.socket}}. You must also add {{ic|1=FreeBind=true}} under {{ic|[Socket]}} or else setting the IP address will have the same drawback as setting {{ic|ListenAddress}}: the socket will fail to start if the network is not up in time.}}\n\n{{Tip|When using socket activation, a transient instance of {{ic|sshd@.service}} will be started for each connection (with different instance names). Therefore, neither {{ic|sshd.socket}} nor the daemon's regular {{ic|sshd.service}} allow to monitor connection attempts in the log. The logs of socket-activated instances of SSH can be seen by running {{ic|journalctl -u \"sshd@*\"}} as root or by running {{ic|journalctl /usr/bin/sshd}} as root.}}\n\n=== Protection ===\n\nAllowing remote log-on through SSH is good for administrative purposes, but can pose a threat to your server's security. Often the target of brute force attacks, SSH access needs to be limited properly to prevent third parties gaining access to your server.\n\n{{Pkg|ssh-audit}} offers an automated analysis of server and client configuration.  Several other good guides and tools are available on the topic, for example:\n\n* [[MozillaWiki:Security/Guidelines/OpenSSH|Article by Mozilla Infosec Team]]\n* [https://www.ssh-audit.com/hardening_guides.html SSH Hardening Guides]\n\n==== Force public key authentication ====\n\nIf a client cannot authenticate through a public key, by default, the SSH server falls back to password authentication, thus allowing a malicious user to attempt to gain access by [[#Protecting against brute force attacks|brute-forcing]] the password. One of the most effective ways to protect against this attack is to disable password logins entirely, and force the use of [[SSH keys]]. This can be accomplished by setting the following options in the daemon configuration file:\n\n{{hc|/etc/ssh/sshd_config.d/20-force_publickey_auth.conf|\nPasswordAuthentication no\nAuthenticationMethods publickey\n}}\n\n{{Warning|Before adding this to your configuration, make sure that all accounts which require SSH access have public-key authentication set up in the corresponding {{ic|authorized_keys}} files. See [[SSH keys#Copying the public key to the remote server]] for more information.}}\n\n==== Two-factor authentication and public keys ====\n\nSSH can be set up to require multiple ways of authentication; you can tell which authentication methods are required using the {{ic|AuthenticationMethods}} option. This enables you to use public keys as well as a two-factor authorization.\n\n===== Authentication providers =====\n\nSee [[Google Authenticator]] to set up Google Authenticator.\n\nFor [https://duo.com/ Duo], [[install]] {{AUR|duo_unix}} which will supply the {{ic|pam_duo.so}} module. Read the [https://duo.com/docs/duounix Duo Unix documentation] for instructions on how to setup the necessary Duo credentials (Integration Key, Secret Key, API Hostname).\n\n===== PAM setup =====\n\nTo use [[PAM]] with OpenSSH, edit the following files:\n\n{{hc|/etc/ssh/sshd_config.d/20-pam.conf|\nKbdInteractiveAuthentication yes\nAuthenticationMethods publickey keyboard-interactive:pam\n}}\n\nThen you can log in with either a publickey '''or''' the user authentication as required by your PAM setup.\n\nIf, on the other hand, you want to authenticate the user on both a publickey '''and''' the user authentication as required by your PAM setup, use a comma instead of a space to separate the AuthenticationMethods:\n\n{{hc|/etc/ssh/sshd_config.d/20-pam.conf|\nKbdInteractiveAuthentication yes\nAuthenticationMethods publickey''','''keyboard-interactive:pam\n}}\n\nWith required pubkey '''and''' pam authentication, you may wish to disable the password requirement:\n\n{{hc|/etc/pam.d/sshd|\nauth      required  pam_securetty.so     #disable remote root\n#Require google authenticator\nauth      required  pam_google_authenticator.so\n#But not password\n#auth      include   system-remote-login\naccount   include   system-remote-login\npassword  include   system-remote-login\nsession   include   system-remote-login\n}}\n\n==== Protecting against brute force attacks ====\n\nBrute forcing is a simple concept: one continuously tries to log in to a webpage or server log-in prompt like SSH with a high number of random username and password combinations.\n\nSee [[ufw#Rate limiting with ufw]] or [[Simple stateful firewall#Bruteforce attacks]] for [[iptables]].\n\nAlternatively, you can protect yourself from brute force attacks by using an automated script that blocks anybody trying to brute force their way in, for example [[fail2ban]] or [[sshguard]].\n\n* Only allow incoming SSH connections from trusted locations\n* Use [[fail2ban]] or [[sshguard]] to automatically block IP addresses that fail password authentication too many times.\n* Use [https://github.com/jtniehof/pam_shield pam_shield] to block IP addresses that perform too many login attempts within a certain period of time. In contrast to [[fail2ban]] or [[sshguard]], this program does not take login success or failure into account.\n\n==== Limit root login ====\n\n{{Out of date|Root login has been disabled by default upstream in the current version.  Unclear to me what parts of this section and subsections are redundant.}}\n\nIt is generally considered bad practice to allow the root user to log in without restraint over SSH. There are two methods by which SSH root access can be restricted for increased security.\n\n===== Deny =====\n\nSudo selectively provides root rights for actions requiring these without requiring authenticating against the root account. This allows locking the root account against access via SSH and potentially functions as a security measure against brute force attacks, since now an attacker must guess the account name in addition to the password.\n\nSSH can be configured to deny remote logins with the root user by editing the \"Authentication\" section in the daemon configuration file. Simply set {{ic|PermitRootLogin}} to {{ic|no}}:\n\n{{hc|/etc/ssh/sshd_config.d/20-deny_root.conf|PermitRootLogin no}}\n\nNext, [[restart]] the SSH daemon.\n\nYou will now be unable to log in through SSH under root, but will still be able to log in with your normal user and use [[su]] or [[sudo]] to do system administration.\n\n===== Restrict =====\n\nSome automated tasks such as remote, full-system backup require full root access. To allow these in a secure way, instead of disabling root login via SSH, it is possible to only allow root logins for selected commands. This can be achieved by editing {{ic|~root/.ssh/authorized_keys}}, by prefixing the desired key, e.g. as follows:\n\n command=\"rrsync -ro /\" ssh-rsa \u2026\n\nThis will allow any login with this specific key only to execute the command specified between the quotes.\n\nThe increased attack surface created by exposing the root user name at login can be compensated by adding the following to {{ic|sshd_config}}:\n\n PermitRootLogin forced-commands-only\n\nThis setting will not only restrict the commands which root may execute via SSH, but it will also disable the use of passwords, forcing use of public key authentication for the root account.\n\nA slightly less restrictive alternative will allow any command for root, but makes brute force attacks infeasible by enforcing public key authentication. For this option, set:\n\n PermitRootLogin prohibit-password\n\n==== Locking the authorized_keys file ====\n\n{{Warning|Locking this file only protects against user mistakes and a particular naive in-person attack. It '''does not''' provide any protection against malicious programs or breaches. Use multi-factor authentication, firewalling and practice defence in depth to prevent breaches in the first place.}}\n\nIf, for whatever reason, you think that the user in question should not be able to add or change existing keys, you can prevent them from manipulating the file.\n\nOn the server, make the {{ic|authorized_keys}} file read-only for the user and deny all other permissions:\n\n $ chmod 400 ~/.ssh/authorized_keys\n\nTo prevent the user from simply changing the permissions back, [[File permissions and attributes#File attributes|set the immutable bit]] on the {{ic|authorized_keys}} file. To prevent the user from renaming the {{ic|~/.ssh}} directory and creating a new {{ic|~/.ssh}} directory and {{ic|authorized_keys}} file, set the immutable bit on the {{ic|~/.ssh}} directory too. To add or remove keys, you will have to remove the immutable bit from {{ic|authorized_keys}} and make it writable temporarily.\n\n{{Tip|It is recommended to log changes to any {{ic|authorized_keys}} file via e.g [[Audit framework#Audit files and directories access|auditd]].}}\n\n==== SSH certificates ====\n\nWhile common SSH keys and manual fingerprint verification may be easy to use with a handful of hosts that are managed by a single administrator, this method of authentication does not scale at all. When a number of servers need to be accessed through SSH by several users, manually verifying ssh public key fingerprints of every host becomes nearly impossible to do securely and reliably. \n\nThe solution for this is to use SSH certificates that provide automatic verification of public key identities through a chain of trust that scales significantly better than the default trust-on-first-use approach of SSH. SSH certificates are basically nothing else than normal public SSH keys, but with an additional signature from a trusted certificate authority that verifies the key identity.\n\n===== Create a host certificate authority key for your infrastructure =====\n\n $ ssh-keygen -t ed25519 -f ~/.ssh/ca_host_key -C 'Host certificate authority for *.example.com'\n\nThe private certificate authority key should be stored securely, ideally on a smartcard or hardware token that prevents key extraction like the [[Nitrokey]] or [[YubiKey]].\n\n===== Sign a server's public SSH host key =====\n\nCopy the public server key to your local system containing the private certificate authority key to sign it:\n\n $ ssh-keygen -h -s ~/.ssh/ca_key -I certLabel -n server01.example.com ./ssh_host_ed25519_key.pub\n\n===== Move the new certificate and configure sshd to use it =====\n\nThe generated certificate {{ic|ssh_host_ed25519_key-cert.pub}} should be copied to the server at {{ic|/etc/ssh/}}.\n\n{{hc|/etc/ssh/sshd_config.d/20-ed25519_key.conf|\nHostCertificate /etc/ssh/ssh_host_ed25519_key-cert.pub\n}}\n\n===== Configure all clients to trust the certificate authority =====\n\n{{hc|~/.ssh/known_hosts|\n@cert-authority  *.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKL8gB/pjuff005YNazwMCqJpgsXAbQ3r4VStd/CRKwU Host certificate authority for *.example.com\n}}\n\n{{Warning| When a server does not provide a certificate for identification, public key authentication is used as fallback by default.}}\n\n===== SSH user certificates =====\n\nDepending on the number of users and method of deployment, SSH User keys can also be used with Certificates. For organizations with many ssh users, this is strongly advised to manage User key deployment securely. \n\nThe deployment of user certificates works basically the same as for server identities. More details and instructions can be found at [[Wikibooks:OpenSSH/Cookbook/Certificate-based Authentication]].\n\n===== Certificate deployment automation =====\n\nAutomated deployment of SSH certificates can be provided by a number of open source tools. Popular examples are:\n\n* [https://docs.ansible.com/ansible/latest/collections/community/crypto/openssh_cert_module.html Ansible - openssh_cert module]\n* [https://www.privacyidea.org/ privacyIDEA - authentication server]\n* [https://theoapp.readthedocs.io/en/latest/ Theo App - authorized keys manager]\n\n==== SSHFP record ====\n\nThe [[Wikipedia:SSHFP record|Secure Shell fingerprint record (SSHFP)]] is an optional resource record in the domain name system that associates SSH keys to a host name. It can be used to verify the SSH fingerprint on public servers by using DNSSEC instead of deploying trusted CA certificates, which allows even unmanaged clients to verify the validity of key fingerprints.\n\n===== Generate record entry =====\n\nTo generate the required hexadecimal key fingerprint to be stored in the DNS record, create the hash on the target server.\n\n $ ssh-keygen -r host.example.com\n\nThis will read all available SSH keys for the specified domain and output valid SSHFP records that can then be stored in the DNS entries of the affected domain.\n\n===== Client configuration =====\n\nIn order to automatically retrive and trust SSH key fingerprints stored as SSHFP records, add the following to your ssh client configuration file:\n\n{{hc|~/.ssh/config|\n# global options\nMatch all\n    VerifyHostKeyDNS yes\n}}\n\nIf the target host has a valid SSHFP record and this record is verified with a valid DNSSEC signature, the fingerprint is automatically accepted without prompting the user to verify the hosts identity. In case the DNS record is not verified by DNSSEC, the user will be prompted to verify the fingerprint instead.\n\n===== Verify SSHFP records manually =====\n\nTo determine the SSH fingerprint of a specific domain, use ssh-keyscan to retrieve the the DNS record manually. (Note that by default fingerprints for every available key type is provided as both SHA1 and SHA256.)\n\n{{hc|$ ssh-keyscan -D github.com|\n; github.com:22 SSH-2.0-babeld-57ca1323\n; github.com:22 SSH-2.0-babeld-57ca1323\ngithub.com IN SSHFP 1 1 6f4c60375018bae0918e37d9162bc15ba40e6365\ngithub.com IN SSHFP 1 2 b8d895ced92c0ac0e171cd2ef5ef01ba3417554a4a6480d331ccc2be3ded0f6b\n; github.com:22 SSH-2.0-babeld-57ca1323\ngithub.com IN SSHFP 3 1 3358ab5dd3e306c461c840f7487e93b697e30600\ngithub.com IN SSHFP 3 2 a764003173480b54c96167883adb6b55cf7cfd1d415055aedff2e2c8a8147d03\n; github.com:22 SSH-2.0-babeld-57ca1323\ngithub.com IN SSHFP 4 1 e9619e2ed56c2f2a71729db80bacc2ce9ccce8d4\ngithub.com IN SSHFP 4 2 f83898df0bef57a4ee24985ba598ac17fccb0c0d333cc4af1dd92be14bc23aa5\n; github.com:22 SSH-2.0-babeld-57ca1323\n}}\n\nSince the SSHFP record stores the key fingerprints as hexadecimal values while the common output for SSH fingerprints is the base64 encoded SHA256 hash of the public key, it is necessary to convert the record back to the base64 format in order to compare it with values in the known_hosts file or other documentation that commonly stores fingerprints as SHA256.\n\n $ echo \"SSHFP-fingerprint\" | xxd -r -p | base64\n\nExample for github.com using the hex value for the sha256 fingerprint of the key type ed25519\n\n{{hc|$ echo \"f83898df0bef57a4ee24985ba598ac17fccb0c0d333cc4af1dd92be14bc23aa5\" {{!}} xxd -r -p {{!}} base64|2=\n+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU=\n}}\n\nCompare with known_hosts entries:\n\n $ ssh-keygen -l -f ~/.ssh/known_hosts\n\n== Tips and tricks ==\n\n=== Encrypted SOCKS tunnel ===\n\n{{Style|Written like a blog post.}}\n\nThis is highly useful for laptop users connected to various unsafe wireless connections. The only thing you need is an SSH server running at a somewhat secure location, like your home or at work. It might be useful to use a dynamic DNS service like [https://dyn.com/dns/ DynDNS] so you do not have to remember your IP-address.\n\n==== Step 1: start the connection ====\n\nYou only have to execute this single command to start the connection:\n\n $ ssh -TND 4711 ''user''@''host''\n\nwhere {{Ic|''user''}} is your username at the SSH server running at the {{Ic|''host''}}. It will ask for your password, and then you are connected. The {{Ic|N}} flag disables the interactive prompt, and the {{Ic|D}} flag specifies the local port on which to listen on (you can choose any port number if you want).  The {{Ic|T}} flag disables pseudo-tty allocation.\n\nIt is nice to add the verbose ({{Ic|-v}}) flag, because then you can verify that it is actually connected from that output.\n\n==== Step 2 (Variant A): configure your browser (or other programs) ====\n\nThe above step is useful only in combination with a web browser or another program that uses this newly created SOCKS tunnel. Since SSH currently supports both SOCKS v4 and SOCKS v5, you can use either of them.\n\n* For Firefox: At ''Preferences > General'' navigates to the bottom of the page and click ''Settings...'', which is to the right of the Network Settings title. Next, within the new semi window, check the ''Manual proxy configuration'' option and enter {{ic|localhost}} in the ''SOCKS host'' text field, and the port number in the ''Port'' text field ({{ic|4711}} in the example above) next to it.\n:Firefox does not automatically make DNS requests through the socks tunnel. This potential privacy concern can be mitigated by scrolling further down, checking in the ''Proxy DNS when using SOCKS v5''. Obviously, this will only work if you chooses SOCKS v5 rather than v4.\n:Restart Firefox to activate these settings.\n* For Chromium: You can set the SOCKS settings as environment variables or as command line options. For example, to add one of the following functions to your {{ic|.bashrc}}:\n\n function secure_chromium {\n     port=4711\n     export SOCKS_SERVER=localhost:$port\n     export SOCKS_VERSION=5\n     chromium &\n     exit\n }\n\nOR\n\n function secure_chromium {\n     port=4711\n     chromium --proxy-server=\"socks://localhost:$port\" &\n     exit\n }\n\nNow open a terminal and just do:\n\n $ secure_chromium\n\nEnjoy your secure tunnel!\n\n==== Step 2 (Variant B): set up a local TUN interface ====\n\nThis variant is slightly more involved upfront but results in you not having to manually configure every single application one by one to use the SOCKS proxy. It involves setting up a local TUN interface and routing traffic through it.\n\nSee [[VPN over SSH#Set up badvpn and tunnel interface]].\n\n=== X11 forwarding ===\n\nX11 forwarding is a mechanism that allows graphical interfaces of X11 programs running on a remote system to be displayed on a local client machine. For X11 forwarding the remote host does not need to have a full X11 system installed; however, it needs at least to have ''xauth'' installed. ''xauth'' is a utility that maintains {{ic|Xauthority}} configurations used by server and client for authentication of X11 session ([http://xmodulo.com/2012/11/how-to-enable-x11-forwarding-using-ssh.html source]).\n\n{{Warning|X11 forwarding has important security implications which should be at least acknowledged by reading relevant sections of {{man|1|ssh}}, {{man|5|sshd_config}}, and {{man|5|ssh_config}} manual pages. See also [https://security.stackexchange.com/questions/14815/security-concerns-with-x11-forwarding this StackExchange question.]}}\n\n==== Setup ====\n\n===== Remote =====\n\n* [[install]] the {{Pkg|xorg-xauth}} packages\n* in {{ic|/etc/ssh/ssh'''d'''_config}}:\n** set {{ic|X11Forwarding}} to ''yes''\n** verify that {{ic|AllowTcpForwarding}} and {{ic|X11UseLocalhost}} options are set to ''yes'', and that {{ic|X11DisplayOffset}} is set to ''10'' (those are the default values if nothing has been changed, see {{man|5|sshd_config}})\n* then [[restart]] the [[#Daemon management|''sshd'' daemon]].\n\n===== Client =====\n\n* [[install]] the {{Pkg|xorg-xauth}} package\n* enable the {{ic|ForwardX11}} option by either specifying the {{ic|-X}} switch on the command line for opportunistic connections, or by setting {{ic|ForwardX11}} to ''yes'' in the [[#Configuration|client's configuration]].\n\n{{Tip|You can enable the {{ic|ForwardX11Trusted}} option ({{ic|-Y}} switch on the command line) if GUI is drawing badly or you receive errors; this will prevent X11 forwardings from being subjected to the [https://www.x.org/wiki/Development/Documentation/Security/ X11 SECURITY extension] controls. Be sure you have read [[#X11 forwarding|the warning]] at the beginning of this section if you do so.}}\n\n==== Usage ====\n\nLog on to the remote machine normally, specifying the {{ic|-X}} switch if ''ForwardX11'' was not enabled in the client's configuration file:\n\n $ ssh -X ''user@host''\n\nIf you receive errors trying to run graphical applications, try ''ForwardX11Trusted'' instead:\n\n $ ssh -Y ''user@host''\n\nGiven the output {{ic|X11 forwarding request failed}}, redo the setup for your remote machine. Once the X11 forwarding request succeeds, you can start any X program on the remote server, and it will be forwarded to your local session:\n\n $ xclock\n\nError output containing {{ic|Can't open display}} indicates that {{ic|DISPLAY}} is improperly set.\n\nBe careful with some applications as they check for a running instance on the local machine. [[Firefox]] is an example: either close the running Firefox instance or use the following start parameter to start a remote instance on the local machine:\n\n $ firefox --no-remote\n\nIf you get \"X11 forwarding request failed on channel 0\" when you connect (and the server {{ic|/var/log/errors.log}} shows \"Failed to allocate internet-domain X11 display socket\"), make sure package {{Pkg|xorg-xauth}} is installed. If its installation is not working, try to either:\n\n* enable the {{ic|AddressFamily any}} option in {{ic|ssh'''d'''_config}} on the ''server'', or\n* set the {{ic|AddressFamily}} option in {{ic|ssh'''d'''_config}} on the ''server'' to inet.\nSetting it to inet may fix problems with Ubuntu clients on IPv4.\n\nFor running X applications as another user on the SSH server, you need to {{Ic|xauth add}} the authentication line taken from {{Ic|xauth list}} of the SSH logged in user.\n\n{{Tip|[https://unix.stackexchange.com/a/12772 Here] are [https://unix.stackexchange.com/a/46748 some] useful [https://superuser.com/a/805060 links] for troubleshooting {{ic|X11 Forwarding}} issues.}}\n\n=== Forwarding other ports ===\n\nIn addition to SSH's built-in support for X11, it can also be used to securely tunnel any TCP connection, by use of local forwarding or remote forwarding.\n\nLocal forwarding opens a port on the local machine, connections to which will be forwarded to the remote host and from there on to a given destination. Very often, the forwarding destination will be the same as the remote host, thus providing a secure shell and, e.g. a secure [[VNC]] connection, to the same machine. Local forwarding is accomplished by means of the {{Ic|-L}} switch and it is accompanying forwarding specification in the form of {{Ic|<tunnel port>:<destination address>:<destination port>}}.\n\nThus:\n\n $ ssh -L 1000:mail.google.com:25 192.168.0.100\n\nwill use SSH to login to and open a shell on {{ic|192.168.0.100}}, and will also create a tunnel from the local machine's TCP port 1000 to mail.google.com on port 25. Once established, connections to {{ic|localhost:1000}} will connect to the Gmail SMTP port. To Google, it will appear that any such connection (though not necessarily the data conveyed over the connection) originated from {{ic|192.168.0.100}}, and such data will be secure between the local machine and 192.168.0.100, but not between {{ic|192.168.0.100}} and Google, unless other measures are taken.\n\nSimilarly:\n\n $ ssh -L 2000:192.168.0.100:6001 192.168.0.100\n\nwill allow connections to {{ic|localhost:2000}} which will be transparently sent to the remote host on port 6001. The preceding example is useful for VNC connections using the vncserver utility--part of the [[tightvnc]] package--which, though very useful, is explicit about its lack of security.\n\nRemote forwarding allows the remote host to connect to an arbitrary host via the SSH tunnel and the local machine, providing a functional reversal of local forwarding, and is useful for situations where, e.g., the remote host has limited connectivity due to firewalling. It is enabled with the {{Ic|-R}} switch and a forwarding specification in the form of {{Ic|<tunnel port>:<destination address>:<destination port>}}.\n\nThus:\n\n $ ssh -R 3000:irc.libera.chat:6667 192.168.0.200\n\nwill bring up a shell on {{ic|192.168.0.200}}, and connections from {{ic|192.168.0.200}} to itself on port 3000 (the remote host's {{ic|localhost:3000}}) will be sent over the tunnel to the local machine and then on to irc.libera.chat on port 6667, thus, in this example, allowing the use of IRC programs on the remote host to be used, even if port 6667 would normally be blocked to it.\n\nBoth local and remote forwarding can be used to provide a secure \"gateway\", allowing other computers to take advantage of an SSH tunnel, without actually running SSH or the SSH daemon by providing a bind-address for the start of the tunnel as part of the forwarding specification, e.g. {{Ic|<tunnel address>:<tunnel port>:<destination address>:<destination port>}}. The {{Ic|<tunnel address>}} can be any address on the machine at the start of the tunnel. The address {{Ic|localhost}} allows connections via the {{ic|localhost}} or loopback interface, and an empty address or {{Ic|*}} allow connections via any interface. By default, forwarding is limited to connections from the machine at the \"beginning\" of the tunnel, i.e. the {{Ic|<tunnel address>}} is set to {{Ic|localhost}}. Local forwarding requires no additional configuration; however, remote forwarding is limited by the remote server's SSH daemon configuration. See the {{Ic|GatewayPorts}} option in {{man|5|sshd_config}} and {{ic|-L address}} option in {{man|1|ssh}} for more information about remote forwarding and local forwarding, respectively.\n\n=== Jump hosts ===\n\nIn certain scenarios, there might not be a direct connection to your target SSH daemon, and the use of a jump server (or [[Wikipedia:bastion host|bastion server]]) is required. Thus, we attempt to connect together two or more SSH tunnels, and assuming your local keys are authorized against each server in the chain. This is possible using SSH agent forwarding ({{ic|-A}}) and pseudo-terminal allocation ({{ic|-t}}) which forwards your local key with the following syntax:\n\n $ ssh -A -t -l user1 bastion1 \\\n   ssh -A -t -l user2 intermediate2 \\\n   ssh -A -t -l user3 target\n\nThis can be automated with the ProxyCommand option:\n\n $ ssh -o ProxyCommand=\"ssh -W %h:%p bastion.example.org\" targetserver.example.org\n\nAn easier and more secure way to do this is using the ProxyJump option with the {{ic|-J}} flag:\n\n $ ssh -J user1@bastion1,user2@intermediate2 user3@target\n\nMultiple hosts in the {{ic|-J}} directive can be separated with a comma; they will be connected to in the order listed. The {{ic|user...@}} part is not required, but can be used. The host specifications for {{ic|-J}} use the ssh configuration file, so specific per-host options can be set there, if needed. \n\nThe main difference between the ProxyCommand and ProxyJump options is that the later does not require a shell on the jumphost. Consequently, this also means that the jumpserver does not require access to the users login credentials or SSH agent forwarding. With the ProxyJump option, the ssh client connects through the jumpserver directly to the target server, establishing an end-to-end encrypted channel between client and target server.\n\nAn equivalent of the {{ic|-J}} flag in the configuration file is the {{ic|ProxyJump}} option; see {{man|5|ssh_config}} for details.\n\n=== Reverse SSH through a relay ===\n\n{{Style|The idea of SSH tunneling is classic, so some references for detailed explanation would be nice. E.g. [https://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work/118650#118650] which includes other scenarios.}}\n\nThe idea is that the client connects to the server via another relay while the server is connected to the same relay using a reverse SSH tunnel. This is useful when the server is behind a NAT, and the relay is a publicly accessible SSH server used as a proxy to which the user has access. Therefore, the prerequisite is that the client's keys are authorized against both the relay and the server, and the server needs to be authorized against the relay as well for the reverse SSH connection.\n\nThe following configuration example assumes that user1 is the user account used on client, user2 on relay and user3 on server. First, assuming we will use port 2222, the server needs to establish the reverse tunnel with:\n\n ssh -R 2222:localhost:22 -N ''user2''@''relay''\n\nWhich can also be automated with a startup script, systemd service, [[#Autossh - automatically restarts SSH sessions and tunnels|autossh]] or {{AUR|sidedoor}}.\n\nAt the client side, the connection is established with:\n\n ssh -t ''user2''@''relay'' ssh ''user3''@localhost -p 2222\n\n{{Note|{{ic|ssh ''user3''@''relay'' -p 2222}} would require you to open this port in the firewall of your relay server, as well as to allow connections to this port from other addresses.}}\n\nThe remote command to establish the connection to reverse tunnel can also be defined in relay's {{ic|~/.ssh/authorized_keys}} by including the {{ic|command}} field as follows:\n\n command=\"ssh ''user3''@localhost -p 2222\" ''ssh-rsa'' ''KEY2'' ''user1''@''client''\n\nIn this case the connection is established with:\n\n ssh ''user2''@''relay''\n\nAlternatively, you can add an entry to your ssh configuration that specifies both {{ic|RemoteCommand}} and {{ic|RequestTTY}}:\n\n{{hc|~/.ssh/config|\nHost ''jump-destination''\n    Hostname ''relay''\n    User ''user2''\n    RemoteCommand ssh ''user3''@localhost -p 2222\n    RequestTTY yes\n}}\n\nWhich will reduce connecting to:\n\n ssh ''jump-destination''\n\n{{Note|SCP's autocomplete function in client's terminal will not work and even the SCP transfers themselves are not working under some configurations.}}\n\n=== Multiplexing ===\n\nThe SSH daemon usually listens on port 22. However, it is common practice for many public internet hotspots to block all traffic that is not on the regular HTTP/S ports (80 and 443, respectively), thus effectively blocking SSH connections. The immediate solution for this is to have {{ic|sshd}} listen additionally on one of the whitelisted ports:\n\n{{hc|/etc/ssh/sshd_config|\nPort 22\nPort 443\n}}\n\nHowever, it is likely that port 443 is already in use by a web server serving HTTPS content, in which case it is possible to use a multiplexer, such as {{Pkg|sslh}}, which listens on the multiplexed port and can intelligently forward packets to many services.\n\n=== Speeding up SSH ===\n\nThere are several [[#Configuration|client configuration]] options which can speed up connections either globally or for specific hosts. See {{man|5|ssh_config}} for full descriptions of these options.\n\n* ''Use a faster cipher'': on modern CPUs with AESNI instructions, {{ic|aes128-gcm@openssh.com}} and {{ic|aes256-gcm@openssh.com}} should offer significantly better performance over openssh's default preferred cipher, usually {{ic|chacha20-poly1305@openssh.com}}. Cipher can be selected with the {{ic|-c}} flag. For a permanent effect, put {{ic|Ciphers}} option in your {{ic|~/.ssh/config}} with ciphers in new preferred order, e.g.:{{bc|Ciphers aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr}}\n\n* ''Enable or disable compression'': compression can increase speed on slow connections; it is enabled with the {{ic|Compression yes}} option or the {{ic|-C}} flag. However, the compression algorithm used is the relatively slow {{man|1|gzip}} which becomes the bottleneck on fast networks. In order to speed up the connection, one should use the {{ic|Compression no}} option on local or fast networks.\n\n* ''Connection sharing'': you can make all sessions to the same host share a single connection using these options:{{bc|<nowiki>\nControlMaster auto\nControlPersist yes\nControlPath ~/.ssh/sockets/socket-%r@%h:%p\n</nowiki>}}\n: where {{ic|~/.ssh/sockets}} can be any directory not writable by other users.\n\n* {{ic|ControlPersist}} specifies how long the master should wait in the background for new clients after the initial client connection has been closed. Possible values are either:  \n** {{ic|no}} to close the connection immediately after the last client disconnects, \n** a time in seconds,\n** {{ic|yes}} to wait forever, the connection will never be closed automatically.\n\n* Login time can be shortened by bypassing IPv6 lookup using the {{ic|AddressFamily inet}} option or {{ic|-4}} flag.\n\n* Last, if you intend to use SSH for SFTP or SCP, [https://www.psc.edu/index.php/hpn-ssh High Performance SSH/SCP] can significantly increase throughput by dynamically raising the SSH buffer sizes. Install the package {{AUR|openssh-hpn-git}}{{Broken package link|package not found}} to use a patched version of OpenSSH with this enhancement.\n\n=== Mounting a remote filesystem with SSHFS ===\n\nPlease refer to the [[SSHFS]] article to mount a SSH-accessible remote system to a local directory, so you will be able to do any operation on the mounted files with any tool (copy, rename, edit with vim, etc.). ''sshfs'' is generally preferred over ''shfs'', the latter has not been updated since 2004.\n\n=== Keep alive ===\n\nBy default, the SSH session automatically logs out if it has been idle for a certain time. To keep the session up, the client can send a keep-alive signal to the server if no data has been received for some time, or symmetrically the server can send messages at regular intervals if it has not heard from the client.\n\n* On the '''server''' side, {{ic|ClientAliveInterval}} sets the timeout in seconds after which if no data has been received from the client, ''sshd'' will send a request for response. The default is 0, no message is sent. For example to request a response every 60 seconds from the client, set the {{ic|ClientAliveInterval 60}} option in your [[#Configuration_2|server configuration]]. See also the {{ic|ClientAliveCountMax}} and {{ic|TCPKeepAlive}} options.\n* On the '''client''' side, {{ic|ServerAliveInterval}} controls the interval between the requests for response sent from the client to the server. For example to request a response every 120 seconds from the server, add the {{ic|ServerAliveInterval 120}} option to your [[#Configuration|client configuration]]. See also the {{ic|ServerAliveCountMax}} and {{ic|TCPKeepAlive}} options.\n\n{{Note| To ensure a session is kept alive, only one of either the client or the server needs to send keep alive requests. If ones control both the servers and the clients, a reasonable choice is to only configure the clients that require a persistent session with a positive {{ic|ServerAliveInterval}} and leave other clients and servers in their default configuration.}}\n\n=== Automatically restart SSH tunnels with systemd ===\n\n[[systemd]] can automatically start SSH connections on boot/login ''and'' restart them when they fail. This makes it a useful tool for maintaining SSH tunnels.\n\nThe following service can start an SSH tunnel on login using the connection settings in your [[#Configuration|ssh configuration]]. If the connection closes for any reason, it waits 10 seconds before restarting it:\n\n{{hc|~/.config/systemd/user/tunnel.service|<nowiki>\n[Unit]\nDescription=SSH tunnel to myserver\n\n[Service]\nType=simple\nRestart=always\nRestartSec=10\nExecStart=/usr/bin/ssh -F %h/.ssh/config -N myserver\n</nowiki>}}\n\nThen [[enable]] and [[start]] the [[Systemd/User]] service. See [[#Keep alive]] for how to prevent the tunnel from timing out. If you wish to start the tunnel on boot, you might want to [[Systemd#Writing unit files|rewrite the unit]] as a system service.\n\n=== Autossh - automatically restarts SSH sessions and tunnels ===\n\nWhen a session or tunnel cannot be kept alive, for example due to bad network conditions causing client disconnections, you can use {{Pkg|autossh}} to automatically restart them.\n\nUsage examples:\n\n $ autossh -M 0 -o \"ServerAliveInterval 45\" -o \"ServerAliveCountMax 2\" username@example.com\n\nCombined with [[SSHFS]]:\n\n $ sshfs -o reconnect,compression=yes,transform_symlinks,ServerAliveInterval=45,ServerAliveCountMax=2,ssh_command='autossh -M 0' username@example.com: /mnt/example \n\nConnecting through a SOCKS-proxy set by [[Proxy settings]]:\n\n $ autossh -M 0 -o \"ServerAliveInterval 45\" -o \"ServerAliveCountMax 2\" -NCD 8080 username@example.com \n\nWith the {{ic|-f}} option autossh can be made to run as a background process. Running it this way however means the passphrase cannot be entered interactively.\n\nThe session will end once you type {{ic|exit}} in the session, or the autossh process receives a SIGTERM, SIGINT of SIGKILL signal.\n\n==== Run autossh automatically at boot via systemd ====\n\nIf you want to automatically start autossh, you can create a systemd unit file:\n\n{{hc|/etc/systemd/system/autossh.service|2=\n[Unit]\nDescription=AutoSSH service for port 2222\nAfter=network.target\n\n[Service]\nEnvironment=\"AUTOSSH_GATETIME=0\"\nExecStart=/usr/bin/autossh -M 0 -NL 2222:localhost:2222 -o TCPKeepAlive=yes foo@bar.com\n\n[Install]\nWantedBy=multi-user.target\n}}\n\nHere {{ic|1=AUTOSSH_GATETIME=0}} is an environment variable specifying how long ssh must be up before autossh considers it a successful connection, setting it to 0 autossh also ignores the first run failure of ssh. This may be useful when running autossh at boot. Other environment variables are available at {{man|1|autossh}}. Of course, you can make this unit more complex if necessary (see the systemd documentation for details), and obviously you can use your own options for autossh, but note that the {{ic|-f}} implying {{ic|1=AUTOSSH_GATETIME=0}} does not work with systemd. \n\nRemember to [[start]] and/or [[enable]] the service afterwards.\n\nYou may also need to disable ControlMaster e.g.\n\n ExecStart=/usr/bin/autossh -M 0 -o ControlMaster=no -NL 2222:localhost:2222 -o TCPKeepAlive=yes foo@bar.com\n\n{{Tip|It is also easy to maintain several autossh processes, to keep several tunnels alive. Just create multiple service files with different names.}}\n\n=== Alternative service should SSH daemon fail ===\n\nFor remote or headless servers which rely exclusively on SSH, a failure to start the SSH daemon (e.g., after a system upgrade) may prevent administration access. [[systemd]] offers a simple solution via {{ic|OnFailure}} option.\n\nLet us suppose the server runs {{ic|sshd}} and [[telnet]] is the fail-safe alternative of choice. Create a file as follows. Do '''not''' [[enable]] {{ic|telnet.socket}}!\n\n{{hc|/etc/systemd/system/sshd.service.d/override.conf|2=\n[Unit]\nOnFailure=telnet.socket\n}}\n\nThat's it. Telnet is not available when {{ic|sshd}} is running. Should {{ic|sshd}} fail to start, a telnet session can be opened for recovery.\n\n=== Terminal background color based on host ===\n\nTo better distinguish when you are on different hosts, you can set a [https://bryangilbert.com/post/etc/term/dynamic-ssh-terminal-background-colors/ different background color based on the kind of host].\n\nThis solution works, but is not universal (ZSH only).\n\n=== Network specific configuration ===\n\nYou can use host configuration specific to the network you are connected to using a {{ic|Match exec}}.\n\nFor example, when using {{man|1|nmcli}}, and the connection is configured (manually or through DHCP) to use a search-domain:\n\n{{bc|1=\nMatch exec \"nmcli {{!}} grep domains: {{!}} grep example.com\"\n  CanonicalDomains example.com\n  # Should you use a different username on this network\n  #User username\n  # Use a different known_hosts file (for private network or synchronisation)\n  #UserKnownHostsFile <network>_known_hosts\n}}\n\nAnother example for {{ic|Match host ... exec \"...\"}}: Consider that connecting to {{ic|internal.example.com}} requires a bastion/proxy (via {{ic|ProxyJump}}) unless you are already connected via VPN. The fragment {{ic|!exec \"host internal.example.com\"}} applies only when {{ic|internal.example.com}} cannot be looked up via DNS. Various alternatives are discussed at [https://serverfault.com/q/536043/117525].\n\n{{bc|1=\nMatch host internal.example.com !exec \"host internal.example.com\"\n  ProxyJump bastion.example.com\nHost internal.example.com\n  User foobar\n}}\n\n=== Private networks hostkeys verification ===\n\nBecause different servers on different networks are likely to share a common private IP address, you might want to handle them differently.\n\n{{Accuracy|The best solution would not need a warning to use something else in practice.}}\n\nThe best solution is to use the [[#Network specific configuration]] to use a different {{ic|UserKnownHostsFile}} depending on the network you are on. The second solution, best used as default when you are working on new/prototype networks, would be to simply ignore hostkeys for private networks:\n\n{{bc|1=\nHost 10.* 192.168.*.* 172.31.* 172.30.* 172.2?.* 172.1?.*\n    # Disable HostKey verification\n    # Trust HostKey automatically\n    StrictHostKeyChecking no\n    # Do not save the HostKey\n    UserKnownHostsFile=/dev/null\n    # Do not display: \"Warning: Permanently Added ...\"\n    LogLevel Error\n}}\n\n{{Accuracy|The {{ic|known_hosts}} file records an IP address even when you use hostname to access the server.}}\n\n{{Warning|In a production environment, make sure to either use the hostname to access the host and/or to use network specific known_hosts files.}}\n\n=== Run command at login ===\n\nIf you are using an interactive session, there are multiple ways to execute a command on login:\n\n* use the {{ic|authorized_keys}} file on the remote host (see {{man|8|sshd|AUTHORIZED_KEYS FILE FORMAT}})\n* use {{ic|~/.ssh/rc}} on the remote host if the server has enabled the {{ic|PermitUserRC}} option\n* use your shell configuration file on the remote host, e.g. {{ic|.bashrc}}\n\n=== Agent forwarding ===\n\nSSH agent forwarding allows you to use your local keys when connected to a server. It is [https://security.stackexchange.com/questions/7480/risks-of-ssh-to-an-untrusted-host#7504 recommended] to only enable agent forwarding for selected hosts.\n\n{{hc|~/.ssh/config|\nHost ''myserver.com''\n    ForwardAgent yes\n}}\n\nNext, configure an [[SSH agent]] and add your local key with ''ssh-add''.\n\nIf you now connect to a remote server you will be able to connect to other services using your local keys.\n\n=== Generating new keys ===\n\nNew server private keys can be generated by:\n\n# Deleting all the keys, e.g.: {{bc|# rm /etc/ssh/ssh_host_*_key*}}\n# [[Restart]]ing {{ic|sshdgenkeys.service}} or running {{ic|ssh-keygen -A}} as root.\n\n=== Run sshd as non-privileged user ===\n\nYou may want to run {{ic|sshd}} as non-privileged user in containers, or for testing, etc.\n\nSince non-privileged user cannot read host keys in {{ic|/etc/ssh}}, new host keys must be generated:\n\n $ ssh-keygen -q -N \"\" -t rsa -b 4096 -f ''/path/to/host/keys/ssh_host_rsa_key''\n $ ssh-keygen -q -N \"\" -t ecdsa -f ''/path/to/host/keys/ssh_host_ecdsa_key''\n $ ssh-keygen -q -N \"\" -t ed25519 -f ''/path/to/host/keys/ssh_host_ed25519_key''\n\nCreate an {{ic|sshd_config}} file. The example below uses a port higher than 1024, provides a new path to the host keys and disables PAM:\n\n{{hc|''/path/to/sshd_config''|\nPort 2022\nHostKey ''/path/to/host/keys/ssh_host_rsa_key''\nHostKey ''/path/to/host/keys/ssh_host_ecdsa_key''\nHostKey ''/path/to/host/keys/ssh/ssh_host_ed25519_key''\nUsePAM no\n}}\n\nRun ''sshd'' with the created config. The {{ic|-D}} flag disables daemon mode and {{ic|-e}} redirects output to stderr to allow easy monitoring.\n\n $ sshd -f ''/path/to/sshd_config'' -D -e\n\n== Troubleshooting ==\n\n=== Checklist ===\n\nCheck these simple issues before you look any further.\n\n# The configuration directory {{ic|~/.ssh}}, its contents should be accessible only by the user (check this on both the client and the server), and the user's home directory should only be writable by the user: {{bc|<nowiki>\n$ chmod go-w ~\n$ chmod 700 ~/.ssh\n$ chmod 600 ~/.ssh/*\n$ chown -R $USER ~/.ssh\n</nowiki>}}\n# Check that the client's public key (e.g. {{ic|id_rsa.pub}}) is in {{ic|~/.ssh/authorized_keys}} on the server.\n# Check that you did not limit SSH access with {{ic|AllowUsers}} or {{ic|AllowGroups}} in the [[#Configuration_2|server config]].\n# Check if the user has set a password. Sometimes new users who have not yet logged in to the server do not have a password.\n# [[Append]] {{ic|LogLevel DEBUG}} to {{ic|/etc/ssh/sshd_config}}.\n# Run {{ic|journalctl -xe}} as root for possible (error) messages.\n# [[Restart]] {{ic|sshd}} and logout/login on both client and server.\n\n=== Connection refused or timeout problem ===\n\n==== Port forwarding ====\n\nIf you are behind a NAT mode/router (which is likely unless you are on a VPS or publicly addressed host), make sure that your router is forwarding incoming ssh connections to your machine. Find the server's internal IP address with {{ic|$ ip addr}} and set up your router to forward TCP on your SSH port to that IP. [https://portforward.com portforward.com] can help with that.\n\n==== Is SSH running and listening? ====\n\nThe [[ss]] utility shows all the processes listening to a TCP port with the following command line:\n\n $ ss --tcp --listening\n\nIf the above command do not show the system is listening to the port {{ic|ssh}}, then SSH is not running: check the [[journal]] for errors etc.\n\n==== Are there firewall rules blocking the connection? ====\n\n[[Iptables]] may be blocking connections on port {{ic|22}}. Check this with:\n{{bc|# iptables -nvL}}\nand look for rules that might be dropping packets on the {{ic|INPUT}} chain. Then, if necessary, unblock the port with a command like: \n{{bc|\n# iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT\n}}\nFor more help configuring firewalls, see [[firewalls]].\n\n==== Is the traffic even getting to your computer? ====\n\nStart a traffic dump on the computer you are having problems with:\n\n # tcpdump -lnn -i any port ssh and tcp-syn\n\nThis should show some basic information, then wait for any matching traffic to happen before displaying it. Try your connection now. If you do not see any output when you attempt to connect, then something outside of your computer is blocking the traffic (e. g., hardware firewall, NAT router etc.).\n\n==== Your ISP or a third party blocking default port? ====\n\n{{Note|Try this step if you '''know''' you are not running any firewalls and you know you have configured the router for DMZ or have forwarded the port to your computer and it still does not work. Here you will find diagnostic steps and a possible solution.}}\n\nIn some cases, your ISP might block the default port (SSH port 22) so whatever you try (opening ports, hardening the stack, defending against flood attacks, et al) ends up useless. To confirm this, create a server on all interfaces (0.0.0.0) and connect remotely. \n\nIf you get an error message comparable to this:\n\n ssh: connect to host www.inet.hr port 22: Connection refused\n\nThat means the port is '''not''' being blocked by the ISP, but the server does not run SSH on that port (See [[wikipedia:Security through obscurity|security through obscurity]]).\n\nHowever, if you get an error message comparable to this:\n\n ssh: connect to host 111.222.333.444 port 22: Operation timed out \n\nThat means that something is rejecting your TCP traffic on port 22. Basically that port is stealth, either by your firewall or 3rd party intervention (like an ISP blocking and/or rejecting incoming traffic on port 22). If you know you are not running any firewall on your computer, and you know that Gremlins are not growing in your routers and switches, then your ISP is blocking the traffic.\n\nTo double check, you can run Wireshark on your server and listen to traffic on port 22. Since Wireshark is a Layer 2 Packet Sniffing utility, and TCP/UDP are Layer 3 and above (see [[wikipedia:Internet protocol suite|IP Network stack]]), if you do not receive anything while connecting remotely, a third party is most likely to be blocking the traffic on that port to your server.\n\n===== Diagnosis =====\n\n[[Install]] either {{Pkg|tcpdump}} or Wireshark with the {{Pkg|wireshark-cli}} package.\n\nFor tcpdump:\n\n # tcpdump -ni ''interface'' \"port 22\"\n\nFor Wireshark:\n\n $ tshark -f \"tcp port 22\" -i ''interface''\n\nwhere {{ic|''interface''}} is the network interface for a WAN connection (see {{ic|ip a}} to check). If you are not receiving any packets while trying to connect remotely, you can be very sure that your ISP is blocking the incoming traffic on port 22.\n\n===== Possible solution =====\n\nThe solution is just to use some other port that the ISP is not blocking. Open the {{ic|/etc/ssh/sshd_config}} and configure the file to use different ports. For example, add:\n\n Port 22\n Port 1234\n\nAlso make sure that other \"Port\" configuration lines in the file are commented out. Just commenting \"Port 22\" and putting \"Port 1234\" will not solve the issue because then sshd will only listen on port 1234. Use both lines to run the SSH server on both ports. \n\n[[Restart]] the server {{ic|sshd.service}} and you are almost done. You still have to configure your client(s) to use the other port instead of the default port. There are numerous solutions to that problem, but let us cover two of them here.\n\n==== Read from socket failed: connection reset by peer ====\n\nRecent versions of OpenSSH sometimes fail with the above error message when connecting to older ssh servers. This can be worked around by setting various [[#Configuration|client options]] for that host. See {{man|5|ssh_config}} for more information about the following options.\n\nThe problem could be the {{ic|ecdsa-sha2-nistp*-cert-v01@openssh}} elliptical host key algorithms. These can be disabled by setting {{ic|HostKeyAlgorithms}} to a list excluding those algorithms. On the client side, the {{ic|HostKeyAlgorithms}} that the client wants to use can also be set by preceding the {{ic|HostKeyAlgorithms}} list with a {{ic|-}} to remove the specified algorithms (including wildcards) from the default set (see {{ic|ssh_config(5)}} man page).  \nYou can check the actually used host key algorithm with {{ic|ssh -v server_to_connect_to}} in the line that contains {{ic|kex: host key algorithm:}}.\n\nIf that does not work, it could be that the list of ciphers is too long. Set the {{ic|Ciphers}} option to a shorter list (fewer than 80 characters should be enough). Similarly, you can also try shortening the list of {{ic|MACs}}.\n\nSee also the [https://web.archive.org/web/20161201015151/https://www.gossamer-threads.com/lists/openssh/dev/51339 discussion] on the OpenSSH bug forum.\n\n=== \"[your shell]: No such file or directory\" / ssh_exchange_identification problem ===\n\nOne possible cause for this is the need of certain SSH clients to find an absolute path (one returned by {{Ic|whereis -b [your shell]}}, for instance) in {{Ic|$SHELL}}, even if the shell's binary is located in one of the {{Ic|$PATH}} entries.\n\n=== \"Terminal unknown\" or  \"Error opening terminal\" error message ===\n\nIf you receive the above errors upon logging in, this means the server does not recognize your terminal. Ncurses applications like nano may fail with the message \"Error opening terminal\".\n\nThe correct solution is to install the client terminal's terminfo file on the server. This tells console programs on the server how to correctly interact with your terminal. You can get info about current terminfo using {{ic|$ infocmp}} and then find out [[pacman#Querying package databases|which package owns it]].\n\nIf you cannot [[install]] it normally, you can copy your terminfo to your home directory on the server:\n\n $ ssh myserver mkdir -p  ~/.terminfo/${TERM:0:1}\n $ scp /usr/share/terminfo/${TERM:0:1}/$TERM myserver:~/.terminfo/${TERM:0:1}/\n\nAfter logging in and out from the server the problem should be fixed.\n\n==== TERM hack ====\n\n{{Note|This should only be used as a last resort.}}\n\nAlternatively, you can simply set {{ic|1=TERM=xterm}} in your environment on the server (e.g. in {{ic|.bash_profile}}). This will silence the error and allow ncurses applications to run again, but you may experience strange behavior and graphical glitches unless your terminal's control sequences exactly match xterm's.\n\n=== Connection closed by x.x.x.x [preauth] ===\n\nIf you are seeing this error in your sshd logs, make sure you have set a valid HostKey\n\n HostKey /etc/ssh/ssh_host_rsa_key\n\n=== subsystem request failed ===\n\nSince ''OpenSSH'' 8.8, ''scp'' uses ''SFTP'' as the default protocol for data transfers by requesting the subsystem named {{ic|sftp}}. If you run ''scp'' in verbose mode, {{ic|scp -v}}, you can determine which subsystem your client is using (e.g. {{ic|Sending subsystem: <subsystem-name>}}). Errors such as {{ic|subsystem request failed on channel 0}} may be fixed by configuring the server's Subsystem settings: {{man|5|sshd_config|Subsystem}}. The server configuration should resemble the example below.\n\n{{hc|/etc/ssh/sshd_config|\n...\nSubsystem subsystem-name /path/to/subsystem-executable\n...\n}}\n\n=== id_dsa refused by OpenSSH 7.0 ===\n\nOpenSSH 7.0 deprecated DSA public keys for security reasons. If you absolutely must enable them, set the [[#Configuration|configuration]] option {{ic|PubkeyAcceptedKeyTypes +ssh-dss}} (https://www.openssh.com/legacy.html does not mention this).\n\n=== No matching key exchange method found by OpenSSH 7.0 ===\n\nOpenSSH 7.0 deprecated the diffie-hellman-group1-sha1 key algorithm because it is weak and within theoretical range of the so-called Logjam attack (see https://www.openssh.com/legacy.html). If the key algorithm is needed for a particular host, ssh will produce an error message like this:\n\n Unable to negotiate with 127.0.0.1: no matching key exchange method found.\n Their offer: diffie-hellman-group1-sha1\n\nThe best resolution for these failures is to upgrade/configure the server to not use deprecated algorithms. If that is not possible, you can force the client to reenable the algorithm with the [[#Configuration|client option]] {{ic|KexAlgorithms +diffie-hellman-group1-sha1}}.\n\n=== tmux/screen session killed when disconnecting from SSH ===\n\nIf your processes get killed at the end of the session, it is possible that you are using socket activation and it gets killed by {{Pkg|systemd}} when it notices that the SSH session process exited. In that case there are two solutions. One is to avoid using socket activation by using {{ic|ssh.service}} instead of {{ic|ssh.socket}}. The other is to set {{ic|1=KillMode=process}} in the Service section of {{ic|ssh@.service}}.\n\nThe {{ic|1=KillMode=process}} setting may also be useful with the classic {{ic|ssh.service}}, as it avoids killing the SSH session process or the {{Pkg|screen}} or {{Pkg|tmux}} processes when the server gets stopped or restarted.\n\n=== SSH session stops responding ===\n\nSSH responds to [[Wikipedia:Software flow control|flow control commands]] {{ic|XON}} and {{ic|XOFF}}. It will freeze/hang/stop responding when you hit {{ic|Ctrl+s}}. Use {{ic|Ctrl+q}} to resume your session.\n\n=== Broken pipe ===\n\nIf you attempt to create a connection which results in a {{ic|Broken pipe}} response for {{ic|packet_write_wait}}, you should reattempt the connection in debug mode and see if the output ends in error:\n{{bc|debug3: send packet: type 1\npacket_write_wait: Connection to A.B.C.D port 22: Broken pipe}}\nThe {{ic|send packet}} line above indicates that the reply packet was never received. So, it follows that this is a ''QoS'' issue. To decrease the likely-hood of a packet being dropped, set {{ic|IPQoS}}:\n{{hc|/etc/ssh/ssh_config|Match all\n    IPQoS reliability}}\nThe {{ic|reliability}} ({{ic|0x04}}) type-of-service should resolve the issue, as well as {{ic|0x00}} and {{ic|throughput}} ({{ic|0x08}}).\n\n=== Slow daemon startup after reboot ===\n\n{{Out of date|No longer true since kernel 5.6}}\n\nIf you are experiencing excessively long daemon startup times after reboots (e.g. several minutes before the daemon starts accepting connections), especially on headless or virtualized servers, it may be due to a lack of entropy.[https://bbs.archlinux.org/viewtopic.php?id=241954] This can be remedied by installing either [[Rng-tools]] or [[Haveged]], as appropriate for your system. However, take note of the associated security implications discussed in each package's respective wiki page.\n\n=== Terminate unresponsive SSH connection ===\n\nIf a client session is no longer responding and cannot be terminated by instructing the running program (e.g. [[shell]]), you can still terminate the session by pressing {{ic|Enter}}, {{ic|~}} and {{ic|.}} one after another in that order.\n\nThe {{ic|~}} is a pseudo-terminal escape character (see {{man|1|ssh|ESCAPE CHARACTERS}}), which can be added multiple times depending on the client session to terminate. For example, if you connected from A to B and then from B to C and the session from B to C freezes, you can terminate it by pressing {{ic|Enter}} and typing {{ic|~~.}}, which will leave you in a working session on B.\n\n=== WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! ===\n\nIf the client warns that the key of an ssh server has changed, you should verify that the newly offered key really belongs to the server operator via an authenticated (not necessarily encrypted) channel. Then remove the old key from the {{ic|known_hosts}} file with {{ic|ssh-keygen -R $SSH_HOST}} and accept the new key as if it was a new server.\n\n=== Connecting to a remote without the appropriate terminfo entry ===\n\nWhen connecting to hosts that do not have a terminfo entry for your terminal, for example, when using a terminal emulator whose terminfo entry is not shipped with {{Pkg|ncurses}} (e.g. [[kitty]] and [[rxvt-unicode]]), or when connecting to hosts with a limited terminfo database (e.g. systems running [[Wikipedia:OpenWrt|OpenWrt]]), various issues will occur with software that relies on {{man|5|terminfo}}.\n\nA proper solution is to place the appropriate terminfo entry on the host. If that is not feasible, an alternative is to set {{ic|TERM}} to a value that is both supported by the remote host and compatible with the terminal.\n\nSince OpenSSH 8.7, a custom {{ic|TERM}} environment variable can be passed to remote hosts with a simple configuration snippet:\n\n{{hc|~/.ssh/config|2=\nHost example.com\n  SetEnv TERM=xterm-256color\n}}\n\n=== Connection through jump host fails with \"bash: No such file or directory\" ===\n\nIf you do not have the {{ic|SHELL}} environment variable set to a full valid path (on the jump server), connection will fail with an error message simmilar to this one:\n\n bash: No such file or directory\n kex_exchange_identification: Connection closed by remote host\n Connection closed by UNKNOWN port 65535\n\nYou can simply solve this by setting your {{ic|SHELL}} to a full path name of a shell that will also be valid on the jump server or by setting a specific {{ic|SHELL}} variable for each server in your {{ic|~/.ssh/config}} file.\n\n== See also ==\n\n* [[Wikibooks:OpenSSH]]\n* [https://www.la-samhna.de/library/brutessh.html Defending against brute force ssh attacks]\n* OpenSSH key management: [https://www.ibm.com/developerworks/library/l-keyc/index.html Part 1] on IBM developerWorks, [[Funtoo:OpenSSH Key Management, Part 2|Part 2]], [[Funtoo:OpenSSH Key Management, Part 3|Part 3]] on funtoo.org\n* [https://stribika.github.io/2015/01/04/secure-secure-shell.html Secure Secure Shell]"
                    }
                ]
            },
            "4282": {
                "pageid": 4282,
                "ns": 0,
                "title": "Domain name resolution",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Domain Name System]]\n[[Category:Network configuration]]\n[[de:Resolv.conf]]\n[[fr:Domain name resolution]]\n[[ja:\u30c9\u30e1\u30a4\u30f3\u540d\u524d\u89e3\u6c7a]]\n[[pt:Domain name resolution]]\n[[ru:Domain name resolution]]\n[[zh-hans:Domain name resolution]]\n{{Related articles start}}\n{{Related|Network configuration}}\n{{Related|DNS over HTTPS servers}}\n{{Related articles end}}\nIn general, a [[Wikipedia:Domain name|domain name]] represents an IP address and is associated to it in the [[Wikipedia:Domain Name System|Domain Name System]] (DNS).\nThis article explains how to configure domain name resolution and resolve domain names.\n\n== Name Service Switch ==\n\n{{Expansion|Mention {{Pkg|nss-mdns}}, {{AUR|nss-tls-git}} and others.}}\n\nThe [[Wikipedia:Name Service Switch|Name Service Switch]] (NSS) facility is part of the GNU C Library ({{Pkg|glibc}}) and backs the {{man|3|getaddrinfo}} API, used to resolve domain names. NSS allows system databases to be provided by separate services, whose search order can be configured by the administrator in {{man|5|nsswitch.conf}}. The database responsible for domain name resolution is the ''hosts'' database, for which glibc offers the following services:\n\n* ''files'': reads the {{ic|/etc/hosts}} file, see {{man|5|hosts}}\n* ''dns'': the [[#Glibc resolver|glibc resolver]] which reads {{ic|/etc/resolv.conf}}, see {{man|5|resolv.conf}}\n\n[[systemd]] provides three NSS services for hostname resolution:\n\n* {{man|8|nss-resolve}} \u2014 a caching DNS stub resolver, described in [[systemd-resolved]]\n* {{man|8|nss-myhostname}} \u2014 provides local hostname resolution without having to edit {{ic|/etc/hosts}}\n* {{man|8|nss-mymachines}} \u2014 provides hostname resolution for the names of local {{man|8|systemd-machined}} containers\n\n=== Resolve a domain name using NSS ===\n\nNSS databases can be queried with {{man|1|getent}}. A domain name can be resolved through NSS using:\n\n $ getent ahosts ''domain_name''\n\n{{Note|While most programs resolve domain names using NSS, some may read {{ic|/etc/resolv.conf}} and/or {{ic|/etc/hosts}} directly. See [[Network configuration#localhost is resolved over the network]].}}\n\n== Glibc resolver ==\n\nThe glibc resolver reads {{ic|/etc/resolv.conf}} for every resolution to determine the nameservers and options to use. \n\n{{man|5|resolv.conf}} lists nameservers together with some configuration options.\nNameservers listed first are tried first, up to three nameservers may be listed. Lines starting with a number sign ({{ic|#}}) are ignored.\n\n{{Note|The glibc resolver does not cache queries. To improve query lookup time you can set up a caching resolver. Glibc resolver also can not validate DNSSEC. A DNSSEC capable validator resolver is required for that one. See [[#DNS servers]] for more information.}}\n\n=== Overwriting of /etc/resolv.conf ===\n\n[[Network manager]]s tend to overwrite {{ic|/etc/resolv.conf}}, for specifics see the corresponding section:\n\n* [[dhcpcd#/etc/resolv.conf]]\n* [[Netctl#/etc/resolv.conf]]\n* [[NetworkManager#/etc/resolv.conf]]\n* [[ConnMan#/etc/resolv.conf]]\n\nTo prevent programs from overwriting {{ic|/etc/resolv.conf}}, it is also possible to write-protect it by setting the immutable [[file attribute]]:\n\n # chattr +i /etc/resolv.conf\n\n{{Tip|If you want multiple processes to write to {{ic|/etc/resolv.conf}}, you can use [[resolvconf]].}}\n\n==== Alternative using nmcli ====\n\n{{merge|NetworkManager#/etc/resolv.conf|NetworkManager has a dedicated section for this topic.}}\n\nIf you use [[NetworkManager]], {{man|1|nmcli}} can be used to set persistent options for {{ic|/etc/resolv.conf}}. Change \"Wired\" to the name of your connection. Example:\n\n # nmcli con mod Wired +ipv4.dns-options 'rotate,single-request,timeout:1'\n\nFor more options have a look at the man pages of {{man|1|nmcli}}, {{man|5|nm-settings-nmcli}} and {{man|5|resolv.conf}}.\n\n=== Limit lookup time ===\n\nIf you are confronted with a very long hostname lookup (may it be in [[pacman]] or while browsing), it often helps to define a small timeout after which an alternative nameserver is used. To do so, put the following in {{ic|/etc/resolv.conf}}.\n\n{{hc|/etc/resolv.conf|options timeout:1}}\n\n=== Hostname lookup delayed with IPv6 ===\n\nIf you experience a 5 second delay when resolving hostnames it might be due to a DNS-server/Firewall misbehaving and only giving one reply to a parallel A and AAAA request.[https://udrepper.livejournal.com/20948.html] You can fix that by setting the following option in {{ic|/etc/resolv.conf}}:\n\n{{hc|/etc/resolv.conf|options single-request}}\n\n=== Local domain names ===\n\nTo be able to use the hostname of local machine names without the fully qualified domain name, add a line to {{ic|/etc/resolv.conf}} with the local domain such as:\n\n{{hc|/etc/resolv.conf|search ''example.org''}}\n\nThat way you can refer to local hosts such as {{ic|mainmachine1.example.org}} as simply {{ic|mainmachine1}} when using the ''ssh'' command, but the [[#Lookup utilities|drill]] command still requires the fully qualified domain names in order to perform lookups.\n\n== Lookup utilities ==\n\nTo query specific DNS servers and DNS/[[DNSSEC]] records you can use dedicated DNS lookup utilities. These tools implement DNS themselves and do not use [[#Name Service Switch|NSS]].\n\n{{Pkg|ldns}} provides {{man|1|drill}}, which is a tool designed to retrieve information out of the DNS.\n\nFor example, to query a specific nameserver with ''drill'' for the TXT records of a domain:\n\n $ drill @''nameserver'' TXT ''domain''\n\nUnless a DNS server is specified, ''drill'' will use the nameservers defined in {{ic|/etc/resolv.conf}}.\n\n{{Tip|Some DNS servers ship with their own DNS lookup utilities. E.g.\n\n* {{Pkg|knot}} provides {{man|1|khost}} and {{man|1|kdig}}.\n* [[Unbound]] has {{man|1|unbound-host}}.\n* [[BIND]] has {{man|1|dig}}, {{man|1|host}}, {{man|1|nslookup}} and a bunch of {{ic|dnssec-}} tools.\n* [[systemd-resolved]] has {{man|1|resolvectl}}, which provides a {{ic|query}} sub-command for DNS lookup.\n\n}}\n\n== Resolver performance ==\n\nThe Glibc resolver does not cache queries. To implement local caching, use [[systemd-resolved]] or set up a local caching [[#DNS servers|DNS server]] and use it as the name server by setting {{ic|127.0.0.1}} and {{ic|::1}} as the name servers in {{ic|/etc/resolv.conf}} or in {{ic|/etc/resolvconf.conf}} if using [[openresolv]].\n\n{{Tip|\n* The ''drill'' or ''dig'' [[#Lookup utilities|lookup utilities]] report the query time.\n* A router usually sets its own caching resolver as the network's DNS server thus providing DNS cache for the whole network. \n* If it takes too long to switch to the next DNS server you can try [[#Limit lookup time|decreasing the timeout]].}}\n\n== Privacy and security ==\n\nThe DNS protocol is unencrypted and does not account for confidentiality, integrity or authentication, so if you use an untrusted network or a malicious ISP, your DNS queries can be eavesdropped and the responses [[Wikipedia:Man-in-the-middle attack|manipulated]]. Furthermore, DNS servers can conduct [[Wikipedia:DNS hijacking|DNS hijacking]].\n\nYou need to trust your DNS server to treat your queries confidentially. DNS servers are provided by ISPs and [[#Third-party DNS services|third-parties]]. Alternatively you can run your own [[#DNS servers|recursive name server]], which however takes more effort. If you use a [[DHCP]] client in untrusted networks, be sure to set static name servers to avoid using and being subject to arbitrary DNS servers. To secure your communication with a remote DNS server you can use an encrypted protocol, like [[Wikipedia:DNS over TLS|DNS over TLS]] ([[RFC:7858|RFC 7858]]), [[Wikipedia:DNS over HTTPS|DNS over HTTPS]] ([[RFC:8484|RFC 8484]]), or [[Wikipedia:DNSCrypt|DNSCrypt]], provided that both the upstream server and your [[#DNS servers|resolver]] support the protocol. An alternative can be a dedicated software to encrypt and decrypt the communication, such as [[stunnel]]. To verify that responses are actually from [[Wikipedia:Authoritative name server|authoritative name servers]], you can validate [[DNSSEC]], provided that both the upstream server(s) and your [[#DNS servers|resolver]] support it.\n\nAlthough one may use an encrypted DNS resolver, the browser still leaks the domain names in the [[Wikipedia:Server Name Indication|Server Name Indication]] when requesting the website certificate. This leak can be checked using the [[Wireshark]] filter {{ic|tls.handshake.extensions_server_name_len > 0}}, or using the command line below. A proposed solution is to use the [[Wikipedia:Server Name Indication#Encrypted Client Hello|Encrypted Client Hello (ECH)]], a TLS 1.3 protocol extension.\n\n # tshark -p -Tfields -e tls.handshake.extensions_server_name -Y 'tls.handshake.extensions_server_name_len>0'\n\n=== Application-level DNS ===\n\nBe aware that some client software, such as major web browsers[https://support.mozilla.org/en-US/kb/firefox-dns-over-https][https://www.chromium.org/developers/dns-over-https], are starting to implement DNS over HTTPS. While the encryption of queries may often be seen as a bonus, it also means the software sidetracks queries around the system resolver configuration.[https://blog.powerdns.com/2019/09/25/centralised-doh-is-bad-for-privacy-in-2019-and-beyond/]\n\n[[Firefox]] provides [https://support.mozilla.org/en-US/kb/firefox-dns-over-https#w_manually-enabling-and-disabling-dns-over-https configuration options] to enable or disable DNS over HTTPS and select a DNS server. Mozilla has setup a [[Firefox/Privacy#Disable/enforce 'Trusted Recursive Resolver'|Trusted Recursive Resolver (TRR)]] programme with transparency information on their default providers. It is notable that Firefox supports and automatically enables the Encrypted Client Hello (ECH) for TRR providers, see [[Firefox/Privacy#Encrypted Client Hello]].\n\n[[Chromium]] will examine the user's system resolver and enable DNS over HTTPS if the system resolver addresses are known to also provide DNS over HTTPS. See [https://blog.chromium.org/2020/05/a-safer-and-more-private-browsing-DoH.html this blog post] for more information and how DNS over HTTPS can be disabled.\n\nMozilla [https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https has proposed] universally disabling application-level DNS if the system resolver cannot resolve the domain {{ic|use-application-dns.net}}. Currently, this is only implemented in Firefox.\n\n=== Oblivious DNS ===\n\nOblivious DNS ([[RFC:9230]]) is a system which addresses a number of DNS privacy concerns. See [https://blog.cloudflare.com/oblivious-dns/ Cloudflare's article] for more information.\n\n== Third-party DNS services ==\n\n{{Note|Before using a third-party DNS service, check its privacy policy for information on how user data is handled. User data has value and can be sold to other parties.}}\n\nThere are various [[Wikipedia:Public recursive name server#List of public DNS service operators|third-party DNS services]] available, some of which also have dedicated software:\n\n* {{App|[[cloudflared]]|A DNS client for Cloudflare DNS over HTTPS|https://developers.cloudflare.com/1.1.1.1/dns-over-https/cloudflared-proxy|{{Pkg|cloudflared}}}}\n* {{App|opennic-up|Automates the renewal of the DNS servers with the most responsive OpenNIC servers|https://github.com/kewlfft/opennic-up|{{AUR|opennic-up}}}}\n* {{App|nextdns|A DNS-over-HTTPS CLI client for NextDNS|https://github.com/nextdns/nextdns|{{AUR|nextdns}}}}\n\nYou can use [https://github.com/cleanbrowsing/dnsperftest dnsperftest] to test the performance of the most popular DNS resolvers from your location. [https://www.dnsperf.com/#!dns-resolvers dnsperf.com] provides global benchmarks between providers.\n\n== DNS servers ==\n\nDNS servers can be [[Wikipedia:Authoritative name server|authoritative]] and [[Wikipedia:Name server#Recursive query|recursive]]. If they are neither, they are called '''stub resolvers''' and simply forward all queries to another recursive name server. Stub resolvers are typically used to introduce DNS caching on the local host or network. Note that the same can also be achieved with a fully-fledged name server. This section compares the available DNS servers, for a more detailed comparison, refer to [[Wikipedia:Comparison of DNS server software]].\n\n{{Expansion|Fill in the unknowns.}}\n\n{| class=\"wikitable sortable\" style=\"text-align:center; display:block; overflow-x:scroll; border:none; padding:0;\"\n! rowspan=2 | Name !! rowspan=2 | Package !! colspan=4 | Capabilities !! rowspan=2 | [[resolvconf]] !! colspan=5 | Supported protocols\n|-\n! [[Wikipedia:Authoritative name server|Authoritative]] !! [[Wikipedia:Name server#Recursive query|Recursive]] !! [[Wikipedia:Name server#Caching name server|Cache]] !!  [[Wikipedia:Domain Name System Security Extensions#The lookup procedure|Validates]]<br>[[DNSSEC]]  !! [[Wikipedia:Domain Name System|DNS]] !! [[Wikipedia:DNSCrypt|DNSCrypt]] !! [[Wikipedia:DNS over TLS|DNS<br>over TLS]] !! [[Wikipedia:DNS over HTTPS|DNS<br>over HTTPS]] !! [https://datatracker.ietf.org/doc/html/rfc9250 DNS<br>over QUIC]\n|-\n! [[BIND]]\n| {{Pkg|bind}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{No}} || {{Y|Server<sup>1</sup>}} || {{Y|Server}} || {{No|https://gitlab.isc.org/isc-projects/bind9/-/issues/3635}}\n|-\n! [[CoreDNS]]\n| {{AUR|coredns}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No|https://github.com/coredns/coredns/issues/5583}}\n|-\n! [[DNS-over-HTTPS]]\n| {{Pkg|dns-over-https}} || {{No}} || {{No}} || {{No}} || {{No}} || ? || ? || {{No}} || {{No|https://github.com/m13253/dns-over-https/issues/104}} || {{Yes}} || {{No|https://github.com/m13253/dns-over-https/issues/129}}\n|-\n! [https://maradns.samiam.org/deadwood/doc/Deadwood.html Deadwood] ([[Wikipedia:MaraDNS|MaraDNS]] recursor)\n| {{AUR|maradns}} || {{No}} || {{Yes}} || {{Yes}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}}\n|-\n! [[dnscrypt-proxy]]\n| {{Pkg|dnscrypt-proxy}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{No}} || {{Y|Server}} || {{Y|Resolver}} || {{No|https://github.com/DNSCrypt/dnscrypt-proxy/issues/1124}} || {{Yes}} || ?\n|-\n! [[dnsmasq]]\n| {{Pkg|dnsmasq}} || {{Y|Partial}}<sup>2</sup> || {{No}} || {{Yes}} || {{Yes}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{No}} || {{No|https://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2018q2/012131.html}} || {{No}} || {{No}}\n|-\n! [https://github.com/AdguardTeam/dnsproxy dnsproxy]\n| {{AUR|dnsproxy}} || {{No}} || {{No}} || {{Yes}} || {{No|https://github.com/AdguardTeam/dnsproxy/issues/10}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}}\n|-\n! [[Knot Resolver]]\n| {{Pkg|knot-resolver}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Y|[https://knot-resolver.readthedocs.io/en/stable/daemon-bindings-net_tlssrv.html#dns-over-https-doh Server]}} || {{No|https://gitlab.nic.cz/knot/knot-resolver/-/issues/548}}\n|-\n! [[pdnsd]]\n| {{Pkg|pdnsd}} || {{Y|Partial}}<sup>2</sup> || {{Yes}} || {{G|Permanent}} || {{No}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{No}} || {{No}} || {{No}} || {{No}}\n|-\n! [[Wikipedia:PowerDNS#Recursor|PowerDNS Recursor]]\n| {{Pkg|powerdns-recursor}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{No}} || {{Y|[https://github.com/PowerDNS/pdns/pull/10338 Partial]}} || {{No}} || ?\n|-\n! [[Rescached]]\n| {{AUR|rescached-git}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Yes|https://github.com/shuLhan/rescached-go#integration-with-openresolv}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{No}}\n|-\n! [https://github.com/folbricht/routedns RouteDNS]\n| {{AUR|routedns-git}} || {{No}} || {{No}} || {{Yes}}<sup>3</sup> || {{No|https://github.com/folbricht/routedns/issues/123}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || {{Yes}} || {{Yes}}\n|-\n! [https://github.com/pymumu/smartdns SmartDNS]\n| {{Pkg|smartdns}} || {{No}} || {{No}} || {{Yes}} || {{No|https://github.com/pymumu/smartdns/issues/19}} || ? || {{Yes}} || {{No}} || {{Y|Resolver}} || {{Y|Resolver}} || {{No}}\n|-\n! [[Stubby]]\n| {{Pkg|stubby}} || {{No}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Y|Server}} || {{No}} || {{Y|Resolver}} || {{No|https://github.com/getdnsapi/stubby/issues/278}} || {{No|https://github.com/getdnsapi/stubby/issues/288}}\n|-\n!style=\"white-space: nowrap;\"| [[systemd-resolved]]\n| {{Pkg|systemd}} || {{No}} || {{No}} || {{Yes}} || {{Yes}} || {{G|[[systemd-resolvconf|Yes]]}} || {{Y|Resolver and [https://github.com/systemd/systemd/issues/4621#issuecomment-260050033 limited server]}} || {{No}} || {{Y|Resolver}} || {{No|https://github.com/systemd/systemd/issues/8639}} || {{No|https://github.com/systemd/systemd/issues/23770}}\n|-\n! [[Unbound]]\n| {{Pkg|unbound}} || {{Y|Partial}} || {{Yes}} || {{Yes}}<sup>3</sup> || {{Yes}} || {{G|[[openresolv#Subscribers|Yes]]}} || {{Yes}} || {{Y|Server}} || {{Yes}} || {{Y|[https://github.com/NLnetLabs/unbound/issues/308 Server]}} || {{No|https://github.com/NLnetLabs/unbound/issues/743}}\n|}\n\n# BIND can serve both DNS over TLS and DNS over HTTPS (see [https://downloads.isc.org/isc/bind9/9.18.0/doc/arm/html/reference.html#tls tls{}] and [https://downloads.isc.org/isc/bind9/9.18.0/doc/arm/html/reference.html#interfaces listen-on]), but cannot yet forward queries to a DNS over TLS/DNS over HTTPS upstream. The ''dig'' tool can make queries over DNS over TLS and DNS over HTTPS (using {{ic|+tls}} and {{ic|+https}} options), though [https://gitlab.isc.org/isc-projects/bind9/-/issues/3163 without any certificate checks].\n# From [[Wikipedia:Comparison of DNS server software#cite_note-masqauth-32|Wikipedia]]: limited authoritative support, intended for internal network use rather than public Internet use.\n# Supports persistent cache using the [[Redis]] backend.\n\n=== Authoritative-only servers ===\n\n{| class=\"wikitable sortable\" style=\"text-align:center\"\n! Name !! Package !!  [[DNSSEC]] !! Geographic<br>balancing\n|-\n! gdnsd\n| {{Pkg|gdnsd}} || {{No}} || {{Yes}}\n|-\n! [[Wikipedia:Knot DNS|Knot DNS]]\n| {{Pkg|knot}} || {{Yes}} || {{Yes|https://www.knot-dns.cz/docs/latest/singlehtml/#geoip-geography-based-responses}}\n|-\n! [[Wikipedia:MaraDNS|MaraDNS]]\n| {{AUR|maradns}} || {{No}} || ?\n|-\n! [[NSD]]\n| {{Pkg|nsd}} || {{Yes}} || {{No}}\n|-\n! [[PowerDNS]]\n| {{Pkg|powerdns}} || {{Yes}} || {{Yes}}\n|}\n\n=== Conditional forwarding ===\n\nIt is possible to use specific DNS resolvers when querying specific domain names. This is particularly useful when connecting to a VPN, so that queries to the VPN network are resolved by the VPN's DNS, while queries to the internet will still be resolved by your standard DNS resolver. It can also be used on local networks.\n\nTo implement it, you need to use a [[#DNS servers|local resolver]] because glibc does not support it.\n\nIn a dynamic environment (laptops and to some extents desktops), you need to configure your resolver based on the network(s) you are connected to. The best way to do that is to use [[openresolv]] because it supports [[openresolv#Subscribers|multiple subscribers]]. Some [[network manager]]s support it, either through openresolv, or by configuring the resolver directly. NetworkManager [[NetworkManager#DNS caching and conditional forwarding|supports conditional forwarding without openresolv]].\n\n{{Note|Although you could use other conditions for forwarding (for example, source IP address), \"conditional forwarding\" appears to be the name used for the \"domain queried\" condition.}}\n\n== See also ==\n\n* [https://www.tldp.org/LDP/nag2/x-087-2-resolv.html Linux Network Administrators Guide]\n* [https://www.debian.org/doc/manuals/debian-handbook/sect.hostname-name-service.en.html#sect.name-resolution Debian Handbook]\n* [[RFC:7706]] - Decreasing Access Time to Root Servers by Running One on Loopback\n* [http://linux-ip.net/pages/diagrams.html#domain-name-system-overview Domain name system overview] - Diagram about DNS\n* [[Alternative DNS services]]"
                    }
                ]
            },
            "4426": {
                "pageid": 4426,
                "ns": 0,
                "title": "Uniform look for Qt and GTK applications",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Widget toolkits]]\n[[Category:Eye candy]]\n[[ja:Qt \u3068 GTK \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5916\u89b3\u306e\u7d71\u5408]]\n[[ru:Uniform look for Qt and GTK applications]]\n[[zh-hans:Uniform look for Qt and GTK applications]]\n{{Related articles start}}\n{{Related|GTK}}\n{{Related|Qt}}\n{{Related articles end}}\n[[Qt]] and [[GTK]] based programs both use a different widget toolkit to render the graphical user interface. Each come with different themes, styles and icon sets by default, among other things, so the \"look and feel\" differ significantly. This article will help you make your Qt and GTK applications look similar for a more streamlined and integrated desktop experience.\n\n== Overview ==\n\nTo get a similar look between the toolkits, you will most likely have to modify the following:\n* '''Theme''': The custom appearance of an application, widget set, etc. It usually consists of a style, an icon theme and a color theme.\n* '''Style''': The graphical layout and look of the widget set.\n* '''Icon Theme''': A set of global icons.\n* '''Color Theme''': A set of global colors that are used in conjunction with the style.\n\nYou can choose various approaches:\n* Modify [[#Styles for both Qt and GTK|GTK and Qt styles]] separately with the tools listed below for each toolkit and aim for choosing similarly looking themes (style, colors, icons, cursors, fonts).\n* Use a special [[#Theme engines|theme engine]], which intermediates the modification of the other graphical toolkit to match your main toolkit.\n\n== Styles for both Qt and GTK ==\n\nThere are widget style sets available for the purpose of integration, where builds are written and provided for both Qt and GTK, all major versions included. With these, you can have one look for all applications regardless of the toolkit they had been written with.\n\n{{Tip|You may want to apply user defined styles to root applications, see [[GTK#Theme not applied to root applications]] and [[Qt#Theme not applied to root applications]].}}\n{{Note|1=Since version 3.16, GTK 3 [https://bbs.archlinux.org/viewtopic.php?pid=1518404#p1518404 does not support] non-CSS themes, hence previous solutions such as Oxygen-Gtk are [https://bugs.kde.org/show_bug.cgi?id=340288 no longer viable] options.}}\n\n=== Themes originally Qt based for GTK programs ===\n\nThese are themes originally created for a Qt environment, but was later ported to GTK.\n\n==== Breeze ====\n\nBreeze is the default Qt style of KDE Plasma. It can be installed with the {{Pkg|breeze}} package and the {{Pkg|breeze-gtk}} package for GTK 2 and GTK 3.\n\nOnce installed, you can use one of the many [[GTK#Configuration tools|GTK configuration tools]] to change the GTK theme. \n\nIf running KDE Plasma, install {{pkg|kde-gtk-config}}, log-out and log-in again, and then go to ''System Settings > Appearance > Application Style  > Configure GNOME/GTK Application Style\u2026''. Fonts, icon themes, cursors, and widget styles set in System Settings affect GTK settings automatically; only the GTK theme should be set manually using the previously mentioned module.\n\n=== Themes originally GTK based for Qt programs ===\n\nThese are themes originally created for a GTK environment, but was later ported to Qt.\n\n==== Adwaita ====\n\n{{Out of date|Adwaita-qt project is unmaintained and no longer actively developed. [https://github.com/FedoraQt/adwaita-qt#readme]}}\n\nAdwaita is the default GNOME theme. The GTK 3 version is included in the {{Pkg|gtk3}} package, while the GTK 2 version is in {{Pkg|gnome-themes-extra}}. [https://github.com/MartinBriza/adwaita-qt adwaita-qt] is a Qt port of the Adwaita theme. Unlike [[#QGtkStyle]], which mimics the GTK 2 theme, it provides a native Qt style made to look like the GTK 3 Adwaita. It can be [[install|installed]] with the {{AUR|adwaita-qt4}}, {{AUR|adwaita-qt5-git}} and {{AUR|adwaita-qt6-git}} packages for the Qt 4, 5 and 6 versions, respectively.\n\nTo set the Qt style as default:\n\n* For Qt 5, it can be enabled by setting the following [[Environment variables#Graphical environment|environment variable]]: {{ic|1=QT_STYLE_OVERRIDE=adwaita}}. Alternatively, use {{Pkg|qt5ct}} package. For more detailed instructions, see [[Qt#Configuration of Qt 5/6 applications under environments other than KDE Plasma]].\n* For Qt4, it can be enabled with ''Qt Configuration'' ({{ic|qtconfig-qt4}}), choose ''adwaita'' under ''Appearance > GUI Style''. Alternatively, edit the {{ic|/etc/xdg/Trolltech.conf}} (system-wide) or {{ic|~/.config/Trolltech.conf}} (user-specific) file:\n\n{{hc|~/.config/Trolltech.conf|2=\n...\n[Qt]\nstyle=adwaita\n...\n}}\n\n==== GTK themes ported to Kvantum ====\n\nKvantum ({{Pkg|kvantum}}) is an SVG-based style customizer for Qt6 that comes with a variety of built-in styles, including versions of some of popular GTK themes such as Adapta, Arc, Ambiance, Libadwaita and Materia. More themes can be found [https://store.kde.org/browse?cat=123 on the KDE Store]. For Qt5 you additionally need the {{Pkg|kvantum-qt5}} package.\n\nKvantum works as a Qt style instead of a Qt platform theme. To set Kvantum for all Qt applications, set it in {{pkg|qt6ct}} for Qt6 or {{pkg|qt5ct}} for Qt5 respectively, or use the environment variable {{ic|1=QT_STYLE_OVERRIDE=kvantum}}.\n\n===== Theme configuration =====\n\nTo [https://github.com/tsujan/Kvantum/blob/master/Kvantum/doc/Theme-Config.pdf configure a theme variant] for Kvantum, such as [https://github.com/GabePoel/KvLibadwaita KvLibadwaita], edit the configuration file:\n\n{{hc|/etc/xdg/Kvantum/kvantum.kvconfig (or ~/.config/Kvantum/kvantum.kvconfig)|2=\n...\ntheme=KvLibadwaita\n...\n}}\n\nor use the ''kvantummanager'' GUI.\n\n== Theme engines ==\n\nA ''theme engine'' can be thought of as a thin layer API which translates themes (excluding icons) between one or more toolkits. These engines add some extra code in the process and it is arguable that this kind of a solution is not as elegant and optimal as using native styles.\n\n=== QGtkStyle ===\n\n{{Note|QGtkStyle has been removed from {{Pkg|qt5-base}} 5.7.0 [https://github.com/qtproject/qtbase/commit/899a815414e95da8d9429a4a4f4d7094e49cfc55] and added to {{AUR|qt5-styleplugins}} [https://github.com/qtproject/qtstyleplugins/commit/102da7d50231fc5723dba6e72340bef3d29471aa]}}\n\n{{Warning|Depending on GTK 2 theme, this style may cause rendering issues such as transparent fonts or inconsistent widgets.}}\n\nThis Qt style uses GTK 2 to render all components to blend in with [[GNOME]] and similar GTK based environments. Beginning with Qt 4.5, this style is included in Qt. It requires {{Pkg|gtk2}} to be installed and configured.\n\nThis is the default Qt4 style in Cinnamon, GNOME and Xfce, and the default Qt5 style in Cinnamon, GNOME, MATE, LXDE and Xfce. In other environments:\n\n* For Qt4, it can be enabled with ''Qt Configuration'' ({{ic|qtconfig-qt4}}), choose ''GTK'' under ''Appearance > GUI Style''. Alternatively, edit the {{ic|/etc/xdg/Trolltech.conf}} (system-wide) or {{ic|~/.config/Trolltech.conf}} (user-specific) file:\n\n{{hc|~/.config/Trolltech.conf|2=\n...\n[Qt]\nstyle=GTK+\n...\n}}\n\n* For Qt 5, it can be enabled by installing {{AUR|qt5-styleplugins}} and setting the following [[Environment variables#Graphical environment|environment variable]]: {{ic|1=QT_QPA_PLATFORMTHEME=gtk2}}\n\n* For Qt 6, it can be enabled by installing {{AUR|qt6gtk2}} and choosing the ''qt6gtk2'' style in {{Pkg|qt6ct}}, or alternatively setting the following environment variable: {{ic|1=QT_QPA_PLATFORMTHEME=gtk2}}\n\nFor full uniformity, make sure that the configured [[GTK#Themes|GTK theme]] supports both GTK 2 and GTK 3. If your preferred theme has inconsistent rendering after configuring Qt to use GTK2, install {{AUR|gtk-theme-switch2}} and choose a theme. You should also make sure that the preferred theme is installed in {{ic|/usr/share/themes}} as {{ic|$XDG_DATA_HOME/themes}} directory is not being scanned for active GTK 2 theme.\n\n=== QGnomePlatform ===\n\n{{Out of date|QGnomePlataform project is unmaintained and no longer actively developed. [https://github.com/FedoraQt/QGnomePlatform#readme]}}\n\nThis Qt 5 platform theme applies the appearance settings of GNOME for Qt applications. It can be installed with the {{AUR|qgnomeplatform-qt5-git}} and {{AUR|qgnomeplatform-qt6-git}} packages. It does not provide a Qt style itself, instead it requires a [[#Styles for both Qt and GTK|style that support both Qt and GTK]].\n\nThis platform theme is enabled automatically in GNOME since version 3.20. For other systems, it can be enabled by setting the following [[Environment variables#Graphical environment|environment variable]]: {{ic|1=QT_QPA_PLATFORMTHEME=gnome}}.\n\n=== QAdwaitaDecorations ===\n\nQAdwaitaDecorations is Qt decoration plugin implementing Adwaita-like client-side decorations for [[Wayland]]. It can be installed with the {{AUR|qadwaitadecorations-qt5}} and {{AUR|qadwaitadecorations-qt6}} packages. After installing, set {{ic|1=QT_WAYLAND_DECORATION=adwaita}} to environment variable.\n\n== Tips and tricks ==\n\n=== Using a GTK icon theme in Qt applications ===\n\nIf you are running [[Plasma]], run {{Pkg|kde-gtk-config}} and select the icon-theme under ''System Settings > Application Style > GTK''.\n\nIf you are using [[GNOME]], run {{Pkg|dconf-editor}} and change the {{ic|icon-theme}} key under ''org > gnome > desktop > interface'' to your preferred icon theme. \n\nIf you are not using a [[Desktop environment]], for example if you are running a minimal system with {{Pkg|i3-wm}}, [[install]] {{Pkg|dconf-editor}} and set the icon-theme as explained above. \nYou might also have to set the value of {{ic|DESKTOP_SESSION}} in your profile. See [[Environment variables#Defining variables]] for the possible ways to obtain the desired result. \n\n{{Note| If the icon theme was not applied, you might want to check if the name that you entered of your preferred theme, was in the correct format. For example, if you want to apply the currently active icon theme to your QT applications, you can find the correct format of its name with the command:\n\n{{bc|1=$ awk -F= '/icon-theme/ {print $2}' ~/.gtkrc-2.0}}\n\n}}\n\n=== Add Title bar and frame to GTK3 applications under KDE Plasma ===\n\nTo have Gnome/GTK applications display with a KDE/Plasma title bar and frame, install {{AUR|gtk3-nocsd-git}} and restart your window manager to load the updated library path.\n\nYou can also run Gtk application with the wrapper:\n $ gtk3-nocsd gedit\n\n=== Improve subpixel rendering of GTK applications under KDE Plasma ===\n\nSee [[Font configuration#LCD filter]].\n\n=== Consistent file dialog under KDE Plasma ===\n\n{{Accuracy|GTK seems to have replaced {{ic|1=GTK_USE_PORTAL=1}} with {{ic|1=GDK_DEBUG=portals}}. https://gitlab.gnome.org/GNOME/gtk/-/blob/636827800525770715bba96671edb2fc0234ccc2/NEWS#L34}}\n\nIn order to have the same file dialog, one can use [[XDG Desktop Portal]]s.\n\n[[Install]] {{Pkg|xdg-desktop-portal}} and {{Pkg|xdg-desktop-portal-kde}} and set {{ic|1=GTK_USE_PORTAL=1}} [[environment variable]].\n\nNote that currently not all GTK applications support KDE file dialogs correctly. \n\nApplications using electron should use at least electron 14 (see [https://github.com/electron/electron/pull/19159 #19159]) and properly implement this function.\n\n[[VSCode]] has a pull request for fixing a problem, see [https://github.com/microsoft/vscode/pull/126113 #126113].\n\n[[GIMP]] has not implemented use of the portal yet, see [https://gitlab.gnome.org/GNOME/gimp/-/issues/1830 bug report].\n\n{{Note|There are still lots of GTK applications that do not implement portal properly (abandoned applications, or authors are focused on other tasks). To simplify file picking from such applications, you can at least synchronize bookmarks from dolphin to nautilus. Use this command:\n\n{{bc|1=$ awk -F\\\" '/<bookmark href=\"file/ {print $2}' < $HOME/.local/share/user-places.xbel > $HOME/.config/gtk-3.0/bookmarks}}\n\nAlternatively, use {{AUR|bookmarksync-git}} for that purpose. There you can manually edit and sync bookmarks to both sides.\n}}\n\n==== Application-specific settings ====\n\nIn addition to the environment variable approach, some GTK applications have their own settings for forcing use of XDG Portals:\n\n* [[Firefox]] \u2014 See [[Firefox#XDG Desktop Portal integration]]\n\n== Troubleshooting ==\n\n=== Themes not working in GTK applications ===\n\nIf the style or theme engine you set up is not showing in your GTK applications then it is likely your GTK settings files are not being loaded for some reason. You can check where your system expects to find these files by doing the following..\n $ export | grep gtk\n\nUsually the expected files should be {{ic|~/.gtkrc}} for GTK1 and {{ic|~/.gtkrc2.0}} or {{ic|~/.gtkrc2.0-kde}} for GTK 2.x.\n\n=== GTK applications do not use svg (breeze) icons after system upgrade ===\n\nTry to run this to fix this issue:\n # gdk-pixbuf-query-loaders --update-cache\n\n=== GTK applications do not fully use KDE system settings ===\n\nTo further integrate [[Plasma]] settings on GTK applications, one may want to [[install]] {{Pkg|gnome-settings-daemon}}, {{Pkg|gsettings-desktop-schemas}} and {{Pkg|gsettings-qt}}. This will offer proper Qt bindings for GTK.\n\n=== kde-gtk-config \"System Settings > Application Style > GTK\" menu missing ===\n\nWhen {{pkg|kde-gtk-config}} breaks and the \"Application Style > GTK\" menu is missing from System Settings, it is possible to choose [[GTK#Configuration tools|GTK configuration tools]] like {{pkg|lxappearance}} and {{Pkg|nwg-look}} to be able to configure GTK 2 and GTK 3 styles.\n{{pkg|lxappearance}} is desktop independent even if it comes from the LXDE project (it does not require other parts of the LXDE desktop). {{Pkg|nwg-look}} is a GTK3 settings editor, designed to work properly in wlroots-based Wayland environment. The look and feel is strongly influenced by LXAppearance, but nwg-look is intended to free the user from a few inconveniences.\n\n=== Dolphin theming does not match Nautilus well ===\nCheck the section [[Dolphin#Mismatched folder view background colors|Mismatched folder view background colors]] for how to deal with weird coloring.\n\n=== The KDE Plasma XDG Desktop Portal is not being used ===\n\nFollow [[XDG Desktop Portal#Force desktop environment]] with {{ic|XDG_CURRENT_DESKTOP{{=}}KDE}}.\n\n=== Qt5: kvantum is not available as a style in the Qt settings app ===\n\nBe sure to have {{pkg|kvantum-qt5}} installed."
                    }
                ]
            },
            "4972": {
                "pageid": 4972,
                "ns": 0,
                "title": "KDE (Italiano)",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:KDE (Italiano)]]\n[[de:KDE]]\n[[en:KDE]]\n[[es:KDE]]\n[[ja:KDE]]\n[[pt:KDE]]\n[[ru:KDE]]\n[[zh-hans:KDE]]\n{{TranslationStatus|KDE|2024-01-17|797077}}\n{{Related articles start (Italiano)}}\n{{Related|Desktop environment (Italiano)}}\n{{Related|Display manager (Italiano)}}\n{{Related|Window manager (Italiano)}}\n{{Related|Qt (Italiano)}}\n{{Related|SDDM}}\n{{Related|Dolphin}}\n{{Related|KDE Wallet}}\n{{Related|KDevelop}}\n{{Related|Trinity}}\n{{Related|Uniform look for Qt and GTK applications (Italiano)}}\n{{Related|Official repositories#kde-unstable}}\n{{Related articles end}}\n\nKDE \u00e8 un progetto software attualmente composto da un [[desktop environment (Italiano)|ambiente desktop]], meglio conosciuto con il nome di Plasma, una collezione di librerie e framework (KDE Frameworks) e svariate applicazioni (KDE Applications). A livello upstream, KDE possiede una [https://userbase.kde.org/ UserBase wiki] ottimamente curata, dove \u00e8 possibile trovare informazioni dettagliate sulla maggior parte delle applicazioni KDE.\n\n== Installazione ==\n\n=== Plasma ===\n\n[[Installare]] il meta-pacchetto {{Pkg|plasma-meta}} o il gruppo {{Grp|plasma}}. Per comprendere le differenze tra {{Pkg|plasma-meta}} e {{Grp|plasma}} fare riferimento alla pagina [[Package group]]. In alternativa, per un'installazione di Plasma pi\u00f9 minimale, installare il pacchetto {{Pkg|plasma-desktop}}. A livello upstream, KDE fornisce delle [https://community.kde.org/Distributions/Packaging_Recommendations raccomandazioni di pacchettizzazione e setup] finalizzate a ottenere una sessione di Plasma comprensiva di tutte le funzioni.\n\nPer abilitare il supporto a [[Wayland (Italiano)|Wayland]] all'interno di Plasma, [[installare]] anche il pacchetto {{Pkg|plasma-wayland-session}}{{Broken package link|replaced by {{Pkg|plasma-workspace}}}}. Gli utenti [[NVIDIA (Italiano)|NVIDIA]] che utilizzano il driver proprietario {{Pkg|nvidia}}, dovranno altres\u00ec abilitare il [[NVIDIA#DRM kernel mode setting|DRM kernel mode setting]]. Qualora questa soluzione non dovesse funzionare, leggere le istruzioni riportate nella pagina [https://community.kde.org/Plasma/Wayland/wiki Nvidia KDE]{{Dead link (Italiano)|2024|03|03|status=404}}.\n\n=== Plasma Mobile ===\n\n[[Installare]] {{AUR|plasma-mobile}}.\n\n=== Applicazioni KDE ===\n\nPer l'intero set di applicazioni KDE, installare il gruppo {{Grp|kde-applications}} o il meta-pacchetto {{Pkg|kde-applications-meta}}. Se si desidera solo una determinata categoria di applicazioni KDE, come giochi o didattica, installare la rispettiva dipendenza del pacchetto {{Pkg|kde-applications-meta}}. \u00c8 importante notare che questa operazione non installer\u00e0 alcuna versione di Plasma, ma esclusivamente le applicazioni.\n\n=== Rilasci instabili ===\n\nVedere [[Official repositories#kde-unstable]] per i rilasci beta.\n\n== Avvio di Plasma ==\n\n{{Nota|pur essendo possibile lanciare Plasma in [[Wayland (Italiano)|Wayland]], in questo caso alcune funzioni risulteranno mancanti e potranno verificarsi determinate problematiche note. Vedere [https://community.kde.org/Plasma/Wayland_Showstoppers Wayland Showstoppers] per un elenco dei problemi e [https://phabricator.kde.org/project/board/99/ Plasma on Wayland workboard] per informazioni sullo stato di sviluppo attuale. Utilizzare [[Xorg (Italiano)|Xorg]] per un'esperienza il pi\u00f9 possibile completa e stabile.}}\n\n\u00c8 possibile avviare Plasma sia utilizzando un [[Display manager (Italiano)|display manager]] che dalla console.\n\n=== Utilizzando un display manager ===\n\n{{Suggerimento|il [[Display manager (Italiano)|display manager]] di preferenza \u00e8 [[SDDM]].}}\n\n* Selezionare ''Plasma (X11)'' per lanciare una nuova sessione in [[Xorg (Italiano)|Xorg]].\n* Selezionare ''Plasma (Wayland)'' per lanciare una nuova sessione in [[Wayland (Italiano)|Wayland]].\n* Selezionare ''Plasma Mobile (Wayland)'' per lanciare una nuova sessione Plasma Mobile in [[Wayland (Italiano)|Wayland]].\n\n=== Dalla console ===\n\n* Per avviare Plasma con [[xinit (Italiano)|xinit/startx]], aggiungere {{ic|1=export DESKTOP_SESSION=plasma}} e {{ic|exec startplasma-x11}} al proprio file {{ic|.xinitrc}}. Qualora si desideri avviare Xorg al login, vedere [[Start X at login]].\n* Per avviare una sessione di Plasma in Wayland da una console, eseguire {{ic|1=startplasma-wayland}}[https://community.kde.org/KWin/Wayland#Start_a_Plasma_session_on_Wayland]. Non dovrebbe essere necessario avviare manualmente una sessione di dbus mediante il comando {{ic|1=dbus-run-session}}[https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/128].\n\n== Configurazione ==\n\nLa maggior parte delle impostazioni relative alle applicazioni KDE sono contenute nella cartella {{ic|~/.config/}}. Tuttavia la configurazione di KDE avviene principalmente attraverso l'applicazione '''Impostazioni di sistema'''. Questa applicazione pu\u00f2 essere avviata da un terminale eseguendo {{ic|systemsettings}}.\n\n=== Personalizzazione ===\n\n==== Desktop Plasma ====\n\n===== Temi =====\n\nEsistono diversi tipi di temi KDE, che si differenziano in base agli elementi da essi modificati:\n\n* [https://store.kde.org/browse?cat=121 Temi globali], pacchetti completi che possono includere temi di Plasma, stili delle applicazioni, colori, font, icone, cursori, splash screen, temi SDDM, e schemi di colori di Konsole.\n* [https://store.kde.org/browse?cat=104 Temi di Plasma] che modificano l'aspetto dei pannelli e dei widget di Plasma. Questi temi sono spesso associati a un tema Kvantum o Aurorae raccomandato che ne completa l'aspetto.\n* [https://store.kde.org/browse?cat=421 Stili delle applicazioni] che modificano l'aspetto dei programmi.\n* Stili delle applicazioni che utilizzano [[Uniform look for Qt and GTK applications#Theme engines|theme engine]] quali [[Uniform look for Qt and GTK applications#Kvantum|Kvantum]], [[Qt#Styles in Qt 5|QtCurve]] [https://store.kde.org/browse?cat=119], [https://github.com/DexterMagnific/QSvgStyle QSvgStyle] [https://store.kde.org/browse?cat=622], e [https://store.kde.org/p/1167275/ Aurorae].\n* [[#Temi delle icone]] che forniscono icone per applicazioni, file e azioni.\n\nPer facilitare l'installazione e l'aggiornamento a livello di sistema, alcuni temi sono disponibili sia nei [https://archlinux.org/packages/?sort=&q=kde+theme&maintainer=&flagged= repository ufficiali] che nell'[https://aur.archlinux.org/packages?O=0&K=kde+theme AUR].\n\nI temi globali possono inoltre essere installati tramite la funzione ''Impostazioni di sistema > Aspetto > Tema globale > Scarica nuovi temi globali...''.\n\n====== Aspetto delle applicazioni GTK ======\n\n{{Suggerimento|Per armonizzare i temi Qt e GTK, vedere [[Uniform look for Qt and GTK applications (Italiano)]].}}\n\nPer ottimizzare l'aspetto delle applicazioni GTK, il tema raccomandato \u00e8 {{Pkg|breeze-gtk}}, un tema GTK concepito per simulare il look del tema Brezza di Plasma.\nInstallare {{Pkg|kde-gtk-config}} (parte di {{grp|plasma}} group) e selezionare {{ic|Brezza}} come tema GTK in ''Impostazioni di sistema > Aspetto > Stile delle applicazioni > Configura lo stile delle applicazioni GNOME/GTK...''.\n\n{{Out of date|il servizio Plasma GTKd in esecuzione in background sovrascrive le impostazioni GTK all'avvio di Plasma.}}\n\nIn alcuni temi, il testo dei tooltip nelle applicazioni GTK \u00e8 di colore bianco su sfondo bianco, e risulta quindi di difficile lettura. Per impostare i colori nelle applicazioni GTK2, modificare la rispettiva sezione all'interno del file {{ic|.gtkrc-2.0}}. Per le applicazioni GTK3 \u00e8 necessario modificare due file: {{ic|gtk.css}} e {{ic|settings.ini}}.\n\nAlcuni programmi GTK2 quali {{AUR|vuescan-bin}} continueranno ad avere un'usabilit\u00e0 limitata a causa delle caselle di spunta invisibili all'interno di una sessione di Plasma con la skin Breeze o Adwaita. Per ovviare a questo problema, installare ad es. la skin Numix-Frost-Light mediante il pacchetto {{AUR|numix-frost-themes}} e selezionarla in ''Impostazioni di sistema > Aspetto > Stile delle applicazioni > Configura lo stile delle applicazioni GNOME/GTK... > Tema GTK''. Il look del tema Numix-Frost-Light \u00e8 simile a quello di Brezza.\n\n===== Avatar =====\n\nSia Plasma che [[SDDM]] utilizzeranno le immagini presenti nella cartella {{ic|/var/lib/AccountsService/icons/}} come avatar per gli utenti. Per la configurazione mediante interfaccia grafica, accedere all'applicazione ''Impostazioni di sistema > Utenti'', che potrebbe essere necessario prima [[installare]] (vedere il pacchetto {{Pkg|plasma-desktop}}). Per ripristinare l'avatar di default, rimuovere il file corrispondente al nome del proprio utente.\n\n===== Widget =====\n\nI [https://store.kde.org/browse?cat=418 plasmoidi] sono widget per la shell del desktop Plasma concepiti per estendere la funzionalit\u00e0 del desktop e sono disponibili nell'[https://aur.archlinux.org/packages?K=plasma5-applet AUR].\n\nI plasmoidi possono inoltre essere installati facendo clic con il tasto destro su un pannello o sul desktop e selezionando ''Aggiungi oggetti > Ottieni nuovi oggetti... > Scarica nuovi oggetti di Plasma''. Verr\u00e0 visualizzata un'interfaccia per https://store.kde.org/ che permette di installare, disinstallare o aggiornare script di plasmoidi di terze parti con un solo clic.\n\n===== Applet audio nel vassoio di sistema =====\n\n[[Installare]] {{Pkg|plasma-pa}} o {{Pkg|kmix}} (avviare Kmix dal lanciatore di applicazioni). {{Pkg|plasma-pa}} viene ora installato di default con {{Grp|plasma}}, e non \u00e8 richiesta alcuna ulteriore configurazione.\n\n{{Nota|1=per regolare [https://bugs.kde.org/show_bug.cgi?id=313579#c28 l'ampiezza degli intervalli per l'aumento/la diminuzione del volume], aggiungere ad es. {{ic|1=VolumePercentageStep=1}} nella sezione {{ic|[Global]}} del file {{ic|~/.config/kmixrc}}.}}\n\n===== Disabilitare l'ombra del pannello =====\n\nQuando il pannello di Plasma risulta sovrapposto ad altre finestre, la sua ombra viene proiettata su queste ultime. [https://bbs.archlinux.org/viewtopic.php?pid=1228394#p1228394] Per disabilitare questo comportamento senza intervenire sulle altre ombre, [[installare]] {{Pkg|xorg-xprop}} ed eseguire:\n\n $ xprop -remove _KDE_NET_WM_SHADOW\n\ndopodich\u00e9 selezionare il pannello con il cursore a forma di segno '+'. [https://forum.kde.org/viewtopic.php%3Ff=285&t=121592.html] Per automatizzare questa operazione, installare {{Pkg|xorg-xwininfo}} e creare il seguente script:\n\n{{hc|/usr/local/bin/kde-no-shadow|<nowiki>\n#!/bin/bash\nfor WID in $(xwininfo -root -tree | sed '/\"Plasma\": (\"plasmashell\" \"plasmashell\")/!d; s/^  *\\([^ ]*\\) .*/\\1/g'); do\n   xprop -id $WID -remove _KDE_NET_WM_SHADOW\ndone\n</nowiki>}}\n\nRendere [[Help:Reading (Italiano)#Rendere un file eseguibile|eseguibile]] lo script.\n\n\u00c8 possibile eseguire lo script al login con la funzione ''Aggiungi script di accesso'' in ''Avvio automatico'':\n\n $ kcmshell5 autostart\n\n===== Scalatura del display / display High DPI =====\n\nVedere [[HiDPI#KDE Plasma]].\n\n==== Plasma Mobile ====\n\nPer utilizzare Plasma Mobile sugli schermi di piccole dimensioni, [https://invent.kde.org/plasma-mobile/plasma-phone-settings plasma-phone-settings] contiene diverse impostazioni applicabili globalmente ({{ic|/etc/xdg}}) e/o a livello utente {{ic|~/.config}}.\n\n===== Applications blacklist =====\n\nIl file {{ic|/etc/xdg/applications-blacklistrc}} (oppure {{ic|~/.config/applications-blacklistrc}}) rimuove le applicazioni dal menu/lanciatore di applicazioni per liberare spazio.\n\n===== KDE globals =====\n\nIl file {{ic|/etc/xdg/kdeglobals}} (oppure {{ic|~/.config/kdeglobals}}) permette di:\n\n* Impostare [https://apps.kde.org/angelfish/ Angelfish] come browser web.\n* Impostare l'aspetto ([https://invent.kde.org/plasma/plasma-mobile/-/tree/master/look-and-feel org.kde.plasma.phone]) in modo tale che, ad esempio, le finestre vengano massimizzate e siano prive di barra del titolo.\n\n===== Schermata di blocco =====\n\nIl file {{ic|/etc/xdg/kscreenlockerrc}} (oppure {{ic|~/.config/kscreenlockerrc}}) blocca lo schermo immediatamente dopo il login. Questa soluzione \u00e8 utile in combinazione con [[SDDM#Autologin]].\n\n===== KWin =====\n\nIl file {{ic|/etc/xdg/kwinrc}} (oppure {{ic|~/.config/kwinrc}}) permette di:\n\n* Disabilitare la sfocatura per migliorare le prestazioni.\n* Abilitare la tastiera virtuale [https://maliit.github.io/ Maliit].\n\n==== Decorazioni delle finestre ====\n\nLe [https://store.kde.org/browse/cat/114/ decorazioni delle finestre] sono disponibili nell'[https://aur.archlinux.org/packages?K=kde+window+decoration AUR].\n\n\u00c8 possibile modificarle in ''Impostazioni di sistema > Aspetto > Decorazioni delle finestre''. Qui \u00e8 inoltre possibile scaricare e installare direttamente altri temi con un semplice clic.\n\n==== Temi delle icone ====\n\nI temi delle icone possono essere installati e modificati in ''Impostazioni di sistema > Aspetto > Icone''.\n\n{{Nota|bench\u00e9 tutti i moderni desktop Linux condividano il medesimo formato per i temi delle icone, altri ambienti desktop come [[GNOME (Italiano)|GNOME]] utilizzano un numero minore di icone (in particolar modo nei menu e nelle barre degli strumenti). Nei temi sviluppati per questi ambienti desktop mancano di norma le icone necessarie per Plasma e per le applicazioni KDE. Si raccomanda quindi di installare temi delle icone compatibili con Plasma.}}\n\n{{Suggerimento|dal momento che alcuni temi delle icone non ereditano le impostazioni del tema di icone standard, alcune icone potrebbero risultare mancanti.\nPer ereditare le impostazioni dal tema Brezza, aggiungere {{ic|breeze}} alla voce {{ic|1=Inherits=}} nel file {{ic|/usr/share/icon/''theme-name''/index.theme}}, ad esempio: {{ic|1=Inherits=breeze,hicolor}}. \u00c8 necessario applicare questa patch dopo ogni aggiornamento del tema delle icone. Prendere in considerazione l'utilizzo degli [[pacman (Italiano)#Agganci|hook di pacman]] per automatizzare il processo.}}\n\n==== Efficienza in termini di spazio ====\n\nLa shell Plasma Netbook \u00e8 stata abbandonata a partire da Plasma 5, vedere il seguente [https://forum.kde.org/viewtopic.php%3Ff=289&t=126631.html#p335947 post sul forum KDE]. Tuttavia \u00e8 possibile ottenere un risultato simile modificando il file {{ic|~/.config/kwinrc}} e aggiungendo {{ic|1=BorderlessMaximizedWindows=true}} nella sezione {{ic|[Windows]}}.\n\n==== Generazione di thumbnail ====\n\nPer consentire la generazione di thumbnail per i file multimediali o per i documenti sul desktop e in Dolphin, installare {{Pkg|kdegraphics-thumbnailers}} e {{Pkg|ffmpegthumbs}}.\n\nDopodich\u00e9 abilitare le categorie di thumbnail per il desktop facendo ''clic con il tasto destro'' sullo ''sfondo del desktop'' > ''Configura desktop e sfondo...'' > ''Icone'' > ''Configura le estensioni di anteprima...''.\n\nIn ''Dolphin'', accedere al menu ''Configura > Configura Dolphin... > Generale > Anteprime''.\n\n=== Colore notturno ===\n\nPlasma offre una funzione simile a quella offerta da [[redshift]] (che funziona sia in [[Xorg (Italiano)|Xorg]] che in [[Wayland (Italiano)|Wayland]]) chiamata Colore notturno. Questa funzione rende i colori sullo schermo pi\u00f9 caldi per ridurre l'affaticamento degli occhi all'ora impostabile liberamente. \u00c8 possibile abilitarla in ''Impostazioni di sistema > Schermo e video > Colore notturno''.\n\n{{Suggerimento|per avere a disposizione un pratico pulsante on/off per la funzione colore notturno nel vassoio di sistema, \u00e8 necessario installare il pacchetto {{Pkg|kdeplasma-addons}} e poi aggiungerlo.}}\n\n=== Stampa ===\n\n{{Suggerimento|utilizzare l'interfaccia web [[CUPS (Italiano)|CUPS]] per una pi\u00f9 rapida configurazione. Le stampanti cos\u00ec configurate possono essere utilizzate nelle applicazioni KDE. }}\n\n\u00c8 possibile configurare le stampanti anche in ''Impostazioni di sistema > Stampanti''. Per utilizzare questo metodo, \u00e8 necessari prima installare i seguenti pacchetti {{Pkg|print-manager}}, {{Pkg|cups}}, {{Pkg|system-config-printer}}. Vedere [[CUPS#Configuration]].\n\n=== Samba/supporto Windows ===\n\nSe si desidera avere accesso ai servizi Windows, installare [[Samba (Italiano)|Samba]] (pacchetto {{Pkg|samba}}).\n\nLa funzionalit\u00e0 di condivisione di Dolphin necessita del pacchetto {{Pkg|kdenetwork-filesharing}} e di condivisioni utente, non abilitate nel file {{ic|smb.conf}} predefinito. Le istruzioni per aggiungerle sono disponibili nella pagina [[Samba#Enable Usershares]]. Una volta completata questa operazione la funzione di condivisione in Dolphin dovrebbe essere immediatamente funzionante, senza la necessit\u00e0 di riavviare Samba.\n\n{{Suggerimento|utilizzare {{ic|*}} (asterisco) sia come username che come password quando si accede a una condivisione Windows senza autenticazione nella finestra di dialogo di Dolphin.}}\n\nDiversamente dai gestori di file GTK, che utilizzano GVfs anche per il programma lanciato, aprendo i file da condivisioni Samba in Dolphin mediante KIO, con la maggior parte dei programmi Plasma copia prima l'intero file nel file system locale (VLC rappresenta un'eccezione).\nPer aggirare questa limitazione, \u00e8 possibile utilizzare un gestore di file basato su GTK come {{Pkg|thunar}} con {{Pkg|gvfs}} e {{Pkg|gvfs-smb}} (e {{Pkg|gnome-keyring}} per salvare le credenziali di login) per accedere alle condivisioni SMB in modo pi\u00f9 efficiente.\n\nUn'altra possibilit\u00e0 \u00e8 [[File systems (Italiano)#Montaggio di un file system|montare]] una condivisione Samba tramite {{Pkg|cifs-utils}} per far s\u00ec che Plasma la consideri come una comune cartella locale a cui accedere normalmente.\nVedere [[Samba#Manual mounting]] e [[Samba#Automatic mounting]].\n\nIl pacchetto {{AUR|samba-mounter-git}} fornisce una soluzione GUI che offre in linea di principio le medesime funzionalit\u00e0 tramite un'opzione di facile utilizzo disponibile in ''Impostazioni di sistema'' > ''Driver di rete''. Tuttavia questa soluzione potrebbe non funzionare con le nuove versioni di KDE Plasma.\n\n=== Attivit\u00e0 del desktop KDE ===\n\nLe [https://userbase.kde.org/Plasma/it#Attivit.C3.A0 attivit\u00e0] sono spazi di lavoro speciali dove \u00e8 possibile selezionare specifiche impostazioni che si applicano solo per la singola attivit\u00e0 e solo quando queste viene utilizzata.\n\n=== Gestione energetica ===\n\n[[Installare]] {{Pkg|powerdevil}} per un servizio di gestione energetica integrato in Plasma. Questo servizio offre funzionalit\u00e0 di risparmio energetico aggiuntive, controllo della luminosit\u00e0 dello schermo (se supportato) e indicazione dello stato della batteria, incluse le periferiche.\n\n{{Suggerimento|L'integrazione con i [https://pointieststick.com/2021/07/23/this-week-in-kde-power-profiles-and-a-more-polished-kickoff/ profili energetici] richiede la dipendenza opzionale [[power-profiles-daemon]].\n}}\n\n{{Accuracy|1=in riferimento alla nota di seguito, la causa del problema potrebbe essere l'impostazione di logind ''LidSwitchIgnoreInhibited'' che ha come valore di default ''yes''. [https://bbs.archlinux.org/viewtopic.php?pid=1649022#p1649022]}}\n\n{{Nota|Power Devil potrebbe non [[Power management#Power managers|inibire]] tutte le impostazioni logind (come ad esempio l'azione associata alla chiusura del coperchio nei laptop). In questi casi, sar\u00e0 necessario modificare l'impostazione di logind - vedere [[Power management#ACPI events]].}}\n\n=== Avvio automatico ===\n\nPlasma pu\u00f2 avviare automaticamente le applicazioni ed eseguire script all'avvio e all'arresto. Per avviare automaticamente un'applicazione, accedere a ''Impostazioni di sistema > Avvio e spegnimento > Avvio automatico'' e aggiungere il programma o lo script shell desiderato. Per le applicazioni verr\u00e0 creato un file ''.desktop'', mentre per gli script di login verr\u00e0 creato un file ''.desktop'' che lancer\u00e0 lo script.\n\n{{Nota|\n* L'avvio automatico dei programmi pu\u00f2 essere eseguito soltanto al login, mentre gli script shell possono essere eseguiti anche allo spegnimento o prima dell'avvio dello stesso ambiente Plasma.\n* Gli script shell verranno eseguiti solo se [[Help:Reading (Italiano)#Rendere un file eseguibile|eseguibili]].\n* Gli script shell precedentemente inseriti nella cartella {{ic|~/.config/autostart-scripts/}} verranno [https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/736 convertiti automaticamente in file .desktop].\n}}\n\n* Inserire gli [[Desktop entries|elementi desktop]] (ad es. i file ''.desktop'') nella cartella [[XDG Autostart (Italiano)|XDG Autostart]] desiderata.\n* Inserire gli script o creare un link simbolico che rimandi ad essi in una delle seguenti cartelle:\n** {{ic|~/.config/plasma-workspace/env/}}: per eseguire gli script al login prima del lancio di plasma.\n** {{ic|~/.config/plasma-workspace/shutdown/}}: per eseguire gli script al momento della chiusura di Plasma.\n\nVedere la [https://docs.kde.org/stable5/en/plasma-workspace/kcontrol/autostart/index.html documentazione ufficiale].\n\n=== Phonon ===\n\nDa [[Wikipedia:it:Phonon|Wikipedia]]:\n\n:Phonon \u00e8 l'API multimediale fornita da KDE ed \u00e8 il sistema di astrazione standard per la gestione dei flussi multimediali all'interno del software KDE che viene utilizzato anche da diverse applicazioni Qt.\n\n:Phonon \u00e8 stato creato in origine per rendere il software KDE e Qt indipendente da qualunque singolo sistema multimediale quale GStreamer o xine, e per fornire un'API stabile per l'intera durata di vita di una versione maggiore.\n\nPhonon trova un ampio utilizzo all'interno di KDE, sia per le risorse audio (ad es., le notifiche di sistema o le applicazioni audio KDE) che video (ad es. i thumbnail video di [[Dolphin]]). Pu\u00f2 utilizzare i seguenti backend:\n\n* [[VLC]]: {{Pkg|phonon-qt5-vlc}}\n* [[GStreamer]]: {{Pkg|phonon-qt5-gstreamer}}, vedere [[GStreamer#Installation]] per il supporto di ulteriori codec\n* [[mpv]]: {{AUR|phonon-qt5-mpv}}, {{AUR|phonon-qt5-mpv-git}}\n\nKDE [https://community.kde.org/Distributions/Packaging_Recommendations#Non-Plasma_packages raccomanda l'utilizzo del solo backend VLC]. Lo sviluppo del backend GStreamer \u00e8 [https://invent.kde.org/libraries/phonon-gstreamer/-/issues/1 inattivo], ma alcune delle principali distribuzioni Linux (ad esempio Kubuntu e Fedora-KDE) lo utilizzano come backend di default, in quanto questa soluzione permette loro di escludere facilmente dall'installazione standard i codec MPEG brevettati.\n\n{{Nota|1=<br>\n* \u00c8 possibile installare contemporaneamente pi\u00f9 backend e definirne la priorit\u00e0 tramite l'applicazione ''phononsettings''.\n* Secondo quanto riportato nel [https://forum.kde.org/viewtopic.php%3Ff=250&t=126476.html#p335080 forum KDE], il backend VLC non supporta lo standard [[wikipedia:ReplayGain|ReplayGain]].\n* Nel caso si utilizzi il backend VLC, si potrebbero verificare dei crash ogni qual volta Plasma tenti di inviare un avviso audio e in un numero significativo di altri casi [https://forum.kde.org/viewtopic.php%3Ff=289&t=135956.html]. Una delle possibili soluzioni a questo problema \u00e8 ricostruire la cache dei plugin VLC:\n{{bc|# /usr/lib/vlc/vlc-cache-gen /usr/lib/vlc/plugins}}\n}}\n\n=== Backup e ripristino ===\n\nKDE Plasma 5 conserva le impostazioni personalizzate del desktop come file di configurazione nella cartella [[XDG Base Directory#Specification|XDG_CONFIG_HOME]]. Utilizzare le [https://github.com/shalva97/kde-configuration-files informazioni dettagliate sui file di configurazione] per scegliere un [https://www.addictivetips.com/ubuntu-linux-tips/backup-kde-plasma-5-desktop-linux/ metodo di backup e ripristino].\n\n=== Avvio tramite systemd ===\n\nPlasma utilizza un'istanza [[systemd (Italiano)/User (Italiano)|utente systemd]] per lanciare e gestire tutti i propri servizi. Questo metodo di avvio \u00e8 quello utilizzato di default a partire da Plasma 5.25, me \u00e8 possibile [https://invent.kde.org/plasma/plasma-workspace/-/wikis/Plasma-and-the-systemd-boot disabilitarlo per utilizzare al suo posto degli script di boot] eseguendo il seguente comando (sebbene questa soluzione potrebbe non risultare pi\u00f9 funzionante nei rilasci futuri):\n\n $ kwriteconfig5 --file startkderc --group General --key systemdBoot false\n\nMaggiori dettagli sull'implementazione sono disponibili nel [https://blog.davidedmundson.co.uk/blog/plasma-and-the-systemd-startup/ blog di Edmundson: plasma e l'avvio tramite systemd].\n\n=== Controllo ortografico ===\n\nLe applicazioni KDE utilizzano {{Pkg|sonnet}} per il controllo ortografico. Vedere le sue dipendenze opzionali per i le soluzioni di [[Language checking|controllo ortografico]] supportate.\n\n\u00c8 possibile configurare questo strumento in ''Impostazioni di sistema > Impostazioni regionali > Correttore ortografico''.\n\n=== Esecuzione di kwin wayland con NVIDIA ===\n\nVedere https://community.kde.org/Plasma/Wayland/Nvidia.\n\n== Applicazioni ==\n\nIl progetto KDE fornisce una suite di applicazioni che si integrano nel desktop Plasma. Vedere il gruppo {{Grp|kde-applications}} per un elenco completo di tutte le applicazioni disponibili. Vedere anche [[:Category:KDE]] per le pagine correlate delle applicazioni KDE.\n\nOltre ai programmi forniti dalla suite di applicazioni KDE, sono disponibili molte altre applicazioni in grado di estendere le funzionalit\u00e0 del desktop Plasma. Alcune di queste sono trattate di seguito.\n\n=== Amministrazione del sistema ===\n\n==== Terminare il server Xorg mediante le impostazioni di sistema KDE ====\n\nAccedere al sottomenu ''Impostazioni di sistema > Dispositivi di immissione > Tastiera > Avanzate (tab) > \"Sequenza di tasti per terminare il server X\"'' e assicurarsi che il checkbox sia selezionato.\n\n==== KCM ====\n\nKCM \u00e8 un acronimo che indica i moduli di configurazione di KDE. I KCM sono strumenti utili per la configurazione del proprio sistema e sono accessibili nelle impostazioni di sistema o da terminale tramite il comando ''kcmshell5''.\n\n* {{App|sddm-kcm|modulo di configurazione di KDE per [[SDDM]].|https://invent.kde.org/plasma/sddm-kcm|{{Pkg|sddm-kcm}}}}\n* {{App|kde-gtk-config|configuratore GTK2 e GTK3 per KDE.|https://invent.kde.org/plasma/kde-gtk-config|{{Pkg|kde-gtk-config}}}}\n* {{App|System policies|set di moduli di configurazione che permette all'amministratore di modificare le impostazioni di [[PolicyKit]].|https://invent.kde.org/system/polkit-kde-kcmodules-1|{{AUR|kcm-polkit-kde-git}}{{Broken package link|package not found}}}}\n* {{App|wacom tablet|GUI di KDE per i driver Wacom per Linux.|https://www.linux-apps.com/p/1127862/|{{Pkg|kcm-wacomtablet}}{{Broken package link|replaced by {{Pkg|wacomtablet}}}}}}\n* {{App|Kcmsystemd|modulo di controllo di systemd per KDE.|https://github.com/rthomsen/kcmsystemd|{{AUR|systemd-kcm}}}}\n\nAltri KCM sono disponibili alla pagina [https://www.linux-apps.com/find?search=kcm linux-apps.com].\n\n=== Ricerca desktop ===\n\nKDE implementa la ricerca desktop tramite [[Baloo]], una soluzione software per la ricerca e l'indicizzazione dei file.\n\n=== Browser web ===\n\nI seguenti browser web possono integrarsi nell'ambiente Plasma:\n\n* {{App|[[Wikipedia:it:Konqueror|Konqueror]]|parte del progetto KDE, supporta due motori di rendering \u2013 KHTML e Qt WebEngine, basato su [[Chromium (Italiano)|Chromium]].|https://konqueror.org/|{{Pkg|konqueror}}}}\n* {{App|[[Wikipedia:it:Falkon|Falkon]]|un browser web Qt con funzioni di integrazione con Plasma, conosciuto in precedenza con il nome di Qupzilla. Utilizza Qt WebEngine.|https://userbase.kde.org/Falkon/|{{Pkg|falkon}}}}\n* {{App|[[Chromium (Italiano)|Chromium]]|Chromium e la sua variante proprietaria Google Chrome presentano delle limitazioni nell'integrazione con Plasma. [[KDE Wallet#KDE Wallet for Chrome and Chromium|Possono utilizzare KWallet]] e le finestre Apri/Salva KDE.|https://www.chromium.org/|{{Pkg|chromium}}}}\n* {{App|[[Firefox (Italiano)|Firefox]]|Firefox pu\u00f2 essere configurato per una migliore integrazione in Plasma. Vedere [[Firefox#KDE integration]] per i dettagli.|https://mozilla.org/firefox|{{Pkg|firefox}}}}\n\n{{Suggerimento|A partire da Plasma 5.13, \u00e8 possibile integrare [[Firefox (Italiano)|Firefox]] o [[Chromium (Italiano)|Chrome]] in Plasma: vengono resi disponibili il controllo di riproduzione multimediale nel vassoio di sistema di Plasma, le notifiche dei download e la ricerca delle tab aperte in KRunner. [[Installare]] {{Pkg|plasma-browser-integration}} e il rispettivo add-on del browser. Chrome/Chromium dovrebbe essere gi\u00e0 incluso, per l'add-on di Firefox vedere [[Firefox#KDE integration]].}}\n\n=== PIM ===\n\nKDE mette a disposizione un proprio stack per la [[Wikipedia:Personal information management|gestione delle informazioni personali]] (PIM). Tali informazioni includono e-mail, contatti, calendario, ecc. Per installare tutti i pacchetti PIM, \u00e8 possibile utilizzare il gruppo di pacchetti {{Grp|kde-pim}} o il meta-pacchetto {{Pkg|kde-pim-meta}}.\n\n==== Akonadi ====\n\nAkonadi \u00e8 un sistema concepito per agire come cache locale per i dati PIM, indipendentemente dalla loro origine. Questa cache pu\u00f2 a sua volta essere utilizzata da altre applicazioni. Sono inclusi i dati relativi alle e-mail dell'utente oltre che ai sui contatti, calendari, eventi, file di journal, allarmi, note ecc. Non conserva di per s\u00e9 alcun dato: il formato di archiviazione dipende dalla natura dei dati (ad esempio, i contatti possono essere salvati nel formato vCard).\n\nInstallare {{Pkg|akonadi}}. Per ulteriori add add-on, installare {{Pkg|kdepim-addons}}.\n\n{{Nota|\n* Se si desidera utilizzare un motore del database diverso da [[MariaDB (Italiano)|MariaDB]], quando si installa il pacchetto {{Pkg|akonadi}} utilizzare il seguente comando per evitare l'installazione delle dipendenze {{Pkg|mariadb}}: {{bc|# pacman -S akonadi --assume-installed mariadb}} Vedere anche {{Bug|32878}}.\n* Se Akonadi non trova il file {{ic|/usr/bin/mysqld}} al primo avvio, ripiegher\u00e0 sull'utilizzo di SQLite.\n}}\n\n===== MySQL =====\n\nCome impostazione predefinita Akonadi utilizzer\u00e0 {{ic|/usr/bin/mysqld}} ([[MariaDB (Italiano)|MariaDB]] di default, vedere [[MySQL (Italiano)|MySQL]] per soluzioni alternative) per eseguire un'istanza MySQL gestita con il database salvato in {{ic|~/.local/share/akonadi/db_data/}}.\n\n====== Istanza MySQL a livello di sistema ======\n\nAkonadi supporta l'utilizzo di [[MySQL (Italiano)|MySQL]] a livello di sistema per il proprio database.[https://techbase.kde.org/KDE_PIM/Akonadi#Can_Akonadi_use_a_normal_MySQL_server_running_on_my_system.3F]\n\n{{Expansion|Aggiungere istruzioni.}}\n\n{{hc|~/.config/akonadi/akonadiserverrc|2=\n[%General]\nDriver=QMYSQL\n\n[QMYSQL]\nHost=\nName=akonadi_''nome utente'\nOptions=\"UNIX_SOCKET=/run/mysqld/mysqld.sock\"\nStartServer=false\n}}\n\n===== PostgreSQL =====\n\nAkonadi supporta alternativamente l'utilizzo dell'istanza [[PostgreSQL (Italiano)|PostgreSQL]] gi\u00e0 esistente a livello di sistema, vale a dire {{ic|postgresql.service}}, o l'esecuzione di un'istanza PostgreSQL con privilegi utente a livello del database salvato in {{ic|~/.local/share/akonadi/db_data/}}.\n\n====== Istanza PostgreSQL per utente ======\n\n[[Installare]] {{Pkg|postgresql}} e {{Pkg|postgresql-old-upgrade}}.\n\nModificare il file di configurazione di Akonadi in modo che rifletta quando segue:\n\n{{hc|~/.config/akonadi/akonadiserverrc|2=\n[%General]\nDriver=QPSQL\n}}\n\n{{Nota|\n* Al momento dell'avvio, Akonadi creer\u00e0 la sezione {{ic|[QPSQL]}} e imposter\u00e0 le relative variabili appropriate.\n* Il database verr\u00e0 salvato in {{ic|~/.local/share/akonadi/db_data/}}.\n}}\n\nAvviare Akonadi con {{ic|akonadictl start}} e verificarne lo stato: {{ic|akonadictl status}}.\n\n{{Nota|\n* A partire da {{Pkg|akonadi}} 19.08.0-1, il cluster del database PostgreSQL in {{ic|~/.local/share/akonadi/db_data/}} verr\u00e0 aggiornato automaticamente ogni qual volta venga rilevato un major upgrade della versione di PostgreSQL.\n* Per le versioni precedenti di {{Pkg|akonadi}}, i major upgrade della versione di PostgreSQL richiederanno un intervento manuale per aggiornare il database. Seguire le [https://userbase.kde.org/Akonadi/Postgres_update istruzioni di aggiornamento presenti nella KDE UserBase Wiki]. Assicurarsi di adattare i percorsi dei file binari PostgreSQL in modo che riflettano quelli utilizzati dai pacchetti {{Pkg|postgresql}} e {{Pkg|postgresql-old-upgrade}}, vedere [[PostgreSQL#Upgrading PostgreSQL]].\n}}\n\n====== Istanza PostgreSQL a livello di sistema ======\n\nQuesta soluzione necessita di un'istanza [[PostgreSQL (Italiano)|PostgreSQL]] gi\u00e0 configurata e in esecuzione.\n\nCreare un account utente PostgreSQL per il proprio utente:\n\n [postgres]$ createuser ''nome utente''\n\nCreare un database per Akonadi:\n\n [postgres]$ createdb -O ''nome utente'' -E UTF8 --locale=C -T template0 akonadi-''nome utente''\n\nConfigurare Akonadi affinch\u00e9 utilizzi l'istanza PostgreSQL a livello di sistema:\n\n{{hc|~/.config/akonadi/akonadiserverrc|2=\n[%General]\nDriver=QPSQL\n\n[QPSQL]\nHost=/run/postgresql\nName=akonadi-''nome utente''\nStartServer=false\n}}\n\n{{Nota|\u00c8 possibile specificare porta personalizzata, nome utente e password con le opzioni {{ic|1=Port=}}, {{ic|1=User=}}, {{ic|1=Password=}} nella sezione {{ic|[QPSQL]}}.}}\n\nAvviare Akonadi con {{ic|akonadictl start}} e verificarne lo stato: {{ic|akonadictl status}}.\n\n===== SQLite =====\n\nPer utilizzare [[SQLite]], modificare il file di configurazione di Akonadi come indicato di seguito:\n\n{{hc|~/.config/akonadi/akonadiserverrc|2=\n[%General]\nDriver=QSQLITE\n}}\n\n{{Nota|\n* Al momento dell'avvio, Akonadi creer\u00e0 la sezione {{ic|[QSQLITE]}} e imposter\u00e0 le relative variabili appropriate.\n* Il database verr\u00e0 salvato come {{ic|~/.local/share/akonadi/akonadi.db}}.\n}}\n\n===== Disabilitazione di Akonadi =====\n\nGli utenti che desiderano disabilitare Akonadi dovrebbero evitare di avviare qualunque applicazione KDE che lo richieda. Vedere questa [https://userbase.kde.org/Akonadi#Disabling_the_Akonadi_subsystem sezione in KDE userbase] per maggiori informazioni.\n\n=== KDE Connect ===\n\n[https://community.kde.org/KDEConnect KDE Connect] offre diverse funzioni che permettono di connettere il proprio telefono [[Android (Italiano)|Android]] o [[iOS]] con il proprio desktop Linux:\n\n* Condivisione di file e URL verso/da KDE da/verso qualunque app, senza fili.\n* Emulazione del touchpad: possibilit\u00e0 di utilizzare lo schermo del proprio telefono come un touchpad.\n* Sincronizzazione delle notifiche (4.3+): possibilit\u00e0 di leggere le notifiche del proprio telefono Android dal desktop.\n* Appunti condivisi: possibilit\u00e0 di eseguire operazioni di copia e incolla tra il proprio telefono e il proprio computer.\n* Controllo multimediale remoto: possibilit\u00e0 di utilizzare il proprio telefono come telecomando per controllare i riproduttori multimediali Linux.\n* Connessione WiFi: non sono necessari cavi USB o connessioni Bluetooth.\n* Cifratura RSA: sicurezza per le proprie informazioni.\n\n\u00c8 necessario utilizzare KDE Connect sia sul proprio computer che sul proprio telefono. Per il PC, [[installare]] il pacchetto {{Pkg|kdeconnect}}. Per Android, installare KDE Connect da [https://play.google.com/store/apps/details?id=org.kde.kdeconnect_tp Google Play] o da [https://f-droid.org/packages/org.kde.kdeconnect_tp/ F-Droid]. Nel caso si desideri avere la possibilit\u00e0 di navigare all'interno del file system del proprio cellulare, sar\u00e0 necessario [[installare]] {{Pkg|sshfs}} e configurare la visibilit\u00e0 del file system nell'app Android. Per iOS, installare KDE Connect dall'[https://apps.apple.com/app/kde-connect/id1580245991 App Store]. Non tutte le funzioni della versione Android sono disponibili in quella iOS.\n\nPer utilizzare la funzionalit\u00e0 di input remoto in una sessione Plasma Wayland, \u00e8 richiesto il pacchetto {{Pkg|xdg-desktop-portal}}.\n\n\u00c8 possibile utilizzare KDE Connect anche se non si utilizza il desktop Plasma. Gli utenti GNOME possono ottenere un migliore livello di integrazione installando {{AUR|gnome-shell-extension-gsconnect}} anzich\u00e9 {{Pkg|kdeconnect}}. Per avviare manualmente il demone di KDE Connect, eseguire {{ic|/usr/lib/kdeconnectd}}.\n\nSe si utilizza un [[firewall]], sar\u00e0 necessario aprire le porte UDP e TCP da {{ic|1714}} a {{ic|1764}}.\n\nTalvolta pu\u00f2 accadere che KDE Connect non rilevi un telefono. \u00c8 possibile riavviare i servizi eseguendo {{ic|killall kdeconnectd}} e aprendo poi kdeconnect nelle impostazioni di sistema o eseguendo {{ic|kdeconnect-cli --refresh}}, seguito da {{ic|kdeconnect-cli -l}}. \u00c8 inoltre possibile utilizzare ''Associa nuovo dispositivo > Aggiungi dispositivi per IP'' su KDE Connect per Android.\n\n== Trucchi e suggerimenti ==\n\n=== Utilizzo di un altro window manager ===\n\nCon Plasma \u00e8 possibile utilizzare un window manager diverso da KWin. In questo modo \u00e8 possibile combinare la funzionalit\u00e0 del desktop KDE e la praticit\u00e0 di un [[tiling window manager]], con una soluzione migliore rispetto all'utilizzo degli script di KWin che aggiungono la funzione di tiling.\n\nLa funzione di selezione dei componenti di Plasma [https://github.com/KDE/plasma-desktop/commit/2f83a4434a888cd17b03af1f9925cbb054256ade non permette pi\u00f9 di cambiare il window manager], tuttavia \u00e8 ancora possibile sostituire KWin utilizzando altri metodi.\n\n{{Nota|Sostituendo Kwin con un window manager che non sia dotato un compositore (come Openbox), tutti gli effetti di compositing del desktop, quale ad es. la trasparenza, andranno persi. In questo caso, installare ed eseguire uno strumento separato per la gestione del compositing come [[Xcompmgr]] o [[picom]] per avere a disposizione questi effetti.}}\n\n==== Sostituzione del servizio KWin ====\n\nA partire da KDE 5.25, \u00e8 abilitato di default l'[https://blog.davidedmundson.co.uk/blog/plasma-and-the-systemd-startup/ avvio di Plasma basato su systemd].\n\nPer sostituire KWin in questo processo di avvio \u00e8 necessario, per prima cosa, [[Help:Reading (Italiano)#Controllo delle unit\u00e0 systemd|mascherare]] il servizio {{ic|plasma-kwin_x11.service}} per l'utente attuale, al fine di prevenirne l'avvio.\n\nDopodich\u00e9, [[Help:Reading (Italiano)#Apporre, aggiungere, creare, modificare|creare]] una nuova [[systemd (Italiano)/User (Italiano)|unit\u00e0 utente]] systemd per avviare il proprio WM di preferenza [https://bugs.kde.org/show_bug.cgi?id=439481#c2]:\n\n{{hc|1=~/.config/systemd/user/plasma-custom-wm.service|2=\n[Install]\nWantedBy=plasma-workspace.target\n\n[Unit]\nDescription=Plasma Custom Window Manager\nBefore=plasma-workspace.target\n\n[Service]\nExecStart=''/path/to/other/wm''\nSlice=session.slice\nRestart=on-failure\n}}\n\nPer utilizzarla, [[Help:Reading (Italiano)#Controllo delle unit\u00e0 systemd|ricaricare il demone]] (come [[systemd (Italiano)/User (Italiano)|unit\u00e0 utente]]), assicurarsi di aver [[Help:Reading (Italiano)#Controllo delle unit\u00e0 systemd|mascherato]] il servizio {{ic|plasma-kwin_x11.service}} e [[Help:Reading (Italiano)#Controllo delle unit\u00e0 systemd|abilitare]] il servizio {{ic|plasma-custom-wm.service}} appena creato.\n\n{{Nota|In caso di utilizzo di i3 window manager con Plasma, potrebbe essere necessario impostare manualmente la modalit\u00e0 floating per le finestre di dialogo affinch\u00e9 queste si aprano correttamente. Per maggiori informazioni, vedere [[i3#Correct handling of floating dialogs]].}}\n\n==== Utilizzo del sistema di boot basato su script e KDEWM ====\n\nPer utilizzare il sistema di boot basato su script di Plasma, occorre disabilitare l'[[#Avvio tramite systemd|avvio tramite systemd]]. Una volta eseguita questa operazione, \u00e8 possibile cambiare il window manager impostando la [[environment variable|variabile d'ambiente]] {{ic|KDEWM}} prima dell'invocazione di Plasma.\n\n===== A livello di sistema =====\n\n{{Merge|Environment variables#Globally|Questa tecnica dovrebbe essere spostata qui in una nuova sezione (2.1.3: Using Xsession), per poi unire questa sezione con la precedente.}}\n\nSe si possiede l'accesso come root, \u00e8 inoltre possibile aggiungere una sessione XSession che sar\u00e0 disponibile per tutti gli utenti come opzione nella schermata di login.\n\nPer prima cosa, creare uno script con permessi di esecuzione come segue:\n\n{{hc|1=/usr/local/bin/plasma-i3.sh|2=\n#!/bin/sh\nexport KDEWM=/usr/bin/i3\n/usr/bin/startplasma-x11\n}}\n\nSostituire {{ic|/usr/bin/i3}} con il percorso del WM che si desidera utilizzare. Assicurarsi che il percorso sia definito correttamente. Nel caso KDE non fosse in grado di avviare il window manager, la sessione fallir\u00e0 e l'utente verr\u00e0 reindirizzato alla schermata di login.\n\nDopodich\u00e9, per aggiungere una sessione XSession, inserire in {{ic|/usr/share/xsessions}} un file con il seguente contenuto:\n\n{{hc|1=/usr/share/xsessions/plasma-i3.desktop|2=\n[Desktop Entry]\nType=XSession\nExec=/usr/local/bin/plasma-i3.sh\nDesktopNames=KDE\nName=Plasma (i3)\nComment=KDE Plasma with i3 as the WM}}\n\n==== Sessione KDE/Openbox ====\n\nIl pacchetto {{Pkg|openbox}} fornisce una sessione per utilizzare KDE con [[Openbox (Italiano)|Openbox]]. Per utilizzare questa sessione, selezionare ''KDE/Openbox'' dal menu del [[Display manager (Italiano)|display manager]].\n\nChi avvia la sessione manualmente, dovr\u00e0 aggiungere la seguente linea alla propria configurazione [[xinit (Italiano)|xinit]]:\n\n{{hc|~/.xinitrc|\nexec openbox-kde-session\n}}\n\n=== Script KWin per tiling window ===\n\nDi seguito un elenco di estensioni KWin che possono essere utilizzate per far s\u00ec che il comportamento di KDE somigli pi\u00f9 a quello di un [[tiling window manager]].\n\n* {{App|Bismuth|Add-on che dispone automaticamente le finestre in configurazione tiling e permette di gestirle mediante tastiera, in modo simile a i3, Sway o dwm.|https://github.com/Bismuth-Forge/bismuth|{{AUR|kwin-bismuth}}}}\n* {{App|Polonium|Un successore (non ufficiale) di Bismuth|https://github.com/zeroxoneafour/polonium|{{AUR|kwin-polonium}}}}\n* {{App|Kr\u00f6hnkite|Un'estensione per il tiling dinamico ispirata a dwm. |https://github.com/esjeon/krohnkite|{{AUR|kwin-scripts-krohnkite-git}}}}\n* {{App|KZones|Uno script che simula il comportamento di Microsoft PowerToys e dei layout di ancoraggio di Windows 11 |https://github.com/gerritdevriese/kzones}}\n\n=== Configurazione della risoluzione del monitor / monitor multipli ===\n\nPer abilitare la gestione della risoluzione del display e i monitor multipli in Plasma, installare {{Pkg|kscreen}}. Questo pacchetto fornisce le relative opzioni aggiuntive in ''Impostazioni di sistema > Schermo e video''.\n\n=== Configurazione dei profili ICC ===\n\nPer abilitare i [[ICC profiles|profili ICC]] in Plasma, [[installare]] {{Pkg|colord-kde}}. Questo pacchetto fornisce le relative opzioni aggiuntive in ''Impostazioni di sistema > Color Corrections''.\n\n\u00c8 possibile importare i profili ICC utilizzando ''Aggiungi profilo''.\n\n=== Disabilitazione dell'apertura del lanciatore di applicazioni con il tasto Super (tasto Windows) ===\n\nPer disabilitare questa funzione \u00e8 attualmente disponibile il seguente comando:\n\n $ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta \"\"\n\n=== Disabilitazione dei preferiti nel menu delle applicazioni ===\n\nCon l'integrazione del browser Plasma installata, KDE mostrer\u00e0 i preferiti all'interno del lanciatore di applicazioni.\n\nPer disabilitare questa funzione \u00e8 possibile eseguire i seguenti comandi:\n\n $ mkdir ~/.local/share/kservices5\n $ sed 's/EnabledByDefault=true$/EnabledByDefault=false/' /usr/share/kservices5/plasma-runner-bookmarks.desktop > ~/.local/share/kservices5/plasma-runner-bookmarks.desktop\n\n=== Integrazione IBus ===\n\n[[IBus]] \u00e8 un [[Input method#Input method framework|framework per il metodo di input]] integrabile all'interno di KDE. Vedere [[IBus#Integration]] per i relativi dettagli.\n\nL'impiego di [[IBus]] pu\u00f2 rendersi necessario in caso di utilizzo di KDE su [[Wayland (Italiano)|Wayland]] per poter usufruire del supporto per caratteri accentati e dead key [https://bugs.kde.org/show_bug.cgi?id=411729].\n\n=== Abilitazione dell'hotspot in plasma-nm ===\n\nVedere [[NetworkManager#Sharing internet connection over Wi-Fi]].\n\n=== Ripristino della sessione precedente salvata ===\n\nSe risulta selezionato ''Impostazioni di sistema > Avvio e spegnimento > Sessioni del desktop > All'accesso: Ripristina la sessione precedentemente salvata'' (default), ksmserver (il gestore di sessioni di KDE) salver\u00e0/caricher\u00e0 automaticamente tutte le applicazioni aperte in/da {{ic|~/.config/ksmserverrc}} al logout/login.\n\n{{Nota|Attualmente non \u00e8 possibile ripristinare le finestre native Wayland. Vedere [https://community.kde.org/Plasma/Wayland_Showstoppers Wayland Showstoppers] per informazioni sullo stato attuale di sviluppo.}}\n\n=== Ricezione della posta locale in KMail ===\n\nNel caso si sia provveduto a impostare la consegna della posta locale con un [[Mail server (Italiano)|server di posta]] che utilizzi il formato [[Wikipedia:Maildir|Maildir]], si potrebbe voler ricevere tale posta in KMail. In questo caso, \u00e8 possibile riutilizzare l'account di ricezione di default di KMail \"Local Folders\" che salva la posta in {{ic|~/.local/share/local-mail/}}.\n\nCreare per la cartella {{ic|~/Maildir}} (in cui viene di norma salvata la posta in formato Maildir) un link simbolico verso la cartella della posta in entrata dell'account \"Local Folders\":\n\n $ ln -s .local/share/local-mail/inbox ~/Maildir\n\nIn alternativa, aggiungere un nuovo account per la ricezione di tipo ''Maildir'' e impostare {{ic|~/Maildir}} come cartella per questo account.\n\n=== Configurare Plasma per tutti gli utenti ===\n\nModificare i file {{ic|config/main.xml}} nella cartella {{ic|/usr/share/plasma}}. Ad esempio, per configurare il lanciatore di applicazioni per tutti gli utenti, modificare il file {{ic|/usr/share/plasma/plasmoids/org.kde.plasma.kickoff/contents/config/main.xml}}. Per prevenire la sovrascrittura dei file con l'aggiornamento dei pacchetti, aggiungere i file all'array [[pacman (Italiano)#Saltare l'aggiornamento di un file|NoUpgrade di Pacman]]\n\n=== Disabilitazione dell'ibernazione ===\n\n{{Merge|Power management|Questo argomento non \u00e8 specifico per KDE. Unire e lasciare questa sezione sotto forma di link alla relativa pagina.}}\n\nPer disabilitare in modo corretto la funzione di ibernazione nascondendola dal menu, creare una regola di policy Polkit.\n\n{{hc|/etc/polkit-1/rules.d/99-disable-hibernate.rules|<nowiki>\n// Disable hibernate for all users\npolkit.addRule(function(action, subject) {\n   if ((action.id == \"org.freedesktop.login1.hibernate\")) {\n      return polkit.Result.NO;\n   }\n});\npolkit.addRule(function(action, subject) {\n   if ((action.id == \"org.freedesktop.login1.hibernate-multiple-sessions\")) {\n      return polkit.Result.NO;\n   }\n});\n</nowiki>}}\n\nIn alternativa, aggiungere le seguenti linee a un file in {{ic|/etc/systemd/sleep.conf.d/}}:\n\n{{hc|/etc/systemd/sleep.conf.d/00-disable-hibernation.conf|2=\n[Sleep]\nAllowHibernation=no\nAllowSuspendThenHibernate=no\nAllowHybridSleep=no\n}}\n\n=== Utilizzo delle regole delle finestre ===\n\nKwin \u00e8 in grado di specificare delle regole per specifiche finestre/applicazioni. Ad esempio, \u00e8 possibile forzare l'abilitazione della barra del titolo della finestra anche qualora lo sviluppatore dell'applicazione abbia deciso non non prevederne la presenza. \u00c8 possibile definire tali regole per specificare la posizione iniziale, le dimensioni, lo stato di minimizzazione, per mantenere la finestra sopra/sotto le altre ecc.\n\nPer creare una regola premere la combinazione di tasti {{ic|Alt+F3}} quando la finestra in questione \u00e8 selezionata. Dopodich\u00e9 in ''Altre azioni > Configura impostazioni specifiche per la finestra/l'applicazione'', \u00e8 possibile definire la propriet\u00e0 desiderata. Un elenco delle regole create \u00e8 disponibile in ''Impostazioni di sistema > Gestione delle finestre > Regole delle finestre''.\n\n=== Tastiera virtuale ===\n\nNell'installazione di default non \u00e8 presente alcuna tastiera virtuale. Sceglierne una adeguata alle proprie esigenze da [[List of applications/Utilities#On-screen keyboards]], ad esempio la tastiera Maliit, e installarla. Dopodich\u00e9 abilitarla nelle impostazioni di sistema.\n\n== Risoluzione di problemi ==\n\n=== Bug di qt5ct e kvantum dopo l'aggiornamento ===\n\n{{Out of date|Questa voce \u00e8 stata aggiunta in data 2021-02-15 : l'\"ultimo aggiornamento\" risale a oltre un anno fa. Questo problema \u00e8 risolto?}}\n\nL'ultimo aggiornamento potrebbe causare uno scaling HiDPI incompatibile ed essere causa di alcune interfacce eccessivamente grandi per il proprio schermo, di alcune icone mancanti o non visualizzate, e di pannelli o widget mancanti.\n\nProvare a rimuovere {{Pkg|qt5ct}} e {{Pkg|kvantum}} e i relativi pacchetti associati, dopodich\u00e9 applicare il tema globale di default di Plasma. Se il problema persiste, provare a cancellare tutte le proprie configurazioni di KDE e a reinstallare {{Grp|plasma}} per sovrascrivere la configurazione. Assicurarsi di verificare lo scaling HiDPI anche nelle impostazioni di sistema KDE.\n\n=== Font ===\n\n==== I font vengono non vengono visualizzati correttamente in una sessione Plasma ====\n\nProvare a installare i pacchetti {{Pkg|ttf-dejavu}} e {{Pkg|ttf-liberation}}.\n\nDopo l'installazione assicurarsi di eseguire il logout e di effettuare nuovamente il login. Non dovrebbe essere necessario modificare nulla in ''Impostazioni di sistema > Aspetto > Caratteri''. Se si sta utilizzando {{Pkg|qt5ct}}, le impostazioni nello strumento di configurazione Qt5 potrebbero sovrascrivere le impostazioni dei caratteri definite nelle impostazioni di sistema.\n\nNel caso si sia definito personalmente il rendering dei propri [[Fonts (Italiano)|font]], le impostazioni del sistema potrebbero alterarne l'aspetto. Accedendo a ''Impostazioni di sistema > Aspetto > Caratteri'' l'applicazione Impostazioni di sistema con ogni probabilit\u00e0 modificher\u00e0 il file di configurazione dei font ({{ic|fonts.conf}}).\n\nNon esiste alcun modo di evitare questo comportamento tuttavia, impostando i valori in modo che corrispondano al proprio file {{ic|fonts.conf}}, si avr\u00e0 nuovamente il rendering atteso dei font (sar\u00e0 necessario il riavvio della propria applicazione o, in alcuni casi, del desktop). Notare che questo comportamento \u00e8 comune anche alle preferenze per i font di Gnome.\n\n==== I font sono enormi o hanno un aspetto sproporzionato ====\n\nProvare a forzare i DPI dei font a {{ic|'''96'''}} in ''Impostazioni di sistema > Aspetto > Caratteri''.\n\nSe questa soluzione non funziona, provare a impostare il valore DPI direttamente nella propria configurazione Xorg come documentato in [[Xorg#Setting DPI manually]].\n\n=== Problemi legati alla configurazione ===\n\nMolti dei problemi in KDE sono correlati alla sua configurazione.\n\n==== Il desktop Plasma si comporta in modo strano ====\n\nI problemi di Plasma sono di norma causati da ''widget di Plasma'' instabili (detti anche ''plasmoidi'' in termini colloquiali) o da ''temi di Plasma''. Per prima cosa, individuare l'ultimo widget o tema installato e disabilitarlo o disinstallarlo.\n\nPertanto se il proprio desktop si \"blocca\" all'improvviso, la causa \u00e8 con ogni probabilit\u00e0 da attribuirsi a un widget difettoso installato. Se non si ricorda quale sia l'ultimo widget installato prima della comparsa del problema (talvolta potrebbe trattarsi di un problema che si presenta a intervalli irregolari), provare a individuarlo eliminando ogni widget fino alla scomparsa del problema. Dopodich\u00e9 \u00e8 possibile disinstallare il widget e segnalare il bug nel [https://bugs.kde.org/ bug tracker di KDE] '''esclusivamente se si tratta di un widget ufficiale'''. In caso contrario si raccomanda di individuare la relativa pagina sul [https://store.kde.org/ KDE Store] e di informare lo sviluppatore del widget in merito al problema occorso (indicando in dettagli i passaggi da riprodurre, ecc.).\n\nQualora non si riesca a individuare il problema, ma si vuole evitare di perdere \"tutte\" le impostazioni, portarsi nella cartella {{ic|~/.config/}} ed eseguire il seguente comando:\n\n $ for j in plasma*; do mv -- \"$j\" \"${j%}.bak\"; done\n\nQuesto comando rinominer\u00e0 '''tutti''' i file di configurazione di Plasma del proprio utente aggiungendovi l'estensione ''*.bak'' (ad es. {{ic|plasmarc.bak}}). In tal modo al nuovo login in Plasma verranno ripristinate le impostazioni di default. Per annullare quest'azione, rimuovere l'estensione ''.bak'' dai file. Qualora siano gi\u00e0 presenti dei file con estensione ''*.bak'', rinominarli, spostarli o cancellarli prima. La creazione di backup a intervalli regolari \u00e8 comunque una pratica consigliata. Vedere [[Synchronization and backup programs]] per un elenco di possibili soluzioni.\n\n==== Pulizia della cache per risolvere i problemi legati agli aggiornamenti ====\n\nIl [https://bbs.archlinux.org/viewtopic.php?id=135301 problema] pu\u00f2 essere causato da una cache datata. Talvolta, dopo un aggiornamento, la vecchia cache pu\u00f2 introdurre comportamenti strani, di cui pu\u00f2 risultare difficile eseguire il debug, quali shell non terminabili con il comando di kill, blocco della schermata alla modifica di impostazioni varie, impossibilit\u00e0 per Ark di estrarre archivi o incapacit\u00e0 di Amarok di riconoscere qualunque elemento della libreria musicale. Questa soluzione pu\u00f2 risolvere i problemi di visualizzazione delle applicazioni KDE e Qt in seguito a un aggiornamento.\n\nRicostruire la cache utilizzando i seguenti comandi:\n\n $ rm ~/.config/Trolltech.conf\n $ kbuildsycoca5 --noincremental\n\nOpzionalmente, svuotare il contenuto della cartella {{ic|~/.cache/}}, tuttavia questa operazione pulir\u00e0 la cache anche delle altre applicazioni:\n\n $ rm -rf ~/.cache/*\n\n==== Il desktop Plasma non rispetta le impostazioni di localizzazione/lingua ====\n\nIl desktop Plasma potrebbe utilizzare impostazioni diverse da quelle definite nel pannello delle impostazioni di sistema KDE o nel file {{ic|locale.conf}} (via [[Locale#Variables]]). La prima cosa da fare \u00e8 effettuare il logout e poi nuovamente il login dopo aver rimosso {{ic|~/.config/plasma-localerc}}, se questa operazione non risolve il problema, provare a modificare manualmente il file. Ad esempio, per impostare la variabile {{ic|LANG}} con il valore {{ic|it_IT.UTF-8}} e la variabile {{ic|LC_MESSAGES}} con il valore {{ic|en_US.UTF-8}}:\n\n{{hc|~/.config/plasma-localerc|2=\n[Formats]\nLANG=it_IT.UTF-8\n\n[Translations]\nLANGUAGE=en_US\n}}\n\n==== Impossibile cambiare tema, icone, font, colori nelle impostazioni di sistema; la maggior parte delle icone non viene visualizzata ====\n\nAssicurarsi che la [[environment variable|variabile d'ambiente]] {{ic|QT_QPA_PLATFORMTHEME}} non sia impostata, il comando {{ic|printenv QT_QPA_PLATFORMTHEME}} dovrebbe restituire un output vuoto. Nel caso contrario in cui sia definito un ambiente da parte di un'applicazione (con ogni probabilit\u00e0 qt5ct), questa variabile forzer\u00e0 le impostazioni di qt5ct sulle applicazioni Qt. Il comando {{ic|1=export QT_QPA_PLATFORMTHEME=}} dovrebbe annullare la variabile.\n\nUna soluzione pi\u00f9 semplice (e pi\u00f9 affidabile) pu\u00f2 essere quella di disinstallare completamente qt5ct.\n\n==== Il controllo del volume, le notifiche o i tasti multimediali non funzionano ====\n\nNascondendo determinati elementi nelle impostazioni del vassoio di sistema (ad es. Volume audio, Lettore multimediale o Notifiche) si disabilitano anche le rispettive funzioni. Se si nasconde ''Volume audio'' si disabilitano i tasti di controllo del volume, ''Lettore multimediale'' disabilita i tasti di riproduzione multimediali (rewind, stop, pausa) e nascondendo ''Notifiche'' si disabilita la visualizzazione delle notifiche.\n\n==== Il modulo KCM Schermata di accesso non sincronizza le impostazioni del cursore con SDDM ====\n\nIl modulo KCM Schermata di accesso legge le impostazioni del cursore dell'utente dal file {{ic|~/.config/kcminputrc}}, in assenza di questo file le impostazioni non vengono sincronizzate. Il modo pi\u00f9 semplice per generare questo file \u00e8 modificare il proprio tema del cursore in ''Impostazioni di sistema > Puntatori'', e reimpostare in seguito il proprio tema cursore preferito.\n\n==== Pannelli/widget mancanti ====\n\nUn eventuale crash o la sostituzione di componenti hardware possono modificare i numeri degli schermi, anche in un setup con monitor singolo. Di conseguenza i pannelli/widget possono risultare mancanti. Questo problema pu\u00f2 essere risolto modificando i valori {{ic|lastScreen}} nel file {{ic|~/.config/plasma-org.kde.plasma.desktop-appletsrc}}.\n\n=== Problemi grafici ===\n\nAssicurarsi di avere installato il driver appropriato per la propria GPU. Vedere [[Xorg#Driver installation]] per maggiori informazioni. Se si possiede una scheda datata, potrebbe essere utile [[#Disabilitazione manuale o automatica degli effetti desktop per specifiche applicazioni|disabilitare manualmente o automaticamente gli effetti desktop per specifiche applicazioni]] o [[#Disabilitazione del compositing|disabilitare il compositing]].\n\n==== Ottenere lo stato attuale di KWin per finalit\u00e0 di supporto e debug ====\n\nIl seguente comando restituisce un sommario dello stato attuale di KWin incluse le opzioni utilizzate, il backend di compositing utilizzato e le rispettive funzionalit\u00e0 del driver OpenGL. Maggiori informazioni alla pagina [https://blog.martin-graesslin.com/blog/2012/03/on-getting-help-for-kwin-and-helping-kwin/ Martin's blog].\n\n $ qdbus org.kde.KWin /KWin org.kde.KWin.supportInformation\n\n==== Disabilitazione manuale o automatica degli effetti desktop per specifiche applicazioni ====\n\nIn Plasma determinati effetti desktop sono abilitati di default e, ad esempio, non tutti i giochi li disabilitano automaticamente. \u00c8 possibile disabilitare gli effetti desktop in ''Impostazioni di sistema > Comportamento dello spazio di lavoro > Effetti del desktop''. Inoltre \u00e8 possibile attivarli e disattivarli con la combinazione di tasti {{ic|Alt+Shift+F12}}.\n\nSi possono altres\u00ec creare regole di KWin personalizzate per abilitare/disabilitare automaticamente il compositing quando una determinata applicazione/finestra si avvia in ''Impostazioni di sistema > Gestione delle finestre > Regole delle finestre''.\n\n==== Abilitazione della trasparenza ====\n\nSe si utilizza uno sfondo trasparente senza abilitare il compositor, viene visualizzato questo messaggio:\n\n Questo schema di colori utilizza uno sfondo trasparente che sembra non essere supportato dal proprio desktop\n\nIn ''Impostazioni di sistema > Schermo e video > Compositore'', selezionare ''Composizione: Abilita all'avvio'' e riavviare Plasma.\n\n==== Disabilitazione del compositing ====\n\nIn ''Impostazioni di sistema > Schermo e video > Compositore'', selezionare ''Composizione: Abilita all'avvio'' e riavviare Plasma.\n\n==== Sfarfallio in modalit\u00e0 schermo intero con il compositing abilitato ====\n\nIn ''Impostazioni di sistema > Schermo e video > Compositore'', selezionare ''Composizione: Consenti alle applicazioni di bloccare la composizione''. Questa operazione pu\u00f2 incidere negativamente sulle prestazioni.\n\n==== Il puntatore di Plasma talvolta non viene visualizzato correttamente ====\n\nCreare la cartella {{ic|~/.icons/default}} (oppure {{ic|${XDG_DATA_HOME:-$HOME/.local/share}/icons/default/}}) e inserire al suo interno un file con nome {{ic|index.theme}} con il seguente contenuto:\n\n{{hc|~/.icons/default/index.theme|2=\n[Icon Theme]\nInherits=breeze_cursors\n}}\n\nSe necessario, sostituire {{ic|breeze_cursors}} con il tema del cursore utilizzato.\n\nEseguire il seguente comando:\n\n $ ln -s /usr/share/icons/breeze_cursors/cursors ~/.icons/default/cursors\n\nIn Wayland \u00e8 necessario installare {{Pkg|xdg-desktop-portal-gtk}} affinch\u00e9 le applicazioni GTK/GNOME utilizzino correttamente i temi del cursore.\n\n===== Firefox e Thunderbird ignorano il tema del cursore =====\n\nSe si \u00e8 attivato il supporto per [[Firefox#Wayland]], Firefox e Thunderbird faranno riferimento a GSettings per determinare il puntatore da visualizzare.\n\nPer sincronizzare le impostazioni KDE con le applicazioni GTK, installare {{Pkg|kde-gtk-config}}.\n\nSe non si desidera installare un pacchetto extra, \u00e8 possibile impostare il tema del cursore manualmente:\n\n $ gsettings set org.gnome.desktop.interface cursor-theme ''nome del tema del cursore''\n\n==== Sfarfallio/movimento a scatti del puntatore al cambio ruoli (ad es., quando il mouse passa sopra link ipertestuali) ====\n\nProvare a installare il driver appropriato di accelerazione 2D per il proprio sistema e window manager.\n\n==== \u00c8 impostata una risoluzione schermo inutilizzabile ====\n\nLe proprie impostazioni locali per kscreen possono sovrascrivere quelle definite in {{ic|xorg.conf}}. Esaminare i file di configurazione di kscreen in {{ic|~/.local/share/kscreen/}} e verificare che la modalit\u00e0 non sia impostata su un valore di risoluzione non supportato dal proprio monitor.\n\n==== Icone sfocate nel vassoio di sistema ====\n\nPer aggiungere le icone al vassoio di sistema, spesso le applicazioni utilizzano la libreria appindicator. Nel caso le icone risultino sfocate, verificare la versione di libappindicator installata nel proprio sistema. Se risulta installata soltanto la libreria {{Pkg|libappindicator-gtk2}}, \u00e8 possibile installare {{Pkg|libappindicator-gtk3}} per tentare di correggere la visualizzazione delle icone.\n\n==== Impossibile modificare la risoluzione dello schermo all'interno di una macchina virtuale ====\n\nQuando Plasma viene eseguito all'interno di una macchina virtuale [[VMware (Italiano)|VMware]], [[VirtualBox (Italiano)|VirtualBox]] o [[QEMU (Italiano)|QEMU]], kscreen potrebbe non consentire di modificare la risoluzione dello schermo guest su una risoluzione superiore a 800\u00d7600.\n\nPer aggirare questa limitazione \u00e8 possibile impostare l'opzione {{ic|PreferredMode}} in {{man|5|xorg.conf.d}}. In alternativa, provare a utilizzare un adattatore grafico diverso nella macchina virtuale, ad es. VBoxSVGA anzich\u00e9 VMSVGA per VirtualBox e Virtio anzich\u00e9 QXL per QEMU. Vedere [https://bugs.kde.org/show_bug.cgi?id=407058 KDE Bug 407058] per maggiori dettagli.\n\n==== Dolphin, Kate, ecc. rimangono bloccati a lungo all'apertura ====\n\nVerificare che le cartelle ({{ic|Documenti}}, {{ic|Scaricati}}, ecc.) del proprio utente non siano in sola lettura.\n\n==== Lo screenshot con Spectacle utilizza uno stato dello schermo precedente ====\n\nIn ''Impostazioni di sistema > Schermo e video > Compositore'', modificare ''Tieni le miniature delle finestre'' da ''Solo per le finestre visibili'' a ''Mai''. Se la propria macchina utilizza grafica Intel, assicurarsi che {{Pkg|xf86-video-intel}} [[Intel graphics#Installation|non sia installato]].\n\n=== Problemi audio ===\n\n{{Nota|Assicurarsi per prima cosa che il pacchetto {{Pkg|alsa-utils}} sia installato.}}\n\n==== Niente audio dopo la sospensione ====\n\nSe in seguito a una sospensione non si riscontra alcun segnale audio e se in KMix non vengono visualizzati dispositivi audio che dovrebbero invece essere presenti, potrebbe essere utile riavviare plasmashell e pulseaudio:\n\n $ killall plasmashell\n $ systemctl --user restart pulseaudio.service\n $ plasmashell\n\nPotrebbe essere necessario riavviare alcune applicazioni per ripristinare l'audio al loro interno.\n\n==== Impossibile riprodurre file MP3 utilizzando il backend Phonon GStreamer ====\n\nQuesto problema pu\u00f2 essere risolto installando il plugin libav GStreamer (pacchetto {{Pkg|gst-libav}}). Nel caso si continuino a riscontrare problemi, \u00e8 possibile provare a cambiare il backend Phonon utilizzato installandone un altro quale {{AUR|phonon-qt4-vlc}} o {{Pkg|phonon-qt5-vlc}}.\n\nDopodich\u00e9 assicurarsi di selezionare il backend come preferito in ''Impostazioni di sistema > Multimedia > Audio e Video > Backend''.\n\nSe questa voce non viene visualizzata nelle impostazioni di sistema, provare a eseguire {{ic|phononsettings}} nel proprio terminale.\n\n==== Nessuna icona di controllo del volume nel vassoio di sistema e impossibile regolare il volume con il tasto funzione ====\n\nVerificare che {{Pkg|plasma-pa}} sia installato nel proprio sistema.\n\n==== Niente audio dopo poco tempo ====\n\nSe il comando {{ic|journalctl -p4 -t pulseaudio}} restituisce voci che l'errore {{ic|Failed to create sink input: sink is suspended}}, provare a commentare la seguente linea in {{ic|/etc/pulse/default.pa}}:\n\n #load-module module-suspend-on-idle\n\nSe il problema persiste, {{Pkg|plasma-meta}} o {{Grp|plasma}} potrebbero aver installato {{Pkg|pulseaudio}} insieme a {{Pkg|wireplumber}}. Per risolvere il sistema, sostituire {{Pkg|pulseaudio}} con {{Pkg|pipewire-pulse}}. Se si preferisce {{Pkg|pulseaudio}}, sostituire {{Pkg|wireplumber}} con {{Pkg|pipewire-media-session}}. Vedere [[PipeWire#PulseAudio clients]] e [https://bbs.archlinux.org/viewtopic.php?id=276308 questo thread sul forum] for per maggiori dettagli.\n\n=== Gestione energetica ===\n\n==== Nessuna opzione di sospensione/ibernazione ====\n\nSe il proprio sistema \u00e8 dotato delle funzionalit\u00e0 per la sospensione o l'ibernazione mediante [[systemd (Italiano)|systemd]], ma queste opzioni non vengono visualizzate in KDE, assicurarsi che il pacchetto {{Pkg|powerdevil}} sia installato nel proprio sistema.\n\n==== Nessuna opzione per il profilo energetico ====\n\nAssicurarsi di aver installato {{Pkg|powerdevil}} e {{Pkg|power-profiles-daemon}}.\nEseguire ''powerprofilesctl'' e verificare il driver. Se il driver \u00e8 {{ic|intel_pstate}} o {{ic|amd_pstate}}, la propria configurazione \u00e8 corretta, in caso contrario vedere [[CPU frequency scaling#Scaling drivers]] per maggiori informazioni sull'abilitazione.\n\n=== KMail ===\n\n==== Pulizia della configurazione di Akonadi per risolvere i problemi in KMail ====\n\nVedere [https://userbase.kde.org/KMail/FAQs_Hints_and_Tips#Clean_start_after_a_failed_migration] per maggiori dettagli.\n\nSe si desidera effettuare un backup, copiare le seguenti cartelle di configurazione:\n\n $ cp -a ~/.local/share/akonadi ~/.local/share/akonadi-old\n $ cp -a ~/.config/akonadi ~/.config/akonadi-old\n\n==== Casella inbox IMAP vuota in KMail ====\n\nPer alcuni account IMAP, KMail mostrer\u00e0 la casella inbox come contenitore di livello top (risulta pertanto impossibile leggere i messaggi al suo interno) contenente tutte le altre cartelle di tali account.[https://bugs.kde.org/show_bug.cgi?id=284172]. Per risolvere questo problema \u00e8 sufficiente disabilitare le sottoscrizioni lato server nelle impostazioni account di KMail.\n\n==== Errore di autorizzazione per account EWS in KMail ====\n\nDurante l'impostazione di un account EWS in KMail, \u00e8 possibile che si verifichino errori di autorizzazione anche inserendo credenziali valide e perfettamente funzionanti. Questo problema \u00e8 con ogni probabilit\u00e0 causato da un malfunzionamento nella comunicazione tra [[KWallet]] e KMail. Per aggirare questo inconveniente, impostare una password tramite qdbus:\n\n $ qdbus org.freedesktop.Akonadi.Resource.akonadi_ews_resource_0 /Settings org.kde.Akonadi.Ews.Wallet.setPassword \"XXX\"\n\n=== Attivit\u00e0 di logging aggressiva nel journal da parte di QXcbConnection / kscreen.xcb.helper ===\n\nVedere [[Qt#Disable/Change Qt journal logging behaviour]].\n\n=== Le applicazioni KF5/Qt 5 non visualizzano le icone in i3/FVWM/awesome ===\n\nVedere [[Qt#Configuration of Qt 5 applications under environments other than KDE Plasma]].\n\n=== Problemi con il salvataggio delle credenziali e visualizzazione continua di finestre di dialogo di KWallet ===\n\nSi sconsiglia di disabilitare il sistema di salvataggio delle password di [[KWallet]] nelle impostazioni dell'utente, in quanto questo sistema \u00e8 necessario per il salvataggio delle credenziali cifrate quali le password delle reti WiFi per ogni utente. La disabilitazione di questo sistema pu\u00f2 essere la causa della continua comparsa di finestre di dialogo di KWallet.\n\nNel caso risultino fastidiose le finestre di dialogo per lo sbloccaggio del wallet quando le applicazioni vi richiedono l'accesso, \u00e8 possibile impostare i [[Display manager (Italiano)|display manager]] [[SDDM]] e [[LightDM]] affinch\u00e9 sblocchino il wallet automaticamente al login. Vedere a tal proposito [[KDE Wallet#Unlock KDE Wallet automatically on login]]. Il primo wallet deve essere generato da KWallet (e non dall'utente) per poter essere utilizzato per le credenziali dei programmi di sistema.\n\nQualora si desideri impedire che le credenziali del wallet vengano aperte nella memoria per ogni applicazione, \u00e8 possibile limitare l'accesso delle applicazioni al wallet stesso utilizzando le funzionalit\u00e0 offerte da {{Pkg|kwalletmanager}} nelle impostazioni di KWallet.\n\nNel caso non si desideri alcun tipo di cifratura delle credenziali, \u00e8 possibile semplicemente lasciare vuoti i campi associati alla password quando KWallet ne richiede la definizione al momento della creazione di un wallet. In questo caso, le applicazioni possono accedere alle password senza che sia necessario prima sbloccare il wallet.\n\n=== Discover non mostra alcuna applicazione ===\n\nQuesto problema pu\u00f2 essere risolto installando il pacchetto {{Pkg|packagekit-qt5}}.\n\n{{Warning|Come illustrato in un [https://github.com/archlinux/archinstall/issues/1321#issuecomment-1151343223 commento su GitHub] da un Package Maintainer, \"Gestire i pacchetti di sistema tramite packagekit \u00e8 una pratica fondamentalmente incompatibile con la nostra distribuzione rolling release che richiede elevati livelli di manutenzione, e in cui ogni aggiornamento potrebbe potenzialmente lasciare il sistema in uno stato non avviabile o comunque inutilizzabile, qualora l'utente non ponga la necessaria attenzione nella lettura dei file di log di pacman o nell'integrazione dei file pacnew, prima di effettuare il reboot.\"}}\n\n=== Discover non mostra pi\u00f9 gli aggiornamenti dai repository di Arch ===\n\nTalvolta Discover potrebbe non rimuovere il lock alpm PackageKit. Per sbloccarlo, rimuovere {{ic|/var/lib/PackageKit/alpm/db.lck}}. Utilizzare \"Aggiorna\" in Discover e gli aggiornamenti dovrebbero essere visualizzati (se disponibili).\n\n=== Elevato utilizzo della CPU da parte di kscreenlocker_greet con i driver NVIDIA ===\n\nCome descritto in [https://bugs.kde.org/show_bug.cgi?id=347772 KDE Bug 347772] i driver OpenGL NVIDIA e QML potrebbero non funzionare in modo ottimale con Qt 5. La conseguenza potrebbe essere un elevato utilizzo della CPU da parte di {{ic|kscreenlocker_greet}} dopo lo sblocco della sessione. Per aggirare questo problema, impostare la [[environment variable|variabile d'ambiente]] {{ic|QSG_RENDERER_LOOP}} in {{ic|basic}}.\n\nDopodich\u00e9 terminare tutte le istanze precedenti del greeter con il comando {{ic|killall kscreenlocker_greet}}.\n\n=== OS error 22 eseguendo Akonadi su file system ZFS ===\n\nSe la propria cartella home si trova all'interno di un pool [[ZFS]], creare un file {{ic|~/.config/akonadi/mysql-local.conf}} con il seguente contenuto:\n\n [mysqld]\n innodb_use_native_aio = 0\n\nVedere [[MariaDB#OS error 22 when running on ZFS]].\n\n=== Impossibile scorrere all'interno di alcuni programmi quando le relative finestre sono inattive ===\n\nLa causa \u00e8 da attribuirsi alla modalit\u00e0 problematica di gestione degli eventi di scorrimento con il mouse da parte di GTK3. Un modo per aggirare questo problema \u00e8 impostare la [[environment variable|variabile d'ambiente]] {{ic|1=GDK_CORE_DEVICE_EVENTS=1}}. Tuttavia, cos\u00ec facendo si disabilitano anche lo smooth scrolling del touchpad e lo scorrimento su touchscreen.\n\n=== TeamViewer \u00e8 lento ===\n\nTeamViewer potrebbe funzionare lentamente se si utilizzano animazioni (come la minimizzazione della finestre). Il problema pu\u00f2 essere aggirato [[#Disabilitazione del compositing|disabilitando il compositing]] .\n\n=== Kmail, Kontact e Wayland ===\n\nKmail potrebbe smettere di rispondere, mostrare uno sfondo nero nella visualizzazione dei messaggi o comportamenti simili, spesso dopo essere stata minimizzata e poi ripristinata. Un modo per aggirare questo problema potrebbe essere impostare la [[environment variable|variabile d'ambiente]] {{ic|1=QT_QPA_PLATFORM=\"xcb;wayland\"}}. Vedere [https://bugs.kde.org/show_bug.cgi?id=397825 KDE Bug 397825].\n\n=== Sbloccare i widget (Plasma \u2265 5.18) ===\n\nSe si erano precedentemente bloccati i widget, con ogni probabilit\u00e0 ci si trover\u00e0 nell'impossibilit\u00e0 di sbloccarli nuovamente.\nPer farlo \u00e8 sufficiente eseguire questo comando:\n\n $ qdbus org.kde.plasmashell /PlasmaShell evaluateScript \"lockCorona(false)\"\n\nBench\u00e9 ci\u00f2 non sia necessario nella nuova funzione {{ic|Customize Layout}}, se si desidera bloccarli nuovamente eseguire:\n\n $ qdbus org.kde.plasmashell /PlasmaShell evaluateScript \"lockCorona(true)\"\n\n=== KIO apre gli URL con il programma sbagliato ===\n\nVerificare le associazioni dei file per HTML, PHP, ecc... e modificare le impostazioni assegnando un browser. I file di cache di KIO si trovano in {{ic|$HOME/.cache/kioexec}}. Vedere anche [[xdg-utils#URL scheme handlers]].\n\n=== Tab Scorciatoie personalizzate mancante nelle impostazioni di sistema ===\n\nCi\u00f2 si verifica quando il pacchetto {{Pkg|khotkeys}}{{Broken package link|package not found}} non \u00e8 installato. Dopo averlo installato, potrebbe essere necessario riavviare l'applicazione Impostazioni di sistema per applicare i cambiamenti.\n\n=== Blocco dello schermo prima della sospensione e dell'ibernazione ===\n\nNell'applicazione Impostazioni di sistema, KDE mette a disposizione un'impostazione che consente di bloccare automaticamente lo schermo dopo il risveglio dalla sospensione. Al momento della riattivazione, [https://www.reddit.com/r/kde/comments/obnpeb/how_to_lock_system_before_suspend/ alcuni utenti] segnalano che lo schermo viene visualizzato brevemente prima di essere bloccato. Per prevenire questo comportamento e far s\u00ec che KDE blocchi lo schermo prima della sospensione, creare il seguente hook in {{man|1|systemd}} come utente root:\n\n{{hc|/usr/lib/systemd/system-sleep/lock_before_suspend.sh|2=\n#!/bin/bash\n\ncase $1/$2 in\n    pre/*)\n        case $2 in\n            suspend{{!}}hibernate)\n                loginctl lock-session\n                sleep 1\n                ;;\n            esac\n        ;;\nesac\n}}\n\nL'utilizzo di ''sleep'' \u00e8 necessario per permettere il completamento del blocco della sessione prima della sospensione del dispositivo. Un valore inferiore non permette il completamento.\n\nDopo aver creato il file, renderlo [[Help:Reading (Italiano)#Rendere un file eseguibile|eseguibile]].\n\nInfine, assicurarsi che l'impostazione KDE sia abilitata in selezionando la casella di spunta \"Dopo il risveglio dalla sospensione\" in Impostazioni di sistema > Comportamento dello spazio di lavoro > Blocco dello schermo.\n\n=== Conflitto delle scorciatoie X11 in Wayland ===\n\nAlcuni software X11 come {{Pkg|freerdp}} possono catturare l'input della tastiera a partire da KDE 5.27. Altri come [[VMware (Italiano)|VMware]] non sono in grado di eseguire questa operazione correttamente. [https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/keyboard-shortcuts-inhibit/keyboard-shortcuts-inhibit-unstable-v1.xml]\n\nForzare la cattura dell'input da tastiera [https://gitlab.freedesktop.org/xorg/xserver/-/issues/1332 in Xserver] o nei compositori \u00e8 una pratica inappropriata. [https://gitlab.gnome.org/GNOME/mutter/-/issues/1720] \u00c8 possibile risolvere questo problema con una soluzione elegante procedendo come segue:\n\n* Fare clic con il tasto destro sulla barra del titolo della finestra (ad es. VMware o Citrix);\n* ''Altre azioni > Configura impostazioni specifiche per la finestra...''\n* Fare clic su ''Aggiungi propriet\u00e0...'' e selezionare ''Ignora la scorciatoie globali''.\n* Selezionare ''forza'' e ''s\u00ec''. Applicare l'impostazione.\n\n== Vedere anche ==\n\n* [https://www.kde.org/ KDE homepage]\n* [https://dot.kde.org/ KDE news]\n* [https://planet.kde.org/ KDE Blogs]\n* [https://discuss.kde.org/ KDE Forums]\n* [https://wiki.kde.org/ KDE Wikis]\n* [https://bugs.kde.org/ KDE bug tracker and reporter]\n* [https://blog.martin-graesslin.com/blog/kategorien/kde/ Martin Graesslin's blog]\n* [https://community.kde.org/Matrix KDE Matrix Rooms]"
                    }
                ]
            },
            "5012": {
                "pageid": 5012,
                "ns": 0,
                "title": "Fonts (Espa\u00f1ol)",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Fonts (Espa\u00f1ol)]]\n[[de:Schriftarten]]\n[[en:Fonts]]\n[[ja:\u30d5\u30a9\u30f3\u30c8]]\n[[uk:Fonts]]\n[[zh-hans:Fonts]]\n{{TranslationStatus (Espa\u00f1ol)|Fonts|2020-05-31|617219}}\n{{Related articles start (Espa\u00f1ol)}}\n{{Related2|Font configuration (Espa\u00f1ol)|Configuraci\u00f3n de fuentes}}\n{{Related|Linux console#Fonts}}\n{{Related|Java Runtime Environment fonts}}\n{{Related|Metric-compatible fonts}}\n{{Related|Microsoft fonts}}\n{{Related articles end}}\n\nDe [[Wikipedia:Computer font|Fuentes del ordenador (En ingles)]]: \"Una tipograf\u00eda del ordenador (o fuente) es un archivo de datos electr\u00f3nicos que contiene un conjunto de glifos, caracteres, o s\u00edmbolos como dingbats.\"\n\nNote que ciertas licencias de fuentes pueden imponer ciertas limitaciones legales.\n\n== Formatos de fuente ==\n\nMuchos ordenadores que usan fuentes hoy en d\u00eda est\u00e1n en un formato ''mapa de bits'' (bitmap) o en formato ''contorno'' (outline).\n;Fuentes mapa de bits: Consisten en una matriz de puntos o p\u00edxeles que representa la imagen de cada glifo en cada cara y tama\u00f1o.\n;Fuentes de contorno o ''vectoriales'': Usa curvas de B\u00e9zier, instrucciones de dibujo y formulas matem\u00e1ticas para describir cada glifo, que marcan el contorno del car\u00e1cter en cualquier tama\u00f1o.\n\n=== Formato bitmap ===\n\n* [[Wikipedia:Glyph Bitmap Distribution Format|Distribuci\u00f3n del formato mapa de bits (ingl\u00e9s)]] (BDF) por Adobe.\n* [[Wikipedia:Portable Compiled Format|Formato compilado portable (ingl\u00e9s)]] (PCF) por Xorg.\n* [[Wikipedia:PC Screen Font|Fuentes de pantalla PC]] (PSF) usado por el Kernel para las fuentes de la consola, no soportada por Xorg (la extension de los archivos Unicode PSF es {{ic|psfu}})\n\nEstos formatos tambi\u00e9n pueden estar comprimidos. Vea [[#Bitmap]] para ver las fuentes bitmap disponibles.\n\n=== Formato de contorno ===\n\n* [[Wikipedia:es:Tipo de letra PostScript|Fuentes PostScript]] por Adobe \u2013 con varios formatos, por ejemplo: Fuente ASCII de impresora (PFA) y fuente binaria de impresora (PFB)\n* [[Wikipedia:es:TrueType|TrueType]] por Apple y Microsoft (extensi\u00f3n: {{ic|ttf}})\n* [[Wikipedia:es:OpenType|OpenType]] por Microsoft, construido sobre TrueType (extensiones: {{ic|otf}}, {{ic|ttf}})\n\nPara la mayor\u00eda de casos, la diferencia t\u00e9cnica entre TrueType y OpenType puede ignorarse.\n\n=== Otros Formatos ===\n\nLa aplicaci\u00f3n de composici\u00f3n [[TeX Live (Espa\u00f1ol)|TeX]] y su software complementario, ''Metafuente'', tradicionalmente renderiza caracteres utilizando sus propios m\u00e9todos. Algunas de estas extensiones utilizadas desde estos dos programas que son {{ic|*pk}}, {{ic|*gf}}, {{ic|mf}} y {{ic|vf}}. Las versiones modernas tambi\u00e9n pueden utilizar fuentes TrueType y OpenType.\n\n[https://fontforge.github.io/en-US/ FontForge] ({{Pkg|fontforge}}), un editor de fuentes, puede guardar fuentes en su propio formato basado en texto, {{ic|sfd}}, base de datos de fuentes spline (''s''pline ''f''ont ''d''atabase).\n\nEl formato [https://www.w3.org/TR/SVG/text.html#FontsGlyphs SGV] tiene tambi\u00e9n su propio m\u00e9todo para describir fuentes.\n\n== Instalaci\u00f3n ==\n\nHay varios m\u00e9todos para instalar fuentes.\n\n=== Pacman ===\n\nFuentes y colecciones de fuentes se pueden instalar con [[pacman (Espa\u00f1ol)|pacman]] en repositorios habilitados.\n\nLas fuentes disponibles se pueden encontrar [[pacman (Espa\u00f1ol)#Consultar la base de datos de los paquetes|buscando paquetes]] (Por ej. {{ic|font}} o {{ic|ttf}}).\n\n=== Crear un paquete ===\n\nDeber\u00eda dejar a pacman la habilidad de manejar sus fuentes, que se hace [[Creating packages (Espa\u00f1ol)|creando un paquete]] de Arch. Este se puede compartir con la comunidad a trav\u00e9s del [[AUR (Espa\u00f1ol)|AUR]]. Los paquetes para instalar fuentes son particularmente similares. Vea [[Font packaging guidelines|guia de empaquetaci\u00f3n de fuentes (en ingl\u00e9s)]].\n\nEl nombre de familia de un archivo de fuente se puede adquirir utilizando {{ic|fc-query}} por ejemplo: {{ic|fc-query -f '%{family[0]}\\n' /path/to/file}}. El formato se describe en {{man|3|FcPatternFormat}}.\n\n=== Instalaci\u00f3n manual ===\n\nLa forma recomendada para a\u00f1adir fuentes al sistema que no est\u00e1n en los repositorios est\u00e1 descrito en [[#Crear un paquete]]. Esto le da a pacman la habilidad de quitar o actualizar despu\u00e9s de un tiempo. De todas formas las fuentes tambi\u00e9n se pueden instalar manualmente.\n\nPara instalar fuentes en todo el sistema (disponible para todos los usuarios), mueve la carpeta al directorio {{ic|/usr/share/fonts}}. Todos los usuarios tienen que poder leer el archivo, utilice [[chmod (Espa\u00f1ol)|chmod]] para establecer los permisos correctos (es decir al menos {{ic|0444}} para archivos y {{ic|0555}} para carpetas). Para instalar las fuentes solo para un \u00fanico usuario, utilice {{ic|~/.local/share/fonts/}} ({{ic|~/.fonts/}} est\u00e1 obsoleto).\n\nPara cargar las fuentes directamente en Xserver (lo contrario a utilizar un ''servidor de fuentes'') el directorio recientemente a\u00f1adido tiene que incluirse en la entrada FontPath. Esta entrada se localiza en la secci\u00f3n ''Archivos'' [[Xorg#Configuration|de su archivo de configuraci\u00f3n Xorg]] (por ej. {{ic|/etc/X11/xorg.conf}} o {{ic|/etc/xorg.conf}}). vea [[#Aplicaciones antiguas]] para m\u00e1s detalles.\n\nDespu\u00e9s actualice la cache de fuente de fontconfig: (normalmente no es necesario ya que la librer\u00eda de fontconfig lo hace)\n\n $ fc-cache\n\n=== Aplicaciones antiguas ===\n\nCon aplicaciones antiguas que no soportan fontconfig (por ej. Aplicaciones GTK 1.x, y {{ic|xfontsel}}) se necesita crear el \u00edndice en el directorio de la fuente: \n\n $ mkfontscale\n $ mkfontdir\n\nO incluir m\u00e1s de una carpeta con un comando:\n\n $ for dir in /font/dir1/ /font/dir2/; do xset +fp $dir; done && xset fp rehash\n\nO si la fuente est\u00e1 instalado en una sub-carpeta diferente dentro de por ej. {{ic|/usr/share/fonts}}:\n\n $ for dir in * ; do if [  -d  \"$dir\"  ]; then cd \"$dir\";xset +fp \"$PWD\" ;mkfontscale; mkfontdir;cd .. ;fi; done && xset fp rehash\n\nPuede que a veces el servidor X puede fallar al cargar el directorio de las fuentes y necesites volver a escanear todos los archivos de {{ic|fonts.dir}}:\n\n # xset +fp /usr/share/fonts/misc # Informa al servidor X de los nuevos directorios\n # xset fp rehash                # Fuerza un escaneo nuevo\n\nPara comprobar que la o las fuentes est\u00e1n incluidas:\n\n $ xlsfonts | grep fontname\n\n{{Note (Espa\u00f1ol)|Muchos paquetes configurar\u00e1n autom\u00e1ticamente Xorg para utilizar la fuente sobre la instalaci\u00f3n. Si este es el caso de su fuente este paso no es necesario.}}\n\nTambi\u00e9n puede establecerse globalmente en {{ic|/etc/X11/xorg.conf}} o {{ic|/etc/X11/xorg.conf.d}}.\n\nAqu\u00ed hay un ejemplo de la secci\u00f3n que ha de ser a\u00f1adida a {{ic|/etc/X11/xorg.conf}}. A\u00f1ada o quite paths basado en los particulares requisitos de su fuente.\n\n # Deje que X.Org conozca los directorios personalizados de fuente\n Section \"Files\"\n     FontPath    \"/usr/share/fonts/100dpi\"\n     FontPath    \"/usr/share/fonts/75dpi\"\n     FontPath    \"/usr/share/fonts/cantarell\"\n     FontPath    \"/usr/share/fonts/cyrillic\"\n     FontPath    \"/usr/share/fonts/encodings\"\n     FontPath    \"/usr/share/fonts/misc\"\n     FontPath    \"/usr/share/fonts/truetype\"\n     FontPath    \"/usr/share/fonts/TTF\"\n     FontPath    \"/usr/share/fonts/util\"\n EndSection\n\n=== Advertencias sobre Pango ===\n\nCuando [https://www.pango.org/ Pango] se est\u00e1 utilizando en su sistema \u00e9l leer\u00e1 desde [https://www.freedesktop.org/wiki/Software/fontconfig fontconfig] para saber de donde obtener las fuentes.\n\n (process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='common'\n (process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='latin'\n\nSi usted ha visto errores similares y/o vee bloques en vez de caracteres en su aplicaci\u00f3n necesita a\u00f1adir las fuentes y actualizar font cache. En este ejemplo se utiliza la fuente {{Pkg|ttf-liberation}} para mostrar la soluci\u00f3n (despu\u00e9s de una instalaci\u00f3n exitosa del paquete) y ejecute como root para habilitarlo para todos los usuarios.\n\n{{hc|# fc-cache|\n/usr/share/fonts: caching, new cache contents: 0 fonts, 3 dirs\n/usr/share/fonts/TTF: caching, new cache contents: 16 fonts, 0 dirs\n/usr/share/fonts/encodings: caching, new cache contents: 0 fonts, 1 dirs\n/usr/share/fonts/encodings/large: caching, new cache contents: 0 fonts, 0 dirs\n/usr/share/fonts/util: caching, new cache contents: 0 fonts, 0 dirs\n/var/cache/fontconfig: cleaning cache directory\nfc-cache: succeeded\n}}\n\nPuedes comprobar si una fuente por defecto est\u00e1 configurada como tal:\n\n{{hc|$ fc-match|\nLiberationMono-Regular.ttf: \"Liberation Mono\" \"Regular\"\n}}\n\n== Paquetes de fuente ==\n\nEsta es una lista selectiva que incluye muchos paquetes de fuentes del [[AUR (Espa\u00f1ol)|AUR]] junto con los repositorios oficiales. Las fuentes que tiene soporte [[Wikipedia:es:unicode|Unicode]] est\u00e1n estiquetadas con \"Unicode\", vea el proyecto o la Wikipedia para m\u00e1s detalles.\n\nEl [https://github.com/ternstor/distrofonts script Archfonts Python] se puede utilizar para generar una visi\u00f3n general de todas las fuentes TTF encontradas en los repositorios oficiales / AUR (la generaci\u00f3n de la imagen est\u00e1 hecha utilizando {{AUR|ttf2png}}).\n\n=== Bitmap ===\n\n{{Note (Espa\u00f1ol)|{{Pkg|pango}} 1.44 [https://blogs.gnome.org/mclasen/2019/05/25/pango-future-directions/ termin\u00f3 su soporte para FreeType en favor de HarfBuzz] y por tanto [https://blogs.gnome.org/mclasen/2019/08/07/pango-1-44-wrap-up/ pierde soporte para las fuentes bitmap BDF/PCF tradicionales]. Tambi\u00e9n aplicaciones como por ejemplo {{Pkg|gnome-terminal}} ya no funcionar\u00e1n con esas fuentes mostrando rect\u00e1ngulos en vez de los glifos. Vea {{Bug|63297}}, [https://gitlab.gnome.org/GNOME/pango/issues/386 problema de Pango #386] y [https://github.com/harfbuzz/harfbuzz/issues/1897 problema de HarfBuzz #1897].}}\n\n* Por defecto 8x16.\n* [https://github.com/seraxis/pcf-spectrum-berry Berry] ({{AUR|pcf-spectrum-berry}}) - 8px.\n* [https://www.dcmembers.com/jibsen/download/61/ Dina] ({{AUR|dina-font}}) \u2013 6pt, 8pt, 9pt, 10pt, mono espaciado , basada en Proggy.\n* [http://openlab.jp/efont/unicode/ Efont] ({{AUR|efont-unicode-bdf}}) \u2013 10px, 12px, 14px, 16px, 24px, normal, negrita y it\u00e1lica.\n* [https://font.gohu.org/ Gohu] ({{AUR|gohufont}}) \u2013 11px, 14px, normal y negrita.\n* [http://artwizaleczapka.sourceforge.net/ Lime] ({{AUR|artwiz-fonts}}).\n* [https://tobiasjung.name/profont/ ProFont] ({{AUR|ttf-profont-iix}}) \u2013 10px, 11px, 12px, 15px, 17px, 22px, 29px, normal.\n* [[Wikipedia:Proggy programming fonts|Proggy]] ({{AUR|proggyfonts}}) \u2013 tiene diferentes variantes.\n* [http://www.fial.com/~scott/tamsyn-font/ Tamsyn] ({{AUR|tamsyn-font}}).\n* [https://terminus-font.sourceforge.net/ Terminus] ({{Pkg|terminus-font}}).\n* [https://github.com/lucy/tewi-font Tewi] ({{AUR|bdf-tewi-git}}).\n* [https://unifoundry.com/unifont.html Unifont] (Covetura Unicode [[Wikipedia:Unicode font#Comparison of fonts|m\u00e1s extensa]] que cualquier fuente) ({{AUR|bdf-unifont}}).\n\nFuncionan con pango 1.44:\n* [https://terminus-font.sourceforge.net/ Terminus] ({{Pkg|terminus-font}})\n* [https://tobiasjung.name/profont/ ProFont] ({{AUR|profont-otb}}) - OpenType Bitmap (OTB) variante de ProFont.\n* [https://xorg.freedesktop.org/releases/individual/font/ Misc Fijo] {{AUR|xorg-fonts-misc-otb}}.\n* M\u00e1s [https://aur.archlinux.org/packages/?O=0&SeB=n&K=-otb&outdated=&SB=n&SO=a&PP=50&do_Search=Go otb] fuentes en el AUR.\n\n=== Escritura latina ===\n\n==== Familias ====\n\n* [[Wikipedia:Luxi fonts|Luxi fonts]] ({{AUR|font-bh-ttf}}) \u2013 Fuentes Luxi X.Org.\n* [[Wikipedia:es:Bitstream Vera|Bitstream Vera]] ({{Pkg|ttf-bitstream-vera}}) \u2013 serif, sans-serif, y mono espaciada.\n* [https://quoteunquoteapps.com/courierprime/ Courier Prime] ({{AUR|ttf-courier-prime}}) \u2013 Fuente alternativa Courier optimizada para las pantallas.\n* [[Wikipedia:es:Croscore fonts|Croscore fonts]] ({{Pkg|ttf-croscore}}) \u2013 Sustituto de Google para Arial de Window, Times New Roman, y Courier New.\n* [[Wikipedia:es:DejaVu|DejaVu]] ({{Pkg|ttf-dejavu}}) \u2013 Bitstream Vera modificado para una mayor cobertura de Unicode.\n* [[Wikipedia:es:Droid|Droid]] ({{Pkg|ttf-droid}}) \u2013 Fuente por defecto de las versiones antiguas de Android.\n* [[Wikipedia:es:Roboto|Roboto]] ({{Pkg|ttf-roboto}}) \u2013 Fuente por defecto de las versiones nuevas de Android.\n* [[Wikipedia:es:Google Noto|Google Noto]] ({{Pkg|noto-fonts}}) \u2013 Unicode\n* [[Wikipedia:es:Liberation fonts|Liberation fonts]] ({{Pkg|ttf-liberation}}) \u2013 Fuente libre compatible con la m\u00e9trica que sustituye las fuentes Arial, Arial Narrow, Times New Roman y Courier New encontradas en Windows y productos de Microsoft Office.\n* [[Wikipedia:IBM Plex|IBM Plex]] ({{Pkg|ttf-ibm-plex}}) \u2013 serif, sans-serif, sans-serif condensada y monoespaciada con cursiva real.\n* [[Wikipedia:es:Ubuntu (tipo de letra)|Ubuntu]] ({{Pkg|ttf-ubuntu-font-family}})\n* [[Microsoft fonts]] ({{AUR|ttf-ms-win10}}) \u2013 Fuentes de Windows 10.\nPaquetes de fuentes licenciadas por Microsoft:\n* [https://corefonts.sourceforge.net/ Microsoft fonts] ({{AUR|ttf-ms-fonts}}) \u2013 Andal\u00e9 Mono, Courier New, Arial, Arial Black, Comic Sans, Impact, Lucida Sans, Microsoft Sans Serif, Trebuchet, Verdana, Georgia, Times New Roman\n* Vista fonts ({{AUR|ttf-vista-fonts}}) \u2013 Consolas, Calibri, Candara, Corbel, Cambria, Constantia\n\n==== Mono espacio ====\n\nPara m\u00e1s fuentes mono espaciada vea [[#Bitmap]] y [[#Familias]].\n\n* [https://www.marksimonson.com/fonts/view/anonymous-pro Anonymous Pro] ({{Pkg|ttf-anonymous-pro}}, incluido en {{AUR|ttf-google-fonts-git}}).\n* [https://github.com/microsoft/cascadia-code Cascadia Code] ({{Pkg|ttf-cascadia-code}}) \u2013 con ligaduras de programaci\u00f3n.\n* [https://damieng.com/blog/2008/05/26/envy-code-r-preview-7-coding-font-released Envy Code R] ({{AUR|ttf-envy-code-r}}).\n* Fantasque Sans Mono ({{Pkg|ttf-fantasque-sans-mono}}, {{Pkg|otf-fantasque-sans-mono}}).\n* [[Wikipedia:Fira Sans|Fira Mono]] ({{Pkg|ttf-fira-mono}}, {{Pkg|otf-fira-mono}}) \u2013 dise\u00f1ado para Firefox OS.\n* [https://github.com/tonsky/FiraCode Fira Code] ({{Pkg|ttf-fira-code}}) \u2013 con ligaduras de programaci\u00f3n.\n* [[Wikipedia:es:GNU FreeFont|FreeMono]] ({{Pkg|gnu-free-fonts}}) - Unicode.\n* [https://sourcefoundry.org/hack/ Hack] ({{Pkg|ttf-hack}}) - fuente mono espaciada de c\u00f3digo abierto, utilizada por defecto en KDE Plasma.\n* [[Wikipedia:Inconsolata|Inconsolata]] ({{Pkg|ttf-inconsolata}}, incluida en {{AUR|ttf-google-fonts-git}}) - inspirado por Consolas.\n* [https://leonardo-m.livejournal.com/77079.html Inconsolata-g] ({{AUR|ttf-inconsolata-g}}) - a\u00f1ade algunas modificaciones familiares para el programador.\n* [https://be5invis.github.io/Iosevka/ Iosevka] ({{AUR|ttf-iosevka}}) \u2013 Un esbelto tipo de letra sans-serif y slab-serif inspirado por Pragmata Pro, M+ y PF DIN Mono, dise\u00f1ado para ser la fuente ideal para programar. Soporta ligaduras de programaci\u00f3n y alrededor de 2000 glifos latinos, griegos, cir\u00edlicos, fon\u00e9ticos y PowerLine.\n* [[Wikipedia:Lucida Typewriter|Lucida Typewriter]] (incluida en el paquete {{AUR|jre}}).\n* [[Wikipedia:Menlo (typeface)|Menlo]] (derivado: {{AUR|ttf-meslo}}) - fuente mono espaciada por defecto de OS X.\n* [[Wikipedia:es:Monaco (tipograf\u00eda)|Monaco]] ({{AUR|ttf-monaco}}) - fuente propietaria dise\u00f1ada por Apple para OS X.\n* Monofur ({{Pkg|ttf-monofur}})\n* [https://madmalik.github.io/mononoki Mononoki] ({{AUR|ttf-mononoki}})\n* [[Wikipedia:Source_Code_Pro|Source Code Pro]] ({{Pkg|adobe-source-code-pro-fonts}} incluido en {{AUR|ttf-google-fonts-git}})\n\nWebs relevantes:\n\n* [http://hivelogic.com/articles/top-10-programming-fonts Dan Benjamin's Top 10 fuentes de programaci\u00f3n].\n* [http://www.lowing.org/fonts/ Lista de fuentes de Trevor Lowing ].\n* [https://www.slant.co/topics/67/~what-are-the-best-programming-fonts Slant: \u00bfCuales son las mejores fuentes de programaci\u00f3n?].\n* [https://stackoverflow.com/questions/4689/recommended-fonts-for-programming Stack Overflow: Fuentes recomendadas para programar].\n* [https://app.programmingfonts.org Fuentes de programaci\u00f3n - Pruebe Drive].\n* [http://s9w.io/font_compare Fuentes de programaci\u00f3n Compare].\n\n==== Sans-serif ====\n\n* [http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=andika Andika]{{Dead link (Espa\u00f1ol)|2024|03|03|status=404}} ({{AUR|ttf-andika}}).\n* [[Wikipedia:es:GNU FreeFont|FreeSans]] ({{pkg|gnu-free-fonts}}) - Unicode.\n* [https://github.com/rsms/inter Inter UI] ({{Pkg|inter-font}}) \u2013 dise\u00f1ada para las interfaces de usuario.\n* [https://indestructibletype.com/Jost.html Jost*] ({{AUR|otf-jost}}) - Tipo de letra de c\u00f3digo abierto basado en [[Wikipedia:Futura (typeface)|Futura]].\n* [[Wikipedia:es:Linux Libertine|Linux Biolinum]] ({{Pkg|ttf-linux-libertine}}) \u2013 sustituto libre para Times New Roman.\n* [[Wikipedia:PT Sans|PT Sans]] ({{AUR|ttf-google-fonts-git}}) - tres pricipales variantes: normal, estrecho, y subt\u00edtulo - Unicode: lat\u00edn, cir\u00edlico.\n* [[Wikipedia:Source Sans|Source Sans]] ({{Pkg|adobe-source-sans-fonts}})\n* [[Wikipedia:es:Tahoma|Tahoma]] ({{AUR|ttf-tahoma}})\n\n==== Serif ====\n\n* [https://indestructibletype.com/Bodoni.html Bodoni*] ({{AUR|otf-bodoni}}) - Regreso de la fuente [[Wikipedia:Bodoni|Bodoni]] de c\u00f3digo abierto.\n* [https://github.com/octaviopardo/EBGaramond12 EB Garamond] ({{AUR|ebgaramond-otf}}) - Regreso de la fuente [[Wikipedia:Garamond|Garamond]] de c\u00f3digo abierto.\n* [[Wikipedia:es:GNU FreeFont|FreeSerif]] ({{pkg|gnu-free-fonts}}) - Unicode.\n* [[Wikipedia:es:Gentium|Gentium]] ({{Pkg|gentium-plus-font}}{{Broken package link (Espa\u00f1ol)|replaced by {{Pkg|ttf-gentium-plus}}}}) - Unicode: lat\u00edn, griego cir\u00edlico, hebreo.\n* [[Wikipedia:es:Linux Libertine|Linux Libertine]] ({{Pkg|ttf-linux-libertine}}) - Unicode: lat\u00edn, griego cir\u00edlico, hebreo.\n\n==== Sin clasificaci\u00f3n ====\n\n* {{AUR|ttf-cheapskate}} - Coleccion de fuentes de ''dustismo.com''.\n* {{Pkg|ttf-junicode}} - Fuente Junius que contiene casi todos los script y glifos medivales.\n* {{AUR|ttf-mph-2b-damase}} - Cubre el primer plano completo y muchos  scripts.\n* {{Pkg|xorg-fonts-type1}} - Conjuntos IBM Courier y Adobe Utopia del [[Wikipedia:es:Tipo de letra PostScript|tipo de letra PostScript]].\n* {{AUR|all-repository-fonts}} - Meta paquete para todas las fuentes de los repositorios oficiales.\n* {{AUR|ttf-google-fonts-git}} - una enorme colecci\u00f3n de fuentes libres (incluye Ubuntu, Inconsolata, Roboto, etc.) - Nota: Su di\u00e1logo de fuentes puede ser muy grande ya que se a\u00f1adir\u00e1n m\u00e1s de cien fuentes.\n\n=== Escritura no latina ===\n\n==== Escritura antigua ====\n\n* {{AUR|ttf-ancient-fonts}} - Fuentes que contienen simbolos Unicode para las escrituras egeo, egipcio, cuneiforme, anatolian, maya y analecta.\n\n==== \u00c1rabe ====\n\n* {{AUR|ttf-amiri}} - Un tipo de letra cl\u00e1sico en Naskh, estilo pionero de Amiria Press.\n* {{AUR|ttf-arabeyes-fonts}} - Colecci\u00f3n de fuentes \u00e1rabes libres.\n* {{AUR|ttf-qurancomplex-fonts}} - Fuentes de El complejo de impresi\u00f3n del gran Cor\u00e1n Rey Fahd en al-Madinah al-Munawwarah.\n* {{AUR|ttf-sil-lateef}} - Fuente \u00e1rabe Unicode desde SIL [[wikipedia:es:SIL International|SIL]].\n* {{Pkg|ttf-scheherazade-new}} - Fuente \u00e1rabe Unicode desde SIL. (Alternativa de la fuente \u00e1rabe tradicional).\n\n==== Braille ====\n\n*{{AUR|ttf-ubraille}} - Fuente que contiene s\u00edmbolos Unicode para el ''braille''.\n\n==== Chino, japon\u00e9s, coreano, vietnamita ====\n\n===== Pan-CJK =====\n\n*Fuentes Adobe Source Han - Una gran colecci\u00f3n de fuentes con un soporte comprensible de chino simplificado, chino tradicional, japones, y coreano, con un dise\u00f1o y aspecto consistente.\n**{{Pkg|adobe-source-han-sans-otc-fonts}} - Sans fonts.\n**{{Pkg|adobe-source-han-serif-otc-fonts}} - Serif fonts.\n\n*{{Pkg|noto-fonts-cjk}} - Otra gran colecci\u00f3n de fuentes con un soporte comprensible de chino simplificado, chino tradicional, japones, y coreano, con un dise\u00f1o y aspecto consistente. Actualmente es una versi\u00f3n renombrada de {{Pkg|adobe-source-han-sans-otc-fonts}}.\n\n===== Chino =====\n\nVea [[Localization (Espa\u00f1ol)/Chinese (Espa\u00f1ol)#Fuentes]].\n\n===== Japon\u00e9s =====\n\nVea [[Localization/Japanese#Fonts]].\n\n===== Coreano =====\n\nVea [[Localization/Korean#Fonts]].\n\n===== Vietnamita =====\n\n* {{Pkg|ttf-hannom}} - Fuente vietnamita TrueType font para los caracteres ch\u1eef N\u00f4m.\n\n==== Cir\u00edlico ====\n\nVea tambi\u00e9n [[#Escritura latina]]\n\n* {{AUR|ttf-paratype}} - Familia de fuente por ParaType: sans, serif, mono, cir\u00edlico extendido y lat\u00edn, licencia OFL.\n* {{AUR|otf-russkopis}} - Una fuente libre cursiva OpenType para la escritura cir\u00edlica.\n\n==== Griego ====\n\nCasi todas las fuentes Unicode contienen el conjunto de caracteres griegos (polit\u00f3nico incluido). Estas fuentes adicionales puede que no tengan el conjunto completo de caracteres Unicode pero utiliza una gran calidad en los caracteres griegos (y en el lat\u00edn, por supuesto).\n\n* {{AUR|otf-gfs}} - Selecci\u00f3n de fuentes de OpenType de la sociedad griega de fuentes.\n* {{AUR|ttf-mgopen}} - Fuentes profesionales TrueType por Magenta.\n\n==== Hebreo ====\n\n* {{AUR|opensiddur-hebrew-fonts}} - Gran colecci\u00f3n de fuentes hebreas con licencia de c\u00f3digo abierto.\n* {{AUR|culmus}} - Una buena colecci\u00f3n de fuentes hebreas de c\u00f3digo abierto. Tambi\u00e9n hay algunas fuentes latinas, griegas, cir\u00edlicas, ar\u00e1bicas y am\u00e1ricos.\n\n==== \u00cdndico ====\n\nVea [[Localization/Indic#Fonts]].\n\n==== Camboyano ====\n\n* {{Pkg|ttf-khmer}} - Fuente que cubre los glifos del lenguaje camboyano.\n* [https://www.google.com/fonts/specimen/Hanuman Hanuman] ({{AUR|ttf-google-fonts-git}})\n\n==== Mongol y tunguses ====\n\n* {{AUR|ttf-abkai}} - Fuentes para las escrituras sibe, smnchu y daur (incompleto, a\u00fan en desarrollo).\n\n==== Persa ====\n\n* {{AUR|persian-fonts}} - Meta-paquete para instalar todas las fuentes persas del AUR.\n* {{AUR|borna-fonts}} - Serie de fuentes persa B Borna Rayaneh Co..\n* {{AUR|iran-nastaliq-fonts}} - Fuente caligr\u00e1fica libre Unicode persa.\n* {{AUR|iranian-fonts}} - Familia Iranian-Sans e Iranian-Serif de fuentes persa.\n* {{AUR|ir-standard-fonts}} - Fuentes persas est\u00e1ndar del Consejo Supremo de Tecnolog\u00edas de la Informaci\u00f3n y la Comunicaci\u00f3n de Ir\u00e1n (SCICT).\n* {{AUR|persian-hm-ftx-fonts}} - Series de fuentes persa derivado de X Series 2, Metafont y Fuentes FarsiTeX con la caracter\u00edstica kashida.\n* {{AUR|persian-hm-xs2-fonts}} - Series de fuentes persa derivado de X Series 2 con la caracter\u00edstica kashida.\n* {{AUR|gandom-fonts}}, {{AUR|parastoo-fonts}}, {{AUR|sahel-fonts}}, {{AUR|samim-fonts}}, {{AUR|shabnam-fonts}}, {{AUR|tanha-fonts}}, {{AUR|vazirmatn-fonts}}, {{AUR|vazir-code-fonts}} - Bonitas fuentes persa hecho por Saber RastiKerdar.\n* {{AUR|ttf-yas}} - Serie de fuente persa Yas (con '''hueco cero''').\n* {{AUR|ttf-x2}} - Fuentes libres con soporte para persa, \u00e1rabe, urdu, pashto, dari, uzbeko, kurdo, uigur, turco antiguo (otomano) y turco moderno (romano).\n\n==== Tai\u2013Kadai ====\n\n* {{AUR|fonts-tlwg}} - Colecci\u00f3n de fuentes escalables tailandesas.\n* {{AUR|ttf-lao}} - Fuente TTF Lao (Phetsarath_OT)\n\n==== Tibeto-Burman ====\n\n* {{Pkg|ttf-tibetan-machine}} - Fuente TTF Tibetan Machine.\n* {{AUR|ttf-sil-padauk}} - Fuente Unicode que admite las numerosas y diversas lenguas que utilizan la escritura de Myanmar.\n\n=== Emoji y s\u00edmbolos ===\n\nLas fuentes [[Wikipedia:es:Emoji|Emoji]] vienen en diferentes formatos: CBDT/CBLC (Google), SBIX (Apple), COLR/CPAL (Microsoft), SVG (Mozilla/Adobe).\n\nLos emojis deben funcionar sin ninguna configuraci\u00f3n adicional si tiene al menos una fuente emoji, de los formatos soportados, instalada. Sin embargo la [[Wikipedia:Emoji#Emoji versus text presentation|representaci\u00f3n de emojis (en ingl\u00e9s)]], de acuerdo con los requisitos estandar, requiere de [https://github.com/google/emoji-segmenter un c\u00f3digo adicional para manejarlos]. Para obligar el uso de la fuente emoji vea [[Font configuration (Espa\u00f1ol)#Obligar fuente de emoticonos]].\n\n{| class=\"wikitable\"\n|-\n! Software !! CBDT/CBLC !! SBIX !! COLR/CPAL !! SVG !! Representaci\u00f3n !! Vea tambi\u00e9n\n|-\n! [[Wikipedia:es:Freetype|Freetype]]\n| {{S\u00ed}} || {{S\u00ed}} || {{S\u00ed}} || {{No|https://savannah.nongnu.org/bugs/?46141}} || {{-}} || {{-}}\n|-\n! [[Wikipedia:es:Pango|Pango]]\n| colspan=4 {{C|Freetype}} || {{S\u00ed}} || [https://gitlab.gnome.org/GNOME/pango/-/issues/298]\n|-\n! [[List of applications (Espa\u00f1ol)/Internet (Espa\u00f1ol)#Basado en WebKit|WebKitGTK]]\n| colspan=4 {{C|Freetype}} || {{S\u00ed|https://trac.webkit.org/changeset/239822/webkit}} || {{-}}\n|-\n! [[Qt]]\n| colspan=4 {{C|Freetype}} || {{No|https://bugreports.qt.io/browse/QTBUG-71568}} || {{-}}\n|-\n! [[Chromium (Espa\u00f1ol)|Chromium]]\n| colspan=4 {{C|Freetype}} || {{Y|[https://chromium.googlesource.com/chromium/src.git/+/671511b00e2d6c374a3079c1c379d2d0dfad32fe Siguiente versi\u00f3n]}} || {{-}}\n|-\n! [[Firefox (Espa\u00f1ol)|Firefox]]\n| colspan=3 {{C|Freetype}} || {{S\u00ed}} || {{No|1=https://bugzilla.mozilla.org/show_bug.cgi?id=1509988}} || [[Firefox#Font troubleshooting]]\n|}\n\nCBDT/CBLC:\n\n* {{Pkg|noto-fonts-emoji}} \u2014 Emoji 12.1 de c\u00f3digo abierto de Google.\n* {{Pkg|ttf-joypixels}} \u2014 Emoji 12.1 propietario del creador EmojiOne.\n* {{AUR|ttf-twemoji}} \u2014 Emoji 13.0 de c\u00f3digo abierto de Twitter.\n\nSVG:\n\n* {{AUR|otf-openmoji}} \u2014 Emoji 12.1. de c\u00f3digo abierto de la universidad de dise\u00f1o de Alemania Schw\u00e4bisch Gm\u00fcnd. \n* {{AUR|ttf-twemoji-color}} \u2014 Emoji 12.0 de c\u00f3digo abierto de Twitter.\n\nContorno solo:\n\n* {{AUR|ttf-symbola}} \u2014 proporciona muchos s\u00edmbolos Unicode, incluido emoji.\n\n[[wikipedia:es:Emoticono#Estilo_de_Asia_Oriental|Kaomoji]] a veces como \"emoticonos japoneses\" est\u00e1n compuestos por caracteres de varios conjuntos, incluido CJK y fuentes \u00edndicas. Por ejemplo, estos paquetes proporcionan muchos kaomoji existentes: {{Pkg|gnu-free-fonts}}, {{Pkg|ttf-arphic-uming}}, y {{Pkg|ttf-indic-otf}}.\n\n=== Matem\u00e1ticas ===\n\n* {{AUR|ttf-cm-unicode}}, {{AUR|otf-cm-unicode}} - [[wikipedia:Computer Modern|Computaci\u00f3n moderna (ingl\u00e9s)]] (de la fama de TeX).\n* {{Pkg|otf-latin-modern}}, {{Pkg|otf-latinmodern-math}} - Versi\u00f3n mejorada de fuentes computacionales modernas usadas en LaTeX.\n* {{AUR|otf-stix}} - Versi\u00f3n independiente, una de las m\u00e1s recientes de STIX.\n\n{{Pkg|texlive-core}}{{Broken package link (Espa\u00f1ol)|replaced by {{Pkg|texlive-basic}}}} y {{Pkg|texlive-fontsextra}} contiene muchas fuentes matem\u00e1ticas como la matem\u00e1tica moderna latina y [[Wikipedia:STIX Fonts project|STIX Fonts]]. Vea [[TeX Live#Making fonts available to Fontconfig|Hacer que las fuentes est\u00e9n disponibles en Fontconfig (en ingl\u00e9s)]] para la configuraci\u00f3n.\n\n=== Fuentes de otros sistemas operativos ===\n\n* {{AUR|ttf-mac-fonts}} - Fuentes de TrueType Apple MacOS.\n\nVea [[Metric-compatible fonts|Fuentes m\u00e9tricamente compatibles (ingl\u00e9s)]], que muestra las alternativas para las  [[Microsoft fonts|Fuentes de Microsoft (ingl\u00e9s)]].\n\n== Orden de fuentes alternativas ==\n\nAutom\u00e1ticamente fontconfig selecciona una fuente que cumpla con los requisitos de ese momento. Es decir, que si una ventana contiene ingl\u00e9s y chino, fontconfig cambiar\u00e1 de fuente para el chino si la que est\u00e1 por defecto no lo soporta.\n\nFontconfig permite que cada usuario configure el orden a trav\u00e9s de {{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}}.\nSi prefiere que una fuente particular se seleccione antes que su fuente Serif favorita, el archivo queda as\u00ed:\n\n <?xml version=\"1.0\"?>\n <!DOCTYPE fontconfig SYSTEM \"fonts.dtd\">\n <fontconfig>\n <alias>\n    <family>serif</family>\n    <prefer>\n      <family>El nombre de su fuente serif favorita</family>\n      <family>El nombre de su fuente china</family>\n    </prefer>\n  </alias>\n </fontconfig>\n\n{{Tip (Espa\u00f1ol)|Si usa localmente chino, establezca {{ic|LC_LANG}} a {{ic|und}} para que funcione. Si no los textos chinos e ingleses ser\u00e1n renderizados por la fuente china.}}\n\nTambi\u00e9n se puede a\u00f1adir una secci\u00f3n para sans-serif y monospace. Para m\u00e1s informaci\u00f3n. eche un vistazo al manual de fontconfig.\n\nVea tambi\u00e9n [[Font configuration (Espa\u00f1ol)#Reemplazar o establecer las fuentes por defecto|Establecer o reemplazar las fuentes por defecto]].\n\n== Alias de fuente ==\n\nHay varios alias de fuentes que representa a otras fuentes con la intenci\u00f3n de que las aplicaciones utilicen fuentes similares. Los alias m\u00e1s comunes son: {{ic|serif}} para las fuentes de tipo serif (p.ej. DejaVu Serif); {{ic|sans-serif}} para las fuentes del tipo sans-serif (p.ej. DejaVu Sans); y {{ic|monospace}} para las fuentes mono-espaciadas (p.ej. DejaVu Sans Mono). Sin embargo, el aspecto de las fuentes que representan puede variar y la relaci\u00f3n no se observa en las herramientas de gesti\u00f3n de fuentes, como las que se encuentran en [[KDE (Espa\u00f1ol)|KDE]] y otros [[desktop environments (Espa\u00f1ol)|entornos de escritorio]].\n\nPara invertir un alias y encontrar qu\u00e9 fuente es la que representa, ejecute:\n\n{{hc|$ fc-match monospace|\nDejaVuSansMono.ttf: \"DejaVu Sans Mono\" \"Book\"\n}}\n\nEn este caso, {{ic|DejaVuSansMono.ttf}} es la fuente representada por el alias de monospace.\n\n== Consejos y trucos ==\n\n=== Listar todas las fuentes instaladas ===\n\nPuede utilizar el siguiente comando para listar todas las fuentes instaladas fontconfig que est\u00e1n disponibles en su sistema.\n\n $ fc-list\n\n=== Listar las fuentes instaladas de un lenguaje particular ===\n\nLas aplicaciones y navegadores selecciona y muestra fuentes dependiendo de la configuraci\u00f3n de fontconfig y de los glifos disponibles para el texto Unicode. Para listar las fuentes instaladas de un lenguaje particular, ejecute {{ic|1=fc-list :lang=\"\"two letter language code\"\"}}. Por ejemplo, para listar las fuentes \u00e1rabes o las que soportan glifos \u00e1rabes instaladas:\n{{hc|1=$ fc-list -f '%{file}\\n' :lang=ar|2=\n/usr/share/fonts/TTF/FreeMono.ttf\n/usr/share/fonts/TTF/DejaVuSansCondensed.ttf\n/usr/share/fonts/truetype/custom/DroidKufi-Bold.ttf\n/usr/share/fonts/TTF/DejaVuSansMono.ttf\n/usr/share/fonts/TTF/FreeSerif.ttf\n}}\n\n=== Listar las fuentes instaladas de un caracter Unicode particular ===\n\nPara buscar fuentes monoespaciadas que soporten un punto de c\u00f3digo en particular:\n\n $ fc-match -s monospace:charset=1F4A9\n\n=== Establecer la fuente del terminal sobre la marcha ===\n\nPara los emuladores de terminal que usan [[X resources]], p.ej. [[xterm]] o [[rxvt-unicode (Espa\u00f1ol)|rxvt-unicode]], las fuentes se pueden establecer utilizando [[Bash (Espa\u00f1ol)/Prompt customization (Espa\u00f1ol)#Secuencias de escape Bash|secuencias de escape]]. Especificamente, {{ic|echo -e \"\\033]710;$font\\007\"}} para cambier la fuente normal ({{ic|*font}} en {{ic|~/.Xresources}}), y reemplazarla {{ic|710}} con {{ic|711}}, {{ic|712}}, y {{ic|713}} para cambiar las fuentes {{ic|*boldFont}}, {{ic|*italicFont}}, y {{ic|*boldItalicFont}}, respectivamente.\n\n=== Cach\u00e9 espec\u00edfico de fuente de una aplicaci\u00f3n ===\n\nMatplotlib ({{Pkg|python-matplotlib}} o {{AUR|python2-matplotlib}}) usa su propia cache de fuente, as\u00ed que despu\u00e9s de actualizar las fuentes, aseg\u00farese de eliminar {{ic|~/.matplotlib/fontList.cache}}, \n{{ic|~/.cache/matplotlib/fontList.cache}}, {{ic|~/.sage/matplotlib-1.2.1/fontList.cache}}, etc. As\u00ed regenerar\u00e1 su cach\u00e9 de fuente y encontrar\u00e1 las nuevas fuentes [https://discourse.matplotlib.org/t/getting-matplotlib-to-recognize-a-new-font/17754].\n\n=== Texto bidireccional en el terminal ===\n\nEjecute BiCon ({{AUR|bicon-git}}) para conseguir mostrar correctamente el texto ar\u00e1bico y hebreo dentro del terminal.\n\n== Vea tambi\u00e9n ==\n\n* [http://behdad.org/text/ Estado de la representaci\u00f3n de texto]\n* [https://fontlibrary.org/es Biblioteca de fuentes] - Fuentes con licencia libre.\n* [https://screenshots.debian.net/packages?search=fonts&show=with Fuentes en screenshots.debian.net]"
                    }
                ]
            },
            "5470": {
                "pageid": 5470,
                "ns": 0,
                "title": "Pidgin",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Instant messaging]]\n[[Category:Internet Relay Chat]]\n[[Category:XMPP]]\n[[de:Pidgin]]\n[[ja:Pidgin]]\n[https://www.pidgin.im/ Pidgin] is a chat program which lets you log into accounts on multiple chat networks simultaneously. It is compatible with Jabber/XMPP, Bonjour, Gadu-Gadu, IRC, Novell GroupWise Messenger, Lotus Sametime, SILC, SIMPLE, and Zephyr, and many more chat networks with plugins.\n\n== Installation ==\n\n[[Install]] the {{Pkg|pidgin}} package.\nNotable variants are:\n* {{App|Pidgin Light|Light Pidgin version without GStreamer, Tcl/Tk, XScreenSaver, video/voice support.|https://pidgin.im/|{{AUR|pidgin-light}}{{Broken package link|package not found}}}}\n\nYou may also want to install additional plugins from the {{Pkg|purple-plugin-pack}}.\n\n== Spellcheck ==\n\nThe {{pkg|aspell}} package will be installed as a dependency, but to prevent all of your text from showing up as incorrect you will need to install an aspell dictionary. See the [[aspell]] article.\n\n{{Note|The '''switch spell''' plugin is included in the {{Pkg|purple-plugin-pack}}. It allows you to switch between multiple languages.}}\n\n== Services ==\n\n=== AIM ===\n\nPidgin has out-of-the-box support for AOL Instant Messenger (AIM). Although AIM has officially ceased, unofficial AIM-based servers like [https://phoenixim.ddns.net/ AIM Phoenix] operate and can be used on Pidgin by changing the server address in the AIM protocol account settings.\n\n=== Discord plugin ===\n\n{{Warning|There is currently an open [https://github.com/EionRobb/purple-discord/issues/410 GitHub issue] regarding temporary IP bans after using {{ic|purple-discord}}.}} \n\nInstall the {{AUR|purple-discord-git}} package.\n\nThen add a new account, select Discord as the protocol, enter your Discord login e-mail address and its password.\n\n=== Facebook ===\n\n[[Install]] the {{AUR|purple-facebook}} package. (or {{AUR|purple-facebook-git}})\n\nThen add a new account, select Facebook as the protocol, enter your [https://www.facebook.com/help/211813265517027 Facebook username] and password and login.\n\n=== Google (Hangouts) ===\n\n[[Install]] the {{AUR|purple-hangouts-git}} package.\n\n=== ICQ ===\n\nPidgin only comes with the original OSCAR ICQ protocol. Since December 2018, the old OSCAR protocol is no longer officially supported as it has been replaced by the newer WIM protocol. To make use of the new WIM protocol on ICQ, you should install the {{AUR|purple-icyque-git}} plug-in.\n\n=== IRC ===\n\nThis is a small tutorial for connecting to the [https://libera.chat/ Libera Chat] network. It should work for other IRC networks as long as you substitute the port numbers and other specific settings.\n\nGo to ''Accounts > Manage Accounts > Add''. Fill/select the following options:\n Protocol: IRC\n Username: ''your username''\n\nNow go to ''Buddies > New instant message'' (or hit {{ic|Ctrl+m}}), fill 'libera.chat' in the textbox and ''username''@irc.libera.chat, then click 'Ok'. Type:\n /join #archlinux\nThe channel is irrelevant.\n\nIn order to register your nick, type:\n /msg nickserv register ''password'' ''email-addres''\n\nFollow the instructions from the registration mail. For further help type:\n /msg nickserv help\n /msg nickserv help ''command''\n\nThis final step will add your channel to 'Buddies': go to ''Buddies > Add chat'', fill the correct channel in the textbox named channel (#archlinux).\n\n=== Sametime protocol ===\n\n[[Install]] the {{AUR|libpurple-meanwhile}} package. The 'Sametime' protocol will be available when creating an account.\n\n=== Skype plugin ===\n\nInstall the {{Pkg|purple-skypeweb}} or {{AUR|purple-skypeweb-git}} package.\n\n=== Slack plugin ===\n\nInstall the {{AUR|slack-libpurple-git}} package.\n\n=== Rocket.Chat plugin ===\n\nInstall the {{AUR|purple-rocketchat-git}} package.\n\n=== Telegram plugin ===\n\n{{Out of date|The ''telegram-purple'' project is [https://github.com/majn/telegram-purple#this-project-is-abandoned-see-instead-tdlib-purple abandoned]. See also [[Special:Diff/704779|Diff/704779]]. As mentioned in the previous links, {{AUR|telegram-tdlib-purple-git}} is its successor package.}}\n\nInstall the {{AUR|telegram-purple}} or {{AUR|telegram-purple-git}} package. \n\nEnter your Telegram phone number when creating the account, after which you will receive an SMS text message with a confirmation code, which you will have to enter to authorize your Telegram protocol account on Pidgin.\n\n=== XMPP ===\n\nPidgin has out-of-the-box support for the XMPP/Jabber chat protocol. Some additional plugins exist for support of XMPP extensions such as OMEMO ({{Pkg|libpurple-lurch}}) or Message Carbons ({{AUR|libpurple-carbons}}).\n\n== Security ==\n\nPidgin uses Libpurple 2 which stores passwords unencrypted (in plaintext) in $HOME/.purple/account.xml, see [https://developer.pidgin.im/wiki/PlainTextPasswords]. You can store them in a keyring by using a plugin like:\n\n* {{AUR|purple-gnome-keyring}}\n* {{Pkg|pidgin-kwallet}}\n\n== Privacy ==\n\nPidgin has some privacy rules set by default. Namely, the whole world cannot send you messages;\nonly your contacts or people selected from a list. Adjust this, and other settings in ''Tools > Privacy''.\n\n=== Pidgin-OTR ===\n\nThis is a plugin that brings Off-The-Record (OTR) messaging to Pidgin. OTR is a cryptographic protocol that will encrypt your instant messages.\n\nFirst you need to install {{Pkg|pidgin-otr}} from the official repositories. Once this has been done, OTR has been added to Pidgin.\n\n# To enable OTR, start Pidgin and go to ''Tools > Plugins'' or press {{ic|Ctrl+u}}. Scroll down to the entry entitled \"Off-The-Record Messaging\". If the checkbox beside it is not checked, check it.\n# Next, click on the plugin entry and select \"Configure plugin\" at the bottom. Select which account you wish to generate a key for, then click \"Generate\". You will have now generated a private key. If you are not sure what the other options do, leave them, the default options will work fine.\n# The next step is to contact a buddy who also has OTR installed. In the chat window, a new icon should appear to the top right of your text input box. Click on it, and select \"Start private conversation\". This will start an 'Unverified' session. Unverified sessions are encrypted, but not verified - that is, you have started a private conversation with someone using your buddy's account who has OTR, but who might not be your buddy. The steps for verification of a buddy are beyond the scope of this section; however, they might be added in the future.\n\n=== Pidgin-Encryption ===\n\n{{AUR|pidgin-encryption}} transparently encrypts your instant messages with RSA encryption. Easy-to-use, but very secure.\n\nYou can enable it the same way as Pidgin-OTR.\n\nNow you can open conversation window and new icon should appear beside menu. Press it to enable or disable encryption.\nAlso if you want to make encryption enabled by default right-click on a buddy's name (in your buddy list), and select Turn Auto-Encrypt On. Now, whenever a new conversation window for that buddy is opened, encryption will start out as enabled.\n\n=== Pidgin-GPG ===\n\nPidgin-GPG transparently encrypt conversations using GPG, and taking advantage of all the features of a pre-existing WoT.\n\nThe plugin is available on AUR as {{aur|pidgin-gpg-git}}. It can be enabled the same way as the previously mentioned ones.\n\n== Other packages ==\n\nArch has other Pidgin-related packages. Here are the most popular (for a thorough list, search the AUR):\n*{{AUR|pidgin-libnotify}} - Libnotify support, for theme-consistent notifications\n*{{AUR|pidgin-latex}} - A small latex plugin for pidgin. Put math between $$ and have it rendered (recepient also needs to have this installed)\n\n== Auto logout on suspend ==\n\nIf you suspend your computer pidgin seems to stay connected for about 15 minutes. To prevent message loss, it is needed to set your status offline before suspending or hibernating. The status message will not be changed.\n\nTherefore create a new systemd unit {{ic|pidgin-suspend}} in {{ic|/etc/systemd/system}}\nTake the following snippet and replace ''myuser'' with your user.\n\n [Unit]\n Description=Suspend Pidgin\n Before=sleep.target\n StopWhenUnneeded=yes\n \n [Service]\n Type=oneshot\n User=''myuser''\n RemainAfterExit=yes\n Environment=DISPLAY=:0\n ExecStart=-/usr/bin/purple-remote setstatus?status=offline\n ExecStop=-/usr/bin/purple-remote setstatus?status=available\n \n [Install]\n WantedBy=sleep.target\n\n== Minimize to tray ==\n\nTo make use of the [[Xfce]] system tray go to preferences and enable the system tray in the section \"Interface\".\nYou can now close the main window and run pidgin minimized. You will also be able to see message notifications in the tray.\n\n== History import Kopete to Pidgin ==\n\n{{Remove|Kopete has been dead for a while upstream and is [https://lists.archlinux.org/archives/list/aur-requests@lists.archlinux.org/thread/MQZUB3ACLSHYI5BFU6QXJFQH2K73OOC2/#MQZUB3ACLSHYI5BFU6QXJFQH2K73OOC2 no longer in the AUR], if people needed to migrate it's probably been done for a while.}}\n\n* Install {{Pkg|xalan-c}} and create {{ic|~/bin/history_import_kopete2pidgin.sh}} with this code:\n{{bc|<nowiki>\n#!/bin/sh\n\nKOPETE_DIR=~/.kde4/share/apps/kopete/logs\nPIDGIN_DIR=~/.purple/logs\nCURRENT_DIR=~/bin\n\ncd\n\nif [ ! -d $KOPETE_DIR ];then\n    echo \"Kopete log directory not found\"\n    exit 1;\nfi\n\nif [ ! -d $PIDGIN_DIR ];then\n    echo \"Pidgin log directory not found\"\n    exit 2;\nfi\n\nfor KOPETE_PROTODIR in $(ls $KOPETE_DIR); do\n    PIDGIN_PROTODIR=$(echo $KOPETE_PROTODIR | sed 's/Protocol//' | tr [:upper:] [:lower:])\n    for accnum in $(ls $KOPETE_DIR/$KOPETE_PROTODIR); do\n        echo \"Account number: $accnum\"\n        for num in $(ls $KOPETE_DIR/$KOPETE_PROTODIR/$accnum); do\n            FILENAME=$(Xalan $KOPETE_DIR/$KOPETE_PROTODIR/$accnum/$num $CURRENT_DIR/history_import_kopete2pidgin_filename.xslt)\n            if [ $? = 0 ]; then\n                echo \"$KOPETE_DIR/$KOPETE_PROTODIR/$accnum/$num\"\n                echo \" -> $PIDGIN_DIR/$PIDGIN_PROTODIR/$FILENAME\"\n                mkdir -p $(dirname $PIDGIN_DIR/$PIDGIN_PROTODIR/$FILENAME)\n                Xalan -o $PIDGIN_DIR/$PIDGIN_PROTODIR/$FILENAME $KOPETE_DIR/$KOPETE_PROTODIR/$accnum/$num $CURRENT_DIR/history_import_kopete2pidgin.xslt\n            fi\n        done\n    done\ndone\n</nowiki>}}\n* Make {{ic|~/bin/history_import_kopete2pidgin.sh}} [[executable]]\n* Create {{ic|~/bin/history_import_kopete2pidgin.xslt}} with this code:\n{{bc|1=\n<?xml version=\"1.0\"?>\n<nowiki><xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"></nowiki>\n    <xsl:output method=\"text\" indent=\"no\" />\n\n    <xsl:template match=\"kopete-history\">\n        <xsl:apply-templates select=\"msg\"/>\n    </xsl:template>\n\n    <xsl:template match=\"msg\">\n        <xsl:text>(</xsl:text>\n        <xsl:value-of select=\"translate(substring-after(@time,' '),':',',')\"/>\n        <xsl:text>) </xsl:text>\n        <xsl:value-of select=\"@nick\"/>\n        <xsl:if test=\"not(@nick) or @nick = ''\">\n            <xsl:value-of select=\"@from\"/>\n        </xsl:if>\n        <xsl:text>: </xsl:text>\n        <xsl:value-of select=\".\"/>\n\t\t<xsl:text>\n</xsl:text>\n    </xsl:template>\n</xsl:stylesheet>\n</nowiki>}}\n* Create {{ic|~/bin/history_import_kopete2pidgin_filename.xslt}} with this code:\n{{bc|1=\n<?xml version=\"1.0\"?>\n<nowiki><xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"></nowiki>\n    <xsl:output method=\"text\" indent=\"no\" />\n\n    <xsl:template match=\"kopete-history\">\n        <xsl:value-of select=\"head/contact[@type = 'myself']/@contactId\"/>\n        <xsl:text>/</xsl:text>\n        <xsl:value-of select=\"head/contact[not(@type)]/@contactId\"/>\n        <xsl:text>/</xsl:text>\n        <xsl:value-of select=\"head/date/@year\"/>\n        <xsl:text>-</xsl:text>\n        <xsl:if test=\"head/date/@month &amp;lt; 10\">0</xsl:if>\n        <xsl:value-of select=\"head/date/@month\"/>\n        <xsl:text>-</xsl:text>\n        <xsl:if test=\"string-length(substring-before(msg[1]/@time,' ')) &amp;lt; 2\">0</xsl:if>\n        <xsl:value-of select=\"translate(msg[1]/@time,' :','.')\"/>\n        <xsl:text>+0200EET.txt</xsl:text>\n    </xsl:template>\n</xsl:stylesheet>\n}}\n* Execute the command in the shell:\n\n ~/bin/history_import_kopete2pidgin.sh\n\n== Backup ==\n\nSave {{ic|~/.purple}} to backup all message logs, accounts and other application data.\n\n== Troubleshooting ==\n\n=== Version Match for Sametime ===\n\nThere was an issue if you would connect to the Sametime via Pidgin, it prompt \"Version Match\". A potential solution on the client side is to fake the version in accounts.xml. Insert/change the lines:\n\n <setting name='fake_client_id' type='bool'>1</setting>\n <setting name='client_minor' type='int'>8511</setting>\n\nin the <settings> section of Sametime account in accounts.xml which is located in $HOME/.purple/ folder.\n\n=== Browser error ===\n\nIf clicking a link within Pidgin creates an error message about trying to use 'sensible-browser' to open a link, try editing {{ic|~/.purple/prefs.xml}}. Find the line referencing 'sensible-browser' and change it to this:\n <pref name='command' type='path' value='firefox'/>\n\nThis example assumes you use [[Firefox]].\n\nAs an alternative if the method above does not work you can set the desired browser in the pidgin preferences in the section \"Browser\".\n\n=== ICQ Buddy Information encoding fix ===\n\nYou can change encoding for ICQ account if encoding in Buddy Information is not correct:\n Account > ''your ICQ account'' > Edit account > Advanced tab\nSelect {{ic|Encoding: CP1251}} (for Cyrillic).\n\n== See also ==\n\n* [https://developer.pidgin.im/wiki/Using%20Pidgin Using Pidgin]\n* [[Wikipedia:Pidgin_(software)]]\n* [http://lukav.com/wordpress/2008/03/30/history-import-kopete-to-pidgin History import Kopete to Pidgin]\n* [https://confluence.atlassian.com/hipchatkb/connecting-to-hipchat-using-pidgin-751436267.html Connecting to HipChat using Pidgin]\n*{{pkg|finch}}, a console based libpurple client, essentially Pidgin in a terminal"
                    }
                ]
            },
            "5601": {
                "pageid": 5601,
                "ns": 0,
                "title": "Firefox (Italiano)",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "#redirect [[Firefox]]"
                    }
                ]
            },
            "6111": {
                "pageid": 6111,
                "ns": 0,
                "title": "KDE (Espa\u00f1ol)",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:KDE (Espa\u00f1ol)]]\n[[de:KDE]]\n[[en:KDE]]\n[[it:KDE]]\n[[ja:KDE]]\n[[pt:KDE]]\n[[ru:KDE]]\n[[zh-hans:KDE]]\n{{TranslationStatus (Espa\u00f1ol)|KDE|2019-01-28|564820}}\n{{Related articles start (Espa\u00f1ol)}}\n{{Related2|Desktop environment (Espa\u00f1ol)|Entornos de escritorio}}\n{{Related2|Display manager (Espa\u00f1ol)|Gestor de pantallas}}\n{{Related2|Window manager (Espa\u00f1ol)|Gestor de ventanas}}\n{{Related|Qt}}\n{{Related|SDDM}}\n{{Related|Dolphin}}\n{{Related2|KDE Wallet (Espa\u00f1ol)|KDE Wallet}}\n{{Related|KDevelop}}\n{{Related|Trinity}}\n{{Related2|Uniform Look for Qt and GTK Applications (Espa\u00f1ol)|Apariencia uniforme para aplicaciones Qt y GTK}}\n{{Related articles end}}\nKDE es un proyecto de software que actualmente comprende un [[desktop environment (Espa\u00f1ol)|entorno de escritorio]] conocido como Plasma, una colecci\u00f3n de librer\u00edas y frameworks (KDE Frameworks) y tambi\u00e9n varias aplicaciones (KDE Applications). El anterior KDE tiene un [https://userbase.kde.org/ UserBase wiki] bien mantenido. All\u00ed se puede encontrar informaci\u00f3n detallada sobre la mayor\u00eda de las aplicaciones KDE.\n\n== Instalaci\u00f3n ==\n\n=== Plasma ===\n\nAntes de instalar Plasma, aseg\u00farese de tener una instalaci\u00f3n [[Xorg (Espa\u00f1ol)|Xorg]] en funcionamiento en su sistema.\n\n[[Install (Espa\u00f1ol)|Instale]] el metapaquete {{Pkg|plasma-meta}} o el grupo {{Grp|plasma}}. Para conocer las diferencias entre {{Pkg|plasma-meta}} y {{Grp|plasma}} v\u00e9ase [[Package group (Espa\u00f1ol)|grupo de paquetes]]. Alternativamente, para una instalaci\u00f3n de Plasma m\u00e1s minimalista, instale el paquete {{Pkg|plasma-desktop}}.\n\nSi es un usuario de [[NVIDIA (Espa\u00f1ol)|NVIDIA]] con el controlador propietario {{Pkg|nvidia}} y desea usar [[Wayland (Espa\u00f1ol)|Wayland]] active el [[NVIDIA (Espa\u00f1ol) #DRM kernel mode setting|DRM kernel mode setting]].\n\n=== Plasma M\u00f3vil ===\n\n[[Install (Espa\u00f1ol)|Instale]] el paquete {{AUR|plasma-mobile}}. Tambi\u00e9n instale el paquete {{Pkg|qt5-wayland}} para el teclado virtual [https://maliit.github.io/ Maliit].\n\n=== Aplicaciones KDE ===\n\nPara instalar el conjunto completo de aplicaciones KDE, instale el grupo {{Grp|kde-applications}} o el metapaquete {{Pkg|kde-applications-meta}}. Si desea instalar aplicaciones de KDE para una categor\u00eda concreta como juegos o educaci\u00f3n, instale la dependencia relevante de {{Pkg|kde-applications-meta}}. Tenga en cuenta que esto solo instalar\u00e1 aplicaciones, no instalar\u00e1 ninguna versi\u00f3n de Plasma.\n\n=== Lanzamientos inestables ===\n\nV\u00e9ase [[Official repositories#kde-unstable|Repositorios oficiales#kde-inestable]]\n\n== Iniciar Plasma ==\n\n{{Note (Espa\u00f1ol)|A partir de Plasma 6, la sesi\u00f3n de [[Wayland (Espa\u00f1ol)|Wayland]] se considera como suficientemente madura como para ser la [https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/2188 versi\u00f3n por defecto]. La sesi\u00f3n de [[Xorg]] sigue en soporte, pero ser\u00e1 eliminada en el futuro. V\u00e9ase [https://community.kde.org/Plasma/Wayland_Known_Significant_Issues Problemas significativos de Wayland] y [https://community.kde.org/Plasma/X11_Known_Significant_Issues Problemas significativos de X11] para m\u00e1s informaci\u00f3n.}}\n\nPlasma puede iniciarse usando o bien un [[Display manager (Espa\u00f1ol)|gestor de pantallas]], o bien desde la consola.\n\n=== Usar un gestor de pantallas ===\n\n{{Tip (Espa\u00f1ol)|El [[display manager (Espa\u00f1ol)|gestor de pantallas]] recomendado es [[SDDM]].}}\n\n* Seleccione ''Plasma (Wayland)'' para iniciar una nueva sesi\u00f3n en [[Wayland (Espa\u00f1ol)|Wayland]]. \n* Seleccione ''Plasma (X11)'' para iniciar una nueva sesi\u00f3n en [[Xorg (Espa\u00f1ol)|Xorg]].\n* Seleccione ''Plasma Mobile (Wayland)'' para iniciar una nueva sesi\u00f3n de Plasma M\u00f3vil en [[Wayland (Espa\u00f1ol)|Wayland]].\n\n=== Desde la consola ===\n\n* Para iniciar plasma en una sesi\u00f3n Wayland desde la consola, ejecute {{ic|1=/usr/lib/plasma-dbus-run-session-if-needed /usr/bin/startplasma-wayland}}[https://community.kde.org/KWin/Wayland#Start_a_Plasma_session_on_Wayland]\n\n* Para iniciar plasma con [[xinit (Espa\u00f1ol)|xinit/startx]], agregue {{ic|1=export DESKTOP_SESSION=plasma}} y {{ic|exec startplasma-x11}} en su archivo {{ic|.xinitrc}} o ejecute directamente en la consola {{ic|startx /usr/bin/startplasma-x11}}. Si quiere iniciar Xorg al iniciar sesi\u00f3n, revise [[Start X at login (Espa\u00f1ol)|Inicio autom\u00e1tico de X al inicio de sesi\u00f3n]].\n\n== Configuraci\u00f3n ==\n\nLa mayor\u00eda de las configuraciones para las aplicaciones KDE se almacenan en {{ic|~/.config/}}. Sin embargo, la configuraci\u00f3n de KDE se realiza principalmente a trav\u00e9s de la aplicaci\u00f3n '''Preferencias del sistema'''. Se puede iniciar desde un terminal ejecutando {{ic|systemsettings}}.\n\n=== Personalizaci\u00f3n ===\n\n==== Escritorio Plasma ====\n\n===== Temas =====\n\nLos [https://store.kde.org/browse/cat/104/ temas de Plasma] definen el aspecto de los paneles y los plasmoides. Para facilitar la instalaci\u00f3n en todo el sistema, algunos temas est\u00e1n disponibles tanto en los repositorios oficiales como en [https://aur.archlinux.org/packages?K=plasma+theme AUR].\n\nLos temas de Plasma tambi\u00e9n se pueden instalar a trav\u00e9s de ''Preferencias del sistema > Tema del espacio de trabajo > Tema de escritorio > Obtener nuevos temas''.\n\nLa [https://store.kde.org/ KDE-Store] ofrece m\u00e1s personalizaciones de Plasma, como temas [[SDDM]] y pantallas de bienvenida.\n\n====== Apariencia de las aplicaciones Qt y GTK+ ======\n\n{{Tip (Espa\u00f1ol)|Para la coherencia de los temas Qt y GTK, v\u00e9ase [[Uniform look for Qt and GTK applications (Espa\u00f1ol)|aspecto uniforme para aplicaciones Qt y GTK]]}}\n\n; Qt4\nBreeze no est\u00e1 disponible directamente para Qt4 ya que no se puede compilar sin los paquetes de KDE 4, que se han eliminado del repositorio adicional en agosto de 2018 ({{Bug|59784}}). Sin embargo, puede instalar {{Pkg|breeze-gtk}} y elegir GTK+ como estilo de interfaz gr\u00e1fica ejecutando {{ic|qtconfig-qt4}}.\n\n; GTK+\n\nEl tema recomendado para una apariencia agradable en aplicaciones GTK+ es {{Pkg|breeze-gtk}} o {{AUR|gnome-breeze-git}}{{Broken package link (Espa\u00f1ol)|package not found}}, un tema GTK+ dise\u00f1ado para imitar la apariencia del tema de Plasma Breeze.\nInstale {{Pkg|kde-gtk-config}} (parte del grupo {{Grp|plasma}}) y seleccione el tema GTK instalado para GTK2/GTK3-Theme en ''Preferencias del sistema > Estilo de las aplicaciones > Estilo de aplicaciones de GNOME''.\n\nEn algunos temas, la descripci\u00f3n emergente en aplicaciones GTK+ tiene texto blanco sobre fondos blancos, lo que dificulta su lectura. Para cambiar los colores en las aplicaciones GTK2, busque la secci\u00f3n de descripciones emergentes en el archivo {{ic|.gtkrc-2.0}} y c\u00e1mbiela. Para la aplicaci\u00f3n GTK3 se deben cambiar dos archivos, {{ic|gtk.css}} y {{ic|settings.ini}}.\nTambi\u00e9n puede ayudar el desmarcar la opci\u00f3n ''Aplicar colores a aplicaciones no Qt'' en ''Preferencias del sistema > Colores''.\n\nAlgunos programas de GTK2 como {{AUR|vuescan-bin}} todav\u00eda parecen dif\u00edciles de usar debido a casillas de verificaci\u00f3n invisibles con el aspecto Breeze o Adwaita en una sesi\u00f3n Plasma. Para solucionar esto, instale y seleccione, por ejemplo, el aspecto Numix-Frost-Light de {{AUR|numix-frost-themes}} en ''Preferencias del sistema > Estilo de las aplicaciones > Estilo de aplicaciones de GNOME (GTK) > Seleccione un tema de GTK2:''. Numix-Frost-Light se parece a Breeze.\n\n===== Caras =====\n\nLa cara del usuario se puede configurar a trav\u00e9s de ''Preferencias del sistema > Detalles de cuentas > Gestor de usuarios''.\n\n===== Widgets =====\n\nLos plasmoides son peque\u00f1as aplicaciones KDE scripteadas (scripts plasmoides) o codificadas (binarios plasmoides) dise\u00f1adas para mejorar la funcionalidad de su escritorio.\n\nLa forma m\u00e1s f\u00e1cil de instalar scripts plasmoides es haciendo clic derecho en un panel o en el escritorio y seleccionando ''A\u00f1adir elementos gr\u00e1ficos > Obtener nuevos elementos gr\u00e1ficos > Descargar nuevos elementos gr\u00e1ficos de plasma''. Esto le mostrat\u00e1 una bonita interfaz para https://store.kde.org/ que le permite instalar, desinstalar o actualizar scripts plasmoides de terceros con un solo clic.\n\nMuchos binarios de Plasmoid est\u00e1n disponibles en [https://aur.archlinux.org/packages?K=plasmoid AUR].\n\n===== Applet de sonido en la bandeja del sistema =====\n\n[[Install (Espa\u00f1ol)|Instale]] {{Pkg|plasma-pa}} o {{Pkg|kmix}} (inicie Kmix desde el lanzador de aplicaciones). {{Pkg|plasma-pa}} ahora se instala de manera predeterminada con {{Grp|plasma}}, no se necesita ninguna configuraci\u00f3n.\n\n{{Note (Espa\u00f1ol)|1=Para ajustar el [https://bugs.kde.org/show_bug.cgi?id=313579#c28 tama\u00f1o del cambio de los incrementos/decrementos de volumen], agregue, por ejemplo. {{ic|1=VolumePercentageStep=1}} en la secci\u00f3n {{ic|[Global]}} de {{ic|~/.config/kmixrc}}}}\n\n===== Deshabilitar la sombra del panel =====\n\nCuando el panel de plasma est\u00e9 encima de otras ventanas, su sombra se mostrar\u00e1 encima de ellas. [https://bbs.archlinux.org/viewtopic.php?pid=1228394#p1228394] Para deshabilitar este comportamiento sin afectar a otras sombras, [[Install (Espa\u00f1ol)|instale]] {{Pkg|xorg-xprop}} y ejecute:\n\n $ xprop -remove _KDE_NET_WM_SHADOW\n\na continuaci\u00f3n, seleccione el panel con el cursor de tama\u00f1o ampliado. [https://forum.kde.org/viewtopic.php%3Ff=285&t=121592.html] Para su automatizaci\u00f3n, instale {{Pkg|xorg-xwininfo}} y cree el siguiente script:\n\n{{hc|/usr/local/bin/kde-no-shadow|<nowiki>\n#!/bin/bash\nfor WID in $(xwininfo -root -tree | sed '/\"Plasma\": (\"plasmashell\" \"plasmashell\")/!d; s/^  *\\([^ ]*\\) .*/\\1/g'); do\n   xprop -id $WID -remove _KDE_NET_WM_SHADOW\ndone\n</nowiki>}}\n\nEstablezca permisos de ejecuci\u00f3n para el script:\n\n # chmod 755 /usr/local/bin/kde-no-shadow\n\nEl script se puede ejecutar al iniciar sesi\u00f3n con ''Agregar script'' en ''Inicio autom\u00e1tico'':\n\n $ kcmshell5 autostart\n\n==== Decoraciones de las ventanas ====\n\nLas [https://store.kde.org/browse/cat/114/ decoraciones de las ventanas] se pueden cambiar en ''Preferencias del sistema > Estilo de las aplicaciones > Decoraci\u00f3n de ventanas''.\n\nAll\u00ed tambi\u00e9n puede descargar e instalar directamente m\u00e1s temas con un solo clic, y algunos est\u00e1n disponibles en [https://aur.archlinux.org/packages?K=kde+window+decoration AUR].\n\n==== Temas de iconos ====\n\nLos temas de iconos se pueden instalar y cambiar en ''Preferencias del sistema > Iconos''.\n\n{{Note (Espa\u00f1ol)|Aunque todos los escritorios de Linux modernos comparten el mismo formato de tema de iconos, los escritorios como [[GNOME (Espa\u00f1ol)|GNOME]] usan menos iconos (especialmente en men\u00fas y barras de herramientas). Los temas desarrollados para tales escritorios generalmente carecen de los iconos requeridos por las aplicaciones Plasma y KDE. Se recomienda en su lugar instalar temas de iconos compatibles con Plasma.}}\n\n{{Tip (Espa\u00f1ol)|Dado que algunos temas de iconos no se heredan del tema de iconos predeterminado, es posible que falten algunos iconos.\nPara heredarlo de Breeze, agregue {{ic|breeze}} al vector {{ic|1=Inherits=}} en {{ic|/usr/share/icon/''nombre-del-tema''/index.theme}}, por ejemplo: {{ic|1=Inherits=breeze,hicolor}}. Debe volver a aplicar este parche despu\u00e9s de cada actualizaci\u00f3n del tema de iconos; considere usar [[pacman (Espa\u00f1ol)#Hooks|Pacman hooks]] para automatizar el proceso.}}\n\n==== Eficiencia de espacio ====\n\nEl shell del Plasma Netbook se ha eliminado de Plasma 5, v\u00e9ase la siguiente [https://forum.kde.org/viewtopic.php%3Ff=289&t=126631.html#p335947 publicaci\u00f3n en el foro de KDE]. Sin embargo, puede lograr algo similar editando el archivo {{ic|~/.config/kwinrc}} agregando {{ic|1=BorderlessMaximizedWindows=true}} en la secci\u00f3n {{ic|[Windows]}}.\n\n==== Generaci\u00f3n de miniaturas ====\n\nPara permitir la generaci\u00f3n de miniaturas para archivos de media o de documentos en el escritorio y en Dolphin, instale {{Pkg|kdegraphics-thumbnailers}} y {{Pkg|ffmpegthumbs}}.\n\nLuego, habilite las categor\u00edas de las miniaturas para el escritorio haciendo clic con el bot\u00f3n derecho en el ''fondo de escritorio > Configurar escritorio > Iconos > M\u00e1s opciones de vista previa...''\n\nEn ''Dolphin'', vaya a ''Control > Configurar Dolphin... > General > Vistas previas''.\n\n=== Imprimir ===\n\n{{Tip (Espa\u00f1ol)|Use la interfaz web [[CUPS (Espa\u00f1ol)|CUPS]] para una configuraci\u00f3n m\u00e1s r\u00e1pida. Las impresoras configuradas de esta manera se pueden utilizar en aplicaciones KDE.}}\n\nTambi\u00e9n puede configurar impresoras en ''Preferencias del sistema > Impresoras''. Para usar este m\u00e9todo, primero debe instalar {{Pkg|print-manager}} y {{Pkg|cups}}. V\u00e9ase [[CUPS#Configuration]].\n\n=== Soporte Samba/Windows ===\n\nSi desea tener acceso a los servicios de Windows, instale [[Samba (Espa\u00f1ol)|Samba]] (paquete {{Pkg|samba}}).\n\nLa funcionalidad de compartir con Dolphin requiere el paquete {{Pkg|kdenetwork-filesharing}} y los recursos compartidos, que el stock {{ic|smb.conf}} no los tiene habilitados. Las instrucciones para agregarlos se encuentran en [[Samba#Enable Usershares|Samba#Habilitar los recursos compartidos]], despu\u00e9s de lo cual la compartici\u00f3n en Dolphin deber\u00eda funcionar sin necesidad de configuraci\u00f3n despu\u00e9s de reiniciar Samba.\n\n{{Tip (Espa\u00f1ol)|Utilice {{ic|*}} (asterisco) tanto para el nombre de usuario como para la contrase\u00f1a cuando acceda a un recurso compartido de Windows sin autenticaci\u00f3n en la pantalla de solicitud de Dolphin.}}\n\nA diferencia de los exploradores de archivos GTK que tambi\u00e9n utilizan GVfs para el programa lanzado, abrir archivos desde recursos compartidos de Samba en Dolphin a trav\u00e9s de KIO hace que Plasma copie primero todo el archivo al sistema local con la mayor\u00eda de los programas (VLC es una excepci\u00f3n).\nPara solucionar esto, puede usar un navegador de archivos basado en GTK como {{Pkg|thunar}} con {{Pkg|gvfs}} y {{Pkg|gvfs-smb}} (y {{Pkg|gnome-keyring}} para guardar las credenciales de inicio de sesi\u00f3n) para acceder a los recursos compartidos SMB de una manera m\u00e1s capaz.\n\nOtra posibilidad es [[mount|montar]] un recurso compartido Samba a trav\u00e9s de {{Pkg|cifs-utils}} para hacer creer a Plasma que el recurso compartido SMB es solo una carpeta local normal y, por lo tanto, se pueda acceder a \u00e9l normalmente.\nV\u00e9ase [[Samba#Manual mounting|Samba#Montaje manual]] y [[Samba#Automatic mounting|Samba#Montaje autom\u00e1tico]].\n\nUna soluci\u00f3n con interfaz gr\u00e1fica est\u00e1 disponible en {{AUR|samba-mounter-git}}, que ofrece b\u00e1sicamente la misma funcionalidad a trav\u00e9s de una opci\u00f3n f\u00e1cil de utilizar ubicada en ''Preferencias del sistema > Controladores de red''. Sin embargo, podr\u00eda romperse con las nuevas versiones de KDE Plasma.\n\n=== Actividades de KDE Desktop ===\n\n[https://userbase.kde.org/Plasma#Activities KDE Desktop Activities] son espacios de trabajo especiales en los que puede seleccionar configuraciones espec\u00edficas para cada actividad que se aplican solamente cuando se est\u00e1 utilizando dicha actividad.\n\n=== Administraci\u00f3n de energ\u00eda ===\n\n[[Install (Espa\u00f1ol)|Instale]] {{Pkg|powerdevil}} para obtener un servicio integrado de administraci\u00f3n de energ\u00eda en Plasma. Este servicio ofrece funciones adicionales de ahorro de energ\u00eda, control de brillo del monitor (si es compatible) e informes de bater\u00eda, incluidos dispositivos perif\u00e9ricos.\n\n{{Note (Espa\u00f1ol)|Powerdevil podr\u00eda no [[Power management#Power managers|inhibir]] todas las configuraciones de logind (como la acci\u00f3n de cierre de la tapa para ordenadores port\u00e1tiles). En estos casos, ser\u00e1 necesario cambiar la configuraci\u00f3n de logind - v\u00e9ase [[Power management (Espa\u00f1ol)#Administraci\u00f3n de energ\u00eda con systemd|Administraci\u00f3n de energ\u00eda#Administraci\u00f3n de energ\u00eda con systemd]].}}\n\n=== Inicio autom\u00e1tico ===\n\nPlasma puede iniciar aplicaciones autom\u00e1ticamente y ejecutar scripts en el arranque y el apagado. Para iniciar autom\u00e1ticamente una aplicaci\u00f3n, vaya a ''Preferencias del sistema > Arranque y apagado > Autoarranque'' y agregue el programa o el script de shell que desee. Para las aplicaciones, se crear\u00e1 un archivo ''.desktop'', para los scripts de shell, se crear\u00e1 un enlace simb\u00f3lico.\n\n{{Note (Espa\u00f1ol)|\n* Los programas pueden iniciarse autom\u00e1ticamente solo con el inicio de sesi\u00f3n, mientras que los scripts de shell tambi\u00e9n se pueden ejecutar en el apagado o incluso antes de que se inicie Plasma.\n* Los scripts de shell solo se ejecutar\u00e1n si est\u00e1n marcados como [[Help:Reading (Espa\u00f1ol)#Hacer ejecutable|ejecutables]].\n}}\n\n* Coloque [[Desktop entries|entradas del escritorio]] (es decir, archivos ''.desktop'') en el directorio [[XDG Autostart (Espa\u00f1ol)|XDG Autostart]] apropiado.\n\n* Coloque o guarde los scripts de shell en uno de los siguientes directorios:\n\n:; {{ic|~/.config/plasma-workspace/env/}}: para ejecutar scripts al iniciar sesi\u00f3n antes de iniciar Plasma.\n:; {{ic|~/.config/autostart-scripts/}}: para ejecutar scripts al iniciar sesi\u00f3n.\n:; {{ic|~/.config/plasma-workspace/shutdown/}}: para ejecutar scripts en el apagado.\n\n=== Phonon ===\n\nDe [[Wikipedia:es:Phonon_(KDE)|Wikipedia]]:\n\n:Phonon es el framework multimedia est\u00e1ndar de KDE 4, tambi\u00e9n parte de Qt desde la versi\u00f3n 4.4.\n\n:El objetivo de Phonon es facilitar a los programadores el uso de tecnolog\u00edas multimedia en sus programas, as\u00ed como asegurar que las aplicaciones que usen Phonon funcionen en diversas plataformas y arquitecturas de sonido.\n\nPhonon est\u00e1 siendo ampliamente utilizando en KDE, tanto para audio (por ejemplo, las notificaciones del sistema o aplicaciones de audio de KDE) como para v\u00eddeo (por ejemplo, las miniaturas de video de [[Dolphin]]).\n\n==== \u00bfQu\u00e9 backend debo elegir? ====\n\nPuede elegir entre backends basados en [[GStreamer (Espa\u00f1ol)|GStreamer]] y [[VLC media player (Espa\u00f1ol)|VLC]] - cada uno disponible en versiones para aplicaciones Qt4 y aplicaciones Qt5 ({{AUR|phonon-qt4-gstreamer}}, {{Pkg|phonon-qt5-gstreamer}} - {{AUR|phonon-qt4-vlc}}, {{Pkg|phonon-qt5-vlc}}).\n\n[https://www.phoronix.com/scan.php?page=news_item&px=MTUwNDM El anterior (Phonon) prefiere VLC], pero algunas distribuciones de Linux m\u00e1s prominentes (Kubuntu y Fedora-KDE por ejemplo) prefieren GStreamer porque les permite dejar f\u00e1cilmente de lado los c\u00f3decs patentados MPEG de la instalaci\u00f3n por defecto. Ambos backends tienen un [https://community.kde.org/Phonon/FeatureMatrix conjunto de caracter\u00edsticas] ligeramente diferentes. El backend de Gstreamer tiene alguna dependencias de c\u00f3decs opcionales, inst\u00e1lelos seg\u00fan sea necesario:\n\n* {{Pkg|gst-libav}} - c\u00f3decs de Libav.\n* {{Pkg|gst-plugins-good}} - Soporte de PulseAudio y c\u00f3decs adicionales.\n* {{Pkg|gst-plugins-ugly}} - c\u00f3decs adicionales.\n* {{Pkg|gst-plugins-bad}} - c\u00f3decs adicionales.\n\nEn el pasado, tambi\u00e9n se desarrollaron otros backends, pero ya no se mantienen y sus paquetes AUR se han eliminado.\n\n{{Note (Espa\u00f1ol)|1=<br>\n* Se pueden instalar varios backends a la vez y priorizarlos en ''Preferencias del sistema > Multimedia > Audio y v\u00eddeo > Motor''.\n* Seg\u00fan los [https://forum.kde.org/viewtopic.php%3Ff=250&t=126476.html#p335080 foros de KDE], el backend de VLC carece de soporte para [[wikipedia:ReplayGain|ReplayGain]].\n* Si usa el backend VLC, puede experimentar cuelgues cada vez que Plasma quiera enviarle una advertencia sonora y en muchos otros casos tambi\u00e9n [https://forum.kde.org/viewtopic.php%3Ff=289&t=135956.html]. Una posible soluci\u00f3n es reconstruir la cach\u00e9 de los plugins de VLC:\n{{bc|# /usr/lib/vlc/vlc-cache-gen /usr/lib/vlc/plugins}}\n}}\n\n== Aplicaciones ==\n\nEl proyecto KDE proporciona un conjunto de aplicaciones que se integran con el escritorio Plasma. V\u00e9ase el grupo {{Grp|kde-applications}} para obtener una lista completa de las aplicaciones disponibles. V\u00e9ase tambi\u00e9n [[:Category:KDE (Espa\u00f1ol)]] para los art\u00edculos relacionados con las aplicaciones KDE .\n\nAparte de los programas provistos en KDE Applications, hay muchas otras aplicaciones disponibles que pueden complementar el escritorio Plasma. Algunas de \u00e9stas se tratan a continuaci\u00f3n.\n\n=== Administraci\u00f3n del sistema ===\n\n==== Detener Xorg server a trav\u00e9s de las preferencias del sistema KDE ====\n\nNavegue al submen\u00fa ''Preferencias del sistema > Dispositivos de entrada > Teclado > Avanzado (pesta\u00f1a) > \"Key Sequence to kill the X server\"'' y aseg\u00farese de que la casilla est\u00e9 marcada.\n\n==== KCM ====\n\nKCM significa '''KC'''onfig '''M'''odule. Los KCM pueden ayudarle a configurar su sistema al proporcionar interfaces en preferencias del sistema, o a trav\u00e9s de la l\u00ednea de comandos con ''kcmshell5''.\n\n* {{App|kde-gtk-config|Configurador GTK2 y GTK3 para KDE.|https://invent.kde.org/plasma/kde-gtk-config|{{Pkg|kde-gtk-config}}}}\n* {{App|Pol\u00edticas del sistema|Conjunto de m\u00f3dulos de configuraci\u00f3n que permite al administrador cambiar la configuraci\u00f3n de [[PolicyKit]].|https://invent.kde.org/system/polkit-kde-kcmodules-1|{{AUR|kcm-polkit-kde-git}}{{Broken package link (Espa\u00f1ol)|package not found}}}}\n* {{App|wacom tablet|Interfaz gr\u00e1fica de KDE para los controladores Linux Wacom.|https://www.linux-apps.com/p/1127862/|{{Pkg|kcm-wacomtablet}}{{Broken package link (Espa\u00f1ol)|replaced by {{Pkg|wacomtablet}}}}}}\n* {{App|Kcmsystemd|m\u00f3dulo de control systemd para KDE.|https://github.com/rthomsen/kcmsystemd|{{AUR|systemd-kcm}}}}\n\nPuede encontrar m\u00e1s KCMs en [https://www.linux-apps.com/search?projectSearchText=KCM linux-apps.com].\n\n=== B\u00fasqueda de escritorio ===\n\nKDE implementa la b\u00fasqueda de escritorio con un software llamado [[Baloo]], una soluci\u00f3n de indexaci\u00f3n y de b\u00fasqueda de archivos.\n\n=== Navegadores web ===\n\nLos siguientes navegadores web pueden integrarse con Plasma:\n\n* {{App|[[Wikipedia: Konqueror|Konqueror]]|Parte del proyecto KDE, es compatible con dos motores de renderizaci\u00f3n - KHTML y Qt WebEngine basado en [[Chromium (Espa\u00f1ol)|Chromium]].|https://konqueror.org/|{{Pkg|konqueror}}}}\n* {{App|[[Wikipedia:Falkon|Falkon]]|Un navegador web Qt con funciones de integraci\u00f3n Plasma, anteriormente conocido como Qupzilla. Utiliza Qt WebEngine.|https://userbase.kde.org/Falkon/|{{Pkg|falkon}}}}\n* {{App|[[Chromium]]|Chromium y su variante patentada Google Chrome tienen una integraci\u00f3n de Plasma limitada. [[KDE Wallet (Espa\u00f1ol)#KDE Wallet para Chromium|Pueden usar KWallet]] y las ventanas de KDE Abrir/Guardar.|https://www.chromium.org/|{{Pkg|chromium}}}}\n* {{App|[[Firefox]]|Firefox puede configurarse para integrarse mejor con Plasma. V\u00e9ase [[Firefox (Espa\u00f1ol)#Mejorar la integraci\u00f3n de Firefox con KDE|Integraci\u00f3n de Firefox KDE]] para obtener m\u00e1s informaci\u00f3n.|https://mozilla.org/firefox|{{Pkg|firefox}}}}\n\n{{Tip (Espa\u00f1ol)|A partir de Plasma 5.13, uno puede integrar [[Firefox (Espa\u00f1ol)|Firefox]] o [[Chromium (Espa\u00f1ol)|Chrome]] con Plasma: proporcione el control de reproducci\u00f3n de medios desde la bandeja de Plasma, descargue notificaciones y encuentre pesta\u00f1as abiertas en KRunner. [[Install (Espa\u00f1ol)|Instale]] {{pkg|plasma-browser-integration}} y el complemento del navegador correspondiente. El soporte de Chrome/Chromium ya deber\u00eda estar incluido, para el complemento de Firefox v\u00e9ase [[Firefox (Espa\u00f1ol)#Mejorar la integraci\u00f3n de Firefox con KDE|Integraci\u00f3n de Firefox KDE]].}}\n\n=== PIM ===\n\nKDE ofrece su propia pila para la gesti\u00f3n de informaci\u00f3n personal. Esto incluye emails, contactos, calendario, etc. Para instalar todos los paquetes PIM, puede usar el metapaquete {{Pkg|kde-pim-meta}}.\n\n==== Akonadi ====\n\nAkonadi es un sistema destinado a actuar como cach\u00e9 local para datos PIM, independientemente de su origen, para que luego pueda ser utilizado por otras aplicaciones. Esto incluye los emails, contactos, calendarios, eventos, diarios, alarmas, notas, etc. del usuario. Akonadi no almacena ning\u00fan dato por s\u00ed mismo: el formato de almacenamiento depende de la naturaleza de los datos (por ejemplo, los contactos pueden almacenarse en formato vCard).\n\nInstale {{Pkg|akonadi}}. Para obtener complementos adicionales, instale {{Pkg|kdepim-addons}}.\n\n{{Note (Espa\u00f1ol)|Si desea usar un motor de base de datos que no sea [[MariaDB]], al instalar el paquete {{Pkg|akonadi}}, use el siguiente comando para omitir la instalaci\u00f3n de las dependencias {{Pkg|mariadb}}:\n\n # pacman -S akonadi --assume-installed mariadb\n\nV\u00e9ase tambi\u00e9n {{Bug|32878}}.\n}}\n\n===== PostgreSQL =====\n\n[[Install (Espa\u00f1ol)|Instale]] {{Pkg|postgresql}}.\n\nPara usar [[PostgreSQL]] edite el archivo de configuraci\u00f3n de Akonadi para que tenga el siguiente contenido:\n\n{{hc|~/.config/akonadi/akonadiserverrc|<nowiki>\n[%General]\nDriver=QPSQL\n\n[QPSQL]\nHost=\nInitDbPath=/usr/bin/initdb\nName=akonadi\nServerPath=/usr/bin/pg_ctl\nStartServer=true\n</nowiki>}}\n\n{{Note (Espa\u00f1ol)|El valor {{ic|1=Host=}} ser\u00e1 establecido por Akonadi cuando se inicie por primera vez.}}\n\nInicie Akonadi con {{ic|akonadictl start}}, y verifique su estado: {{ic|akonadictl status}}.\n\n===== SQLite =====\n\nPara usar [[SQLite]] edite el archivo de configuraci\u00f3n de Akonadi para que coincida con la configuraci\u00f3n que se muestra a continuaci\u00f3n:\n\n{{hc|~/.config/akonadi/akonadiserverrc|2=\n[%General]\nDriver=QSQLITE3\n\n[QSQLITE3]\nName=/home/''username''/.local/share/akonadi/akonadi.db\n}}\n\n===== Deshabilitar Akonadi =====\n\nV\u00e9ase esta [https://userbase.kde.org/Akonadi#Disabling_the_Akonadi_subsystem secci\u00f3n en la base de usuarios de KDE].\n\n=== KDE Connect ===\n\n[https://community.kde.org/KDEConnect KDE Connect] proporciona varias caracter\u00edsticas para conectar su tel\u00e9fono [[Android (Espa\u00f1ol)|Android]] con su escritorio Linux:\n\n* Comparta archivos y URLs a/desde KDE desde/a cualquier aplicaci\u00f3n, sin cables.\n* Emulaci\u00f3n de panel t\u00e1ctil: use la pantalla de su tel\u00e9fono como si fuera el panel t\u00e1ctil de su ordenador.\n* Sincronizaci\u00f3n de notificaciones (4.3+): lea sus notificaciones Android desde el escritorio.\n* Portapapeles compartido: copie y pegue entre su tel\u00e9fono y su ordenador.\n* Control remoto multimedia: utilize su tel\u00e9fono como un control remoto para reproductores multimedia en Linux.\n* Conexi\u00f3n WiFi: no necesita cable usb ni bluetooth.\n* Cifrado RSA: su informaci\u00f3n est\u00e1 segura.\n\nDeber\u00e1 instalar KDE Connect tanto en su ordenador como en Android. Para el PC, [[Install (Espa\u00f1ol)|instale]] el paquete {{Pkg|kdeconnect}}. Para Android, instale KDE Connect desde [https://play.google.com/store/apps/details?id=org.kde.kdeconnect_tp Google Play] o desde [https://f-droid.org/packages/org.kde.kdeconnect_tp/ F-Droid].\n\nPara el uso de la entrada remota con plasma en wayland es necesario instalar el paquete {{Pkg|xdg-desktop-portal}}.\n\nEs posible usar KDE Connect incluso si no usa el escritorio Plasma. Para los entornos de escritorio que utilizan AppIndicators, como Unity, instale tambi\u00e9n el paquete {{AUR|indicator-kdeconnect}}{{Broken package link (Espa\u00f1ol)|package not found}}. Para los usuarios de GNOME, se puede lograr una mejor integraci\u00f3n instalando {{AUR|gnome-shell-extension-gsconnect}} en vez de {{Pkg|kdeconnect}}.\n\nSi usa un [[Firewalls (Espa\u00f1ol)|cortafuegos]], necesita abrir los puertos UDP y TCP {{ic|1714}} a trav\u00e9s de {{ic|1764}}. V\u00e9ase https://community.kde.org/KDEConnect#Troubleshooting.\n\n== Consejos y trucos ==\n\n=== Usar un gestor de ventanas diferente ===\n\nLa configuraci\u00f3n del selector de componentes en Plasma ya no permite cambiar el gestor de ventanas. [https://github.com/KDE/plasma-desktop/commit/2f83a4434a888cd17b03af1f9925cbb054256ade]\nPara cambiar el gestor de ventanas utilizado, debe establecer la [[Environment variables (Espa\u00f1ol)|variable de entorno]] {{ic|KDEWM}} antes del inicio de KDE. [https://wiki.haskell.org/Xmonad/Using_xmonad_in_KDE] Para ello, puede crear un script llamado {{ic|set_window_manager.sh}} en {{ic|~/.config/plasma-workspace/env/}} y exportar la variable {{ic|KDEWM}} all\u00ed. Por ejemplo, para utilizar el gestor de ventanas i3:\n\n{{hc|~/.config/plasma-workspace/env/set_window_manager.sh|2=\nexport KDEWM=/usr/bin/i3\n}}\n\nY luego hacerlo ejecutable:\n\n{{bc|$ chmod +x ~/.config/plasma-workspace/env/set_window_manager.sh}}\n\n==== Sesi\u00f3n KDE/Openbox ====\n\nEl paquete {{Pkg|openbox}} proporciona una sesi\u00f3n para usar KDE con [[Openbox (Espa\u00f1ol)|Openbox]]. Para hacer uso de esta sesi\u00f3n, seleccione ''KDE/Openbox'' en el men\u00fa [[Display manager (Espa\u00f1ol)|gestor de pantallas]].\n\nPara aquellos que inician sesi\u00f3n manualmente, agregue la siguiente l\u00ednea a su configuraci\u00f3n [[Xinit (Espa\u00f1ol)|xinit]]:\n\n{{hc|~/.xinitrc|\nexec openbox-kde-session\n}}\n\n==== Rehabilitar efectos de composici\u00f3n ====\n\nAl reemplazar Kwin con un gestor de ventanas que no proporciona un Compositor (como Openbox), se perder\u00e1 cualquier efecto de composici\u00f3n del escritorio, por ejemplo, la transparencia. En este caso, instale y ejecute un gestor de Composite separado para proporcionar los efectos como [[Xcompmgr (Espa\u00f1ol)|Xcompmgr]] o [[Compton]].\n\n=== Configurar la resoluci\u00f3n del monitor / m\u00faltiples monitores ===\n\nPara habilitar la gesti\u00f3n de resoluci\u00f3n de pantalla y m\u00faltiples monitores en Plasma, instale {{Pkg|kscreen}}. Esto agrega las opciones adicionales a ''Preferencias del sistema > Pantalla y monitor''.\n\n=== Deshabilitar la apertura del lanzador de aplicaciones con la tecla Super (tecla Windows) ===\n\nPara deshabilitar esta caracter\u00edstica, actualmente puede ejecutar el siguiente comando:\n\n $ kwriteconfig5 --file kwinrc --group ModifierOnlyShortcuts --key Meta \"\"\n\n=== Deshabilitar que los marcadores se muestren en el men\u00fa de aplicaciones ===\n\nSi tiene instalada la integraci\u00f3n del navegador de Plasma, KDE mostrar\u00e1 marcadores en el lanzador de aplicaciones.\n\nPara deshabilitar esta caracter\u00edstica, ejecute las siguientes \u00f3rdenes:\n\n $ mkdir ~/.local/share/kservices5\n $ sed 's/EnabledByDefault=true$/EnabledByDefault=false/' /usr/share/kservices5/plasma-runner-bookmarks.desktop > ~/.local/share/kservices5/plasma-runner-bookmarks.desktop\n\n== Soluci\u00f3n de problemas ==\n\n=== Fuentes tipogr\u00e1ficas ===\n\n==== Las fuentes en una sesi\u00f3n Plasma se ven mal ====\n\nPruebe a instalar los paquetes {{Pkg|ttf-dejavu}} y {{Pkg|ttf-liberation}}.\n\nDespu\u00e9s de la instalaci\u00f3n, aseg\u00farese de cerrar sesi\u00f3n y volver a iniciarla. No deber\u00eda tener que modificar nada en ''Preferencias del sistema > Tipos de letra''. Si est\u00e1 utilizando {{Pkg|qt5ct}}, la preferencias de la Herramienta de Configuraci\u00f3n Qt5 pueden anular los ajustes de los tipos de letra en las preferencias del sistema.\n\nSi ha configurado personalmente el renderizado de sus [[Fonts (Espa\u00f1ol)|Fuentes]], tenga en cuenta que las preferencias del sistema pueden alterar su apariencia. Cuando vaya a ''Preferencias del sistema > Tipos de letra'', las preferencias del sistema probablemente alterar\u00e1n el archivo de configuraci\u00f3n de las fuentes ({{ic|fonts.conf}}).\n\nNo hay forma de evitar esto, pero, si configura los valores para que coincidan con su archivo {{ic|fonts.conf}}, el renderizado esperado de las fuentes volver\u00e1 (se requerir\u00e1 que reinicie su aplicaci\u00f3n o, en algunos casos, que reinicie su escritorio). Tenga en cuenta que las preferencias de las fuentes de Gnome tambi\u00e9n hacen esto.\n\n==== Las fuentes son enormes o parecen desproporcionadas ====\n\nIntente forzar la fuente DPI a {{ic|'''96'''}} en ''Preferencias del sistema > Tipos de letra''.\n\nSi eso no funciona, intente establecer el DPI directamente en su configuraci\u00f3n de Xorg como se documenta en [[Xorg#Setting DPI manually]].\n\n=== Configuraci\u00f3n relacionada ===\n\nMuchos problemas en KDE est\u00e1n relacionados con su configuraci\u00f3n.\n\n==== El escritorio Plasma se comporta de manera extra\u00f1a ====\n\nLos problemas en Plasma son generalmente causados por ''widgets de Plasma'' inestables (llamados coloquialmente ''plasmoides'') o ''temas de Plasma''. Primero, encuentre cu\u00e1l fue el \u00faltimo widget o tema que instal\u00f3 y deshabil\u00edtelo o desinst\u00e1lelo.\n\nPor lo tanto, si su escritorio muestra repentinamente un \u00abbloqueo\u00bb, es probable que esto se deba a un widget instalado defectuoso. Si no puede recordar qu\u00e9 widget instal\u00f3 antes de que comenzara el problema (a veces puede ser un problema irregular), intente localizarlo eliminando cada widget hasta que el problema cese. Luego, puede desinstalar el widget y presentar un informe de error en el [https://bugs.kde.org/ seguimiento de errores de KDE] '''solo si es un widget oficial'''. Si no lo es, se recomienda buscar la entrada en la [https://store.kde.org/ KDE Store] e informar al desarrollador de ese widget sobre el problema (detallando los pasos para reproducirlo, etc.).\n\nSi no puede encontrar el problema, pero no quiere que se pierdan ''todos'' los ajustes, vaya a {{ic|~/.config/}} y ejecute el siguiente comando:\n\n $ for j in plasma*; do mv -- \"$j\" \"${j%}.bak\"; done\n\nEste comando renombrar\u00e1 '''todos''' los archivos de configuraci\u00f3n relacionados con Plasma de su usuario a ''*.bak'' (por ejemplo, {{ic|plasmarc.bak}}) y cuando vuelva a iniciar sesi\u00f3n en Plasma, tendr\u00e1 la configuraci\u00f3n predeterminada de nuevo. Para deshacer esa acci\u00f3n, elimine la extensi\u00f3n de archivo ''.bak''. Si ya tiene archivos ''*.bak'', ren\u00f3mbrelos, mu\u00e9valos o elim\u00ednelos primero. Se recomienda encarecidamente que se creen regularmente copias de seguridad de todos modos. V\u00e9ase [[Synchronization and backup programs|sincronizaci\u00f3n y programas de copia de seguridad]] para obtener una lista de posibles soluciones.\n\n==== Limpiar la cach\u00e9 para resolver problemas de actualizaci\u00f3n ====\n\nEl [https://bbs.archlinux.org/viewtopic.php?id=135301 problema] puede ser causado por un cach\u00e9 antiguo. A veces, despu\u00e9s de una actualizaci\u00f3n, la memoria cach\u00e9 antigua podr\u00eda presentar un comportamiento extra\u00f1o y dif\u00edcil de depurar, como shells no detenibles, cuelgues al cambiar varias configuraciones, que Ark no pueda extraer archivos o que Amarok no reconozca ninguna de sus canciones. Esta soluci\u00f3n tambi\u00e9n puede resolver problemas con aplicaciones KDE y Qt que se ven mal despu\u00e9s de una actualizaci\u00f3n.\n\nReconstruya la cach\u00e9 usando los siguientes comandos:\n\n $ rm ~/.config/Trolltech.conf\n $ kbuildsycoca5 --noincremental\n\nOpcionalmente, vac\u00ede los contenidos de la carpeta {{ic|~/.cache/}}, sin embargo, esto tambi\u00e9n borrar\u00e1 la cach\u00e9 de otras aplicaciones:\n \n $ rm -rf ~/.cache/*\n\n=== Problemas gr\u00e1ficos ===\n\nAseg\u00farese de tener instalado el controlador adecuado para su GPU. V\u00e9ase [[Xorg#Driver installation]] para obtener m\u00e1s informaci\u00f3n. Si tiene una tarjeta m\u00e1s antigua, podr\u00eda ayudar el [[#Deshabilitar los efectos del escritorio manualmente o autom\u00e1ticamente para aplicaciones definidas]] o [[#Deshabilitar la composici\u00f3n]].\n\n==== Obtener el estado actual de KWin para fines de soporte y depuraci\u00f3n ====\n\nEste comando muestra un resumen del estado actual de KWin, incluidas las opciones utilizadas, el backend de composici\u00f3n utilizado y las capacidades relevantes del controlador OpenGL. V\u00e9ase m\u00e1s en [https://blog.martin-graesslin.com/blog/2012/03/on-getting-help-for-kwin-and-helping-kwin/ el blog de Martin].\n\n $ qdbus org.kde.KWin /KWin supportInformation\n\n==== Deshabilitar los efectos del escritorio manualmente o autom\u00e1ticamente para aplicaciones definidas ====\n\nPlasma tiene habilitados los efectos del escritorio de manera predeterminada y no todas las aplicaciones los deshabilitar\u00e1n autom\u00e1ticamente, por ejemplo, los juegos. Puede deshabilitar los efectos del escritorio en ''Preferencias del sistema > Comportamiento del escritorio > Efectos del escritorio'' y alternar los efectos del escritorio con {{ic|Alt+Shift+F12}}.\n\nAdicionalmente, puede crear reglas KWin personalizadas para deshabilitar/habilitar autom\u00e1ticamente la composici\u00f3n cuando cierta aplicaci\u00f3n/ventana se inicie en ''Preferencias del sistema > Gesti\u00f3n de ventanas > Reglas de la ventana''.\n\n==== Deshabilitar la composici\u00f3n ====\n\nEn ''Preferencias del sistema > Pantalla y monitor > Compositor'', desmarque ''Activar el compositor durante el inicio'' y reinicie Plasma.\n\n==== Parpadeo en pantalla completa cuando la composici\u00f3n est\u00e1 habilitada ====\n\nEn ''Preferencias del sistema > Pantalla y monitor > Compositor'', desmarque ''Permitir que las aplicaciones bloqueen la composici\u00f3n''. Esto puede afectar al rendimiento.\n\n==== El cursor de Plasma a veces se muestra incorrectamente ====\n\nCree el directorio {{ic|~/.icons/default}}, y dentro de \u00e9l un archivo llamado {{ic|index.theme}} con el siguiente contenido:\n\n{{hc|~/.icons/default/index.theme|2=\n[Icon Theme]\nInherits=breeze_cursors\n}}\n\nEjecute el siguiente comando:\n\n $ ln -s /usr/share/icons/breeze_cursors/cursors ~/.icons/default/cursors\n\n==== Se ha establecido una resoluci\u00f3n de pantalla inutilizable ====\n\nSus ajustes de configuraci\u00f3n locales para kscreen pueden anular aquellos establecidos en {{ic|xorg.conf}}. Busque los archivos de configuraci\u00f3n de kscreen en {{ic|~/.local/share/kscreen/}} y revise si el modo est\u00e1 establecido en una resoluci\u00f3n que no es compatible con su monitor.\n\n=== Problemas de sonido ===\n\n{{Note (Espa\u00f1ol)|Primero aseg\u00farese de tener {{Pkg|alsa-utils}} instalado.}}\n\n==== No hay sonido despu\u00e9s de suspender ====\n\nSi no hay sonido despu\u00e9s de la suspensi\u00f3n y si KMix no muestra dispositivos de audio los cuales deber\u00edan estar ah\u00ed, reiniciar plasmashell y pulseaudio podr\u00eda ayudar:\n\n $ killall plasmashell\n $ systemctl --user restart pulseaudio.service\n $ plasmashell\n\nEs posible que algunas aplicaciones tambi\u00e9n deban reiniciarse para que el sonido se reproduzca de nuevo.\n\n==== Los archivos MP3 no se pueden reproducir cuando se utiliza el backend GStreamer Phonon ====\n\nEsto se puede resolver instalando el complemento libav de GStreamer (paquete {{Pkg|gst-libav}}). Si a\u00fan tiene problemas, puede intentar cambiar el backend de Phonon utilizado instalando otro como {{AUR|phonon-qt4-vlc}} o {{Pkg|phonon-qt5-vlc}}.\n\nLuego, aseg\u00farese de que se prefiera el backend v\u00eda ''Preferencias del sistema > Multimedia > Audio y v\u00eddeo > Motor''.\n\n=== Administraci\u00f3n de energ\u00eda ===\n\n==== No hay opciones de Suspender/Hibernar ====\n\nSi su sistema puede suspender o hibernar usando [[systemd (Espa\u00f1ol)|systemd]] pero estas opciones no se muestran en KDE, aseg\u00farese de que {{Pkg|powerdevil}} est\u00e9 instalado.\n\n=== KMail ===\n\n==== Limpie la configuraci\u00f3n de akonadi para arreglar KMail ====\n\nEn primer lugar, aseg\u00farese de que KMail no se est\u00e1 ejecutando. Despu\u00e9s, haga una copia de seguridad de la configuraci\u00f3n:\n\n $ cp -a ~/.local/share/akonadi ~/.local/share/akonadi-old\n $ cp -a ~/.config/akonadi ~/.config/akonadi-old\n\nInicie ''Preferencias del sistema > Personal'' y elimine todos los medios. Vuelva a Dolphin y elimine el {{ic|~/.local/share/akonadi/}} original y\n{{ic|~/.config/akonadi/}} - las copias que hizo aseguran que pueda revertir los cambios en caso de ser necesario.\n\nAhora vuelva a la p\u00e1gina de preferencias del sistema y agregue cuidadosamente los medios necesarios. Deber\u00eda ver la lectura de medios en sus carpetas de correo. A continuaci\u00f3n, inicie Kontact/KMail para ver si funciona correctamente.\n\n==== Vaciar la bandeja de entrada IMAP en KMail ====\n\nPara algunas cuentas IMAP, KMail mostrar\u00e1 la bandeja de entrada como un contenedor de nivel superior (por lo que no ser\u00e1 posible leer los mensajes all\u00ed) con todas las dem\u00e1s carpetas de esta cuenta dentro. [https://bugs.kde.org/show_bug.cgi?id=284172]. Para resolver este problema, simplemente deshabilite las suscripciones del lado del servidor en la configuraci\u00f3n de la cuenta KMail.\n\n=== Conexi\u00f3n ===\n\n==== Se congela cuando se usa montaje autom\u00e1tico en un volumen NFS ====\n\nEl uso de [[fstab (Espa\u00f1ol)#Montaje autom\u00e1tico con systemd|Fstab#Montaje autom\u00e1tico con systemd]] en un volumen [[NFS (Espa\u00f1ol)|NFS]] puede provocar bloqueos, v\u00e9ase [https://bugs.kde.org/show_bug.cgi?id=354137 informe de errores previos].\n\n=== Registro agresivo del diario QXcbConnection ===\n\nV\u00e9ase [[Qt#Disable/Change Qt journal logging behaviour|Qt#Deshabilitar/Cambiar el comportamiento de registro del diario Qt]].\n\n=== Las aplicaciones KF5/Qt 5 no muestran iconos en i3/FVWM/awesome ===\n\nV\u00e9ase [[Qt#Configuration of Qt 5 applications under environments other than KDE Plasma|Qt#Configuraci\u00f3n de aplicaciones Qt5 en entornos que no sean KDE Plasma]].\n\n=== Problemas al guardar las credenciales y los di\u00e1logos de KWallet se muestran de manera persistente ===\n\nNo se recomienda desactivar el sistema de guardado de contrase\u00f1as de [[KDE Wallet (Espa\u00f1ol)|KWallet]] en las preferencias del usuario, ya que es necesario para guardar credenciales cifradas como las frases de contrase\u00f1as WiFi de cada usuario. La persistencia de los di\u00e1logos de KWallet puede ser consecuencia de desactivarlo.\n\nEn caso de que encuentre molestos los di\u00e1logos para desbloquear la cartera cuando las aplicaciones deseen acceder a ella, puede permitir que los [[Display manager (Espa\u00f1ol)|gestores de pantallas]] [[SDDM]] y [[LightDM (Espa\u00f1ol)|LightDM]] desbloqueen la cartera al iniciar sesi\u00f3n autom\u00e1ticamente, v\u00e9ase [[KDE Wallet (Espa\u00f1ol)#Desbloquear KDE Wallet autom\u00e1ticamente al iniciar la sesi\u00f3n|KDE Wallet#Desbloquear KDE Wallet autom\u00e1ticamente al iniciar sesi\u00f3n]]. La primera cartera debe ser generada por KWallet (y no por el usuario) para poder ser utilizada por las credenciales del programa del sistema.\n\nEn caso de que desee que las credenciales de la cartera no se abran en la memoria para cada aplicaci\u00f3n, puede restringir su acceso a las aplicaciones con {{Pkg|kwalletmanager}} en la configuraci\u00f3n de KWallet.\n\nSi no le interesa para nada el cifrado de credenciales, simplemente puede dejar los formularios de contrase\u00f1as en blanco cuando KWallet le pida la contrase\u00f1a mientras crea una cartera. En este caso, las aplicaciones pueden acceder a las contrase\u00f1as sin tener que desbloquear primero la cartera.\n\n=== Discover no muestra ninguna aplicaci\u00f3n ===\n\nEsto se puede resolver instalando {{Pkg|packagekit-qt5}}.\n\n=== kscreenlocker_greet usa mucha CPU con controladores de NVIDIA ===\n\nTal y como se describe en [https://bugs.kde.org/show_bug.cgi?id=347772 KDE Bug 347772] los controladores OpenGL de NVIDIA y QML pueden no funcionar bien con Qt 5. Esto puede llevar a {{ic|kscreenlocker_greet}} a utilizar mucha CPU despu\u00e9s de desbloquear la sesi\u00f3n. Para resolver este problema, establezca la [[Environment variables (Espa\u00f1ol)|variable de entorno]] {{ic|QSG_RENDERER_LOOP}} a {{ic|basic}}.\n\nA continuaci\u00f3n, elimine las instancias anteriores del greeter con {{ic|killall kscreenlocker_greet}}.\n\n=== Error 22 del SO cuando se ejecuta Akonadi en ZFS ===\n\nSi su directorio de inicio est\u00e1 en un grupo [[ZFS]], cree un archivo {{ic|~/.config/akonadi/mysql-local.conf}} con el siguiente contenido:\n\n [mysqld]\n innodb_use_native_aio = 0\n\nV\u00e9ase [[MariaDB#OS error 22 when running on ZFS]].\n\n=== Algunos programas no pueden desplazarse cuando sus ventanas est\u00e1n inactivas ===\n\nEsto se debe a la problem\u00e1tica manera en que GTK3 maneja los eventos de desplazamiento del rat\u00f3n. Una soluci\u00f3n para esto es establecer la [[Environment variables (Espa\u00f1ol)|variable de entorno]] {{ic|1=GDK_CORE_DEVICE_EVENTS=1}}. Sin embargo, esta soluci\u00f3n tambi\u00e9n rompe el desplazamiento suave del panel t\u00e1ctil y el desplazamiento de la pantalla t\u00e1ctil.\n\n== V\u00e9ase tambi\u00e9n ==\n\n* [https://www.kde.org/ P\u00e1gina web de KDE]\n* [https://bugs.kde.org/ Seguimiento de errores de KDE]\n* [https://blog.martin-graesslin.com/blog/kategorien/kde/ Blog de Martin Graesslin]"
                    }
                ]
            },
            "6721": {
                "pageid": 6721,
                "ns": 0,
                "title": "Proxy server",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Proxy servers]]\n[[Category:Network configuration]]\n[[ja:\u30d7\u30ed\u30ad\u30b7\u8a2d\u5b9a]]\n[[zh-hans:Proxy server]]\n{{Related articles start}}\n{{Related|HTTP tunneling}}\n{{Related articles end}}\n\nAccording to [[Wikipedia:Proxy server|Wikipedia]]:\n:In computer networks, a proxy server is a server (a computer system or an application) that acts as an intermediary for requests from clients seeking resources from other servers.\n\n== HTTPS MITM proxies ==\n\nWhen debugging HTTPS connections it is sometimes useful to intercept them outside of the browser. In order for the TLS MITM to work you need to trust a [[certificate authority]] of the proxy either in your browser or system-wide.\n\n* {{App|Charles|Graphical trialware written in Java.|https://www.charlesproxy.com/|{{AUR|charles}}}}\n* {{App|Fiddler|Proprietary and graphical, running on Mono.|https://www.telerik.com/fiddler|{{AUR|fiddler}}}}\n* {{App|microsocks|Plain simple SOCKS5 proxy server, written in C.|https://github.com/rofl0r/microsocks|{{Pkg|microsocks}}}}\n* {{App|mitmproxy|Command-line and web interface, written in Python, also has API.|https://mitmproxy.org/|{{Pkg|mitmproxy}}}}\n* {{App|sslsplit|Works with any TLS connections but cannot act as a HTTP proxy in a browser, written in C.|https://www.roe.ch/SSLsplit|{{Pkg|sslsplit}}}}\n\n== Environment variables ==\n\n{{Expansion|To export the environment everywhere (more or less), they could be set in {{ic|/etc/environment}}, {{ic|/etc/environment.d/*.conf}} and {{ic|~/.config/environment.d/*.conf}}.}}\n\nSome programs, such as [[wget]] and (used by [[pacman]]) [[CURL]], use environment variables of the form {{ic|''protocol''_proxy}} to determine the proxy for a given protocol (e.g. HTTP, FTP, ...).\n\nBelow is an example on how to set these variables in a shell:\n\n{{bc|1=\nexport http_proxy=http://10.203.0.1:5187/\nexport https_proxy=$http_proxy\nexport ftp_proxy=$http_proxy\nexport rsync_proxy=$http_proxy\nexport no_proxy=\"localhost,127.0.0.1,localaddress,.localdomain.com\"\n}}\n\nSome programs look for the all caps version of the environment variables.\n\nIf the proxy environment variables are to be made available to all users and all applications, the above mentioned export commands may be added to a script, say {{ic|proxy.sh}} inside {{ic|/etc/profile.d/}}. The script has to be then made [[executable]]. This method is helpful while using a desktop environment like [[Xfce]] which does not provide an option for proxy configuration. For example, [[Chromium]] browser will make use of the variables set using this method while running XFCE. \n\nAlternatively, there is a tool named {{AUR|proxyman-git}} which claims to configure system-wide proxy settings easily. It also handles proxy configurations of other software like [[git]], [[npm]], [[Dropbox]], etc. The project is inspired from Alan Pope's idea of making a script.\n \nAlternatively you can automate the toggling of the variables by adding a function to your {{ic|.bashrc}} (thanks to Alan Pope for original script idea)\n\n{{bc|<nowiki>\nfunction proxy_on() {\n    export no_proxy=\"localhost,127.0.0.1,localaddress,.localdomain.com\"\n\n    if (( $# > 0 )); then\n        valid=$(echo $@ | sed -n 's/\\([0-9]\\{1,3\\}.\\?\\)\\{4\\}:\\([0-9]\\+\\)/&/p')\n        if [[ $valid != $@ ]]; then\n            >&2 echo \"Invalid address\"\n            return 1\n        fi\n        local proxy=$1\n        export http_proxy=\"$proxy\" \\\n               https_proxy=$proxy \\\n               ftp_proxy=$proxy \\\n               rsync_proxy=$proxy\n        echo \"Proxy environment variable set.\"\n        return 0\n    fi\n\n    echo -n \"username: \"; read username\n    if [[ $username != \"\" ]]; then\n        echo -n \"password: \"\n        read -es password\n        local pre=\"$username:$password@\"\n    fi\n\n    echo -n \"server: \"; read server\n    echo -n \"port: \"; read port\n    local proxy=$pre$server:$port\n    export http_proxy=\"$proxy\" \\\n           https_proxy=$proxy \\\n           ftp_proxy=$proxy \\\n           rsync_proxy=$proxy \\\n           HTTP_PROXY=$proxy \\\n           HTTPS_PROXY=$proxy \\\n           FTP_PROXY=$proxy \\\n           RSYNC_PROXY=$proxy\n}\n\nfunction proxy_off(){\n    unset http_proxy https_proxy ftp_proxy rsync_proxy \\\n          HTTP_PROXY HTTPS_PROXY FTP_PROXY RSYNC_PROXY\n    echo -e \"Proxy environment variable removed.\"\n}\n</nowiki>}}\n\nOmit username or password if they are not needed.\n\nAs an alternative, you may want to use the following script.\nChange the strings {{ic|YourUserName}}, {{ic|ProxyServerAddress:Port}}, {{ic|LocalAddress}} and {{ic|LocalDomain}} to match your own data, then edit your {{ic|~/.bashrc}} to include the edited functions. Any new bash window will have the new functions. In existing bash windows, type {{ic|source ~/.bashrc}}.\nYou may prefer to put function definitions in a separate file like {{ic|functions}} then add {{ic|source functions}} to {{ic|.bashrc}} instead of putting everything in {{ic|.bashrc}}. You may also want to change the name \"myProxy\" into something short and easy to write.\n\n{{bc|<nowiki>\n#!/bin/bash\n\nassignProxy(){\n   PROXY_ENV=\"http_proxy ftp_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY FTP_PROXY ALL_PROXY\"\n   for envar in $PROXY_ENV\n   do\n      export $envar=$1\n   done\n   for envar in \"no_proxy NO_PROXY\"\n   do\n      export $envar=$2\n   done\n}\n\nclrProxy(){\n    PROXY_ENV=\"http_proxy ftp_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY FTP_PROXY ALL_PROXY\"\n    for envar in $PROXY_ENV\n    do\n       unset $envar\n    done\n}\n\nmyProxy(){\n   user=YourUserName\n   read -p \"Password: \" -s pass &&  echo -e \" \"\n   proxy_value=\"http://$user:$pass@ProxyServerAddress:Port\"\n   no_proxy_value=\"localhost,127.0.0.1,LocalAddress,LocalDomain.com\"\n   assignProxy $proxy_value $no_proxy_value\n}\n</nowiki>}}\n\n=== Keep proxy through sudo ===\n\nIf the proxy [[environment variables]] are set for the user only they will get lost when running commands with [[sudo]] (or when programs use sudo internally).\n\nA way to prevent that is to add the following line to a [[sudo]] configuration file:\n\n{{hc|/etc/sudoers.d/05_proxy|2=\nDefaults env_keep += \"*_proxy *_PROXY\"\n}}\n\n=== Automation with network managers ===\n\n* [[NetworkManager]] cannot change the environment variables.\n* [[netctl]] could set-up these environment variables but they would not be seen by other applications as they are not child of netctl.\n\n== About libproxy ==\n\n{{Pkg|libproxy}} is an abstraction library which should be used by all applications that want to access a network resource. It still is in development but could lead to a unified and automated handling of proxies in GNU/Linux if widely adopted.\n\nThe role of libproxy is to read the proxy settings from different sources and make them available to applications which use the library. The interesting part with libproxy is that it offers an implementation of the [[Wikipedia:Web_Proxy_Autodiscovery_Protocol|Web Proxy Autodiscovery Protocol]] and an implementation of [[Wikipedia:Proxy_auto-config|Proxy Auto-Config]] that goes with it.\n\nThe {{ic|/usr/bin/proxy}} binary takes URL(s) as argument(s) and returns the proxy/proxies that could be used to fetch this/these network resource(s).\n\n{{Note|1=the version 0.4.11 does not support {{ic|1=http_proxy='wpad:'}} because {{ic|1={ pkg-config 'mozjs185 >= 1.8.5'; } }} fails .}}\n\n== Web proxy options ==\n\n* [[Squid]] is a very popular caching/optimizing proxy.\n* [[Privoxy]] is an anonymizing and ad-blocking proxy.\n* {{Pkg|tinyproxy}} is a small, efficient HTTP/SSL proxy daemon.\n* For a simple proxy, [[ssh]] with port forwarding can be used.\n\n=== Simple Proxy with SSH ===\n\nConnect to a server (HOST) on which you have an account (USER) as follows\n\n $ ssh -D ''PORT'' ''USER''@''HOST''\n\nFor PORT, choose some number which is not an IANA registered port. This specifies that traffic on the local ''PORT'' will be forwarded to the remote ''HOST''. ssh will act as a [[Wikipedia:SOCKS|SOCKS]] server. Software supporting SOCKS proxy servers can simply be configured to connect to ''PORT'' on localhost. See  [[OpenSSH#Forwarding other ports]].\n\n== Using a SOCKS proxy ==\n\nThere are two cases:\n\n* the application you want to use handles [[Wikipedia:SOCKS#SOCKS5|SOCKS5]] proxies (for example [[Firefox]]), then you just have to configure it to use the proxy.\n* the application you want to use does not handle SOCKS proxies, then you can try to use {{Pkg|tsocks}} or {{Pkg|proxychains-ng}}.\n\nIn Firefox, you can use the SOCKS proxy in the menu ''Preferences > Network > Settings''. Choose ''Manual Proxy Configuration'', and set the SOCKS Host (and only this one, make sure the other fields, such as HTTP Proxy or SSL Proxy are left empty). For example, if a SOCKS5 proxy is running on localhost port 8080, put {{ic|127.0.0.1}} in the SOCKS Host field, {{ic|8080}} in the Port field, and validate.\n\nIf using ''proxychains-ng'', the configuration takes place in {{ic|/etc/proxychains.conf}}. You may have to uncomment the last line (set by default to use [[Tor]]), and replace it with the parameters of the SOCKS proxy. For example, if you are using the same SOCKS5 proxy as above, you will have to replace the last line by:\n\n socks5 127.0.0.1 8080\n\nThen, ''proxychains-ng'' can be launched with \n\n $ proxychains ''program''\n\nWhere {{ic|''program''}} can be any program already installed on your system (e.g. xterm, gnome-terminal, etc).\n\nIf using ''tsocks'', the configuration takes place in {{ic|/etc/tsocks.conf}}. See {{man|5|tsocks.conf}} for the options. An example minimum configuration looks like this:\n\n{{hc|/etc/tsocks.conf|2=\nserver = 127.0.0.1\nserver_port = 8080\nserver_type = 5\ndefault_user = \"\"\ndefault_pass = \"\"}}\n\n=== curl and pacman ===\n\nYou may set the {{ic|all_proxy}} environment variable to let curl and pacman (which uses curl) use your socks5 proxy:\n\n $ export all_proxy=\"socks5://your.proxy:1080\"\n\n== Proxy settings on GNOME3 ==\n\nSome programs like [[Chromium]] and [[Firefox]] can use the settings stored by GNOME. These settings can be modified through the gnome-control-center front end and also through ''gsettings''.\n\n gsettings set org.gnome.system.proxy mode 'manual' \n gsettings set org.gnome.system.proxy.http host 'proxy.localdomain.com'\n gsettings set org.gnome.system.proxy.http port 8080\n gsettings set org.gnome.system.proxy.ftp host 'proxy.localdomain.com'\n gsettings set org.gnome.system.proxy.ftp port 8080\n gsettings set org.gnome.system.proxy.https host 'proxy.localdomain.com'\n gsettings set org.gnome.system.proxy.https port 8080\n gsettings set org.gnome.system.proxy.socks host 'proxy.localdomain.com'\n gsettings set org.gnome.system.proxy.socks port 8080\n gsettings set org.gnome.system.proxy ignore-hosts \"['localhost', '127.0.0.0/8', '10.0.0.0/8', '192.168.0.0/16', '172.16.0.0/12' , '*.localdomain.com' ]\"\n\nThis configuration can also be set to automatically execute when [[NetworkManager#Proxy settings|NetworkManager]] connects to specific networks, by using the {{AUR|proxydriver}} package.\n\n== Microsoft NTLM proxy ==\n\nIn a Windows network, NT LAN Manager (NTLM) is a suite of Microsoft security protocols which provides authentication, integrity, and confidentiality to users.\n\nA local proxy stands between your applications and the NTLM proxy, adding NTLM authentication on-the-fly.\n \n (NTLM PROXY IP:PORT + CREDENTIALS + OTHER INFO) -----> '''(127.0.0.1:PORT)'''\n\nTwo options are available from [[AUR]]:\n* {{AUR|alpaca-proxy}}\n* {{AUR|cntlm}}\n\n=== Alpaca ===\n\n{{AUR|alpaca-proxy}} from [[AUR]] is a local HTTP proxy for command-line tools. It supports proxy auto-configuration (PAC) files and NTLM authentication.\n\n==== Usage ====\n\nAlpaca can be launched interactively, which requires entering a password:\n\n $ alpaca -d MYDOMAIN -u me\n Password (for MYDOMAIN\\me):\n\nTo launch alpaca non-interactively, a NTLM hash needs to be generated and exported as a variable:\n\n $ ./alpaca -d MYDOMAIN -u me -H\n Password (for MYDOMAIN\\me):\n NTLM_CREDENTIALS=\"me@DOMAIN:00000000000000000000000000000000\"; export NTLM_CREDENTIALS\n\nAlpaca will by default listen on {{ic|localhost:''3128''}}, this can be overridden using the {{ic|-l}} and {{ic|-p}} options.\n\nFurthermore a proxy PAC url should be provided as a parameter of the {{ic|-C}} option.\n\n==== Running as a service ====\n\n{{AUR|alpaca-proxy}} includes the {{ic|alpaca.service}} [[systemd/User|systemd user service]], which can be used to start alpaca automatically in a non-interactive way.\n\nIt requires the following environment variables to be set in {{ic|~/.config/alpaca.environment}}:\n\n LISTEN_ADDRESS=localhost\n LISTEN_PORT=3128\n NTLM_CREDENTIALS=\"me@DOMAIN:00000000000000000000000000000000\"\n PAC_URL=\"<nowiki>http://some.url/to/some-file.pac</nowiki>\"\n\n=== Cntlm ===\n\n{{AUR|cntlm}} from the [[AUR]] can be configured with several \"parent\" proxies and Cntlm will try one after another until one works. All authenticated connections are cached and reused to achieve high efficiency.\n\n==== Configuration ====\n\nChange settings in {{ic|/etc/cntlm.conf}} as needed, except for the password. Then run:\n\n $ cntlm -H\n\nThis will generate encrypted password hashes according to your proxy hostname, username and password.\n\n{{Warning|{{Pkg|ettercap}} can easily sniff your password over LAN when using plain-text passwords instead of encrypted hashes.}}\n\nEdit {{ic|/etc/cntlm.conf}} again and include all three generated hashes, then [[enable]] {{ic|cntlm.service}}.\n\nTo test settings, run:\n\n $ cntlm -v\n\n==== Usage ====\n\nUse {{ic|127.0.0.1:''port''}} or {{ic|localhost:''port''}} as a proxy adress. {{ic|''port''}} matches the {{ic|Listen}} parameter in {{ic|/etc/cntlm.conf}}, which by default is {{ic|3128}}."
                    }
                ]
            },
            "6728": {
                "pageid": 6728,
                "ns": 0,
                "title": "Clipboard",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:X server]]\n[[Category:Lists of software]]\n[[es:Clipboard]]\n[[ja:\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9]]\n[[ru:Clipboard]]\n{{Related articles start}}\n{{Related|Copying text from a terminal}}\n{{Related|Firefox#Middle-click behavior}}\n{{Related|GTK#Disable mouse paste}}\n{{Related|Vim#Clipboard}}\n{{Related articles end}}\n\n{{Expansion|Describe clipboards for [[Wayland]] and Xwayland. Some references: [https://wiki.gnome.org/Initiatives/Wayland/PrimarySelection], [https://github.com/swaywm/sway/issues/1012], [https://bugreports.qt.io/browse/QTBUG-66008].}}\n\nAccording to [[Wikipedia:Clipboard (computing)|Wikipedia]]:\n:The clipboard is a facility used for short-term data storage and/or data transfer between documents or applications, via [[Wikipedia:copy and paste|copy and paste]] operations.\n\n== History ==\n\nIn X10, ''cut buffers'' were introduced. These were limited buffers that stored arbitrary text and were used by most applications. However, they were inefficient and implementation of them varied, so selections were introduced. Cut buffers are long deprecated, and although some applications (such as [[xterm]]) may have legacy support for them, it is both not likely and not recommended that they be used.\n\n== Selections ==\n\n[[Freedesktop.org]] describes the two main ''selections'' as follows:[https://specifications.freedesktop.org/clipboards-spec/clipboards-latest.txt]\n\n;PRIMARY: Used for the currently selected text, even if it is not explicitly copied, and for middle-mouse-click pasting. In some cases, pasting is also possible with a keyboard shortcut.\n;CLIPBOARD: Used for explicit copy/paste commands involving keyboard shortcuts or menu items. Hence, it behaves like the single-clipboard system on Windows. Unlike PRIMARY, it can also handle [https://stackoverflow.com/questions/3571179/how-does-x11-clipboard-handle-multiple-data-formats multiple data formats].\n\nThe majority of programs for [[Xorg]], including [[Qt]] and [[GTK]] applications, follow this behavior. While [https://tronche.com/gui/x/icccm/ ICCCM] also defines a SECONDARY selection, it does not have a consensually agreed upon purpose. Despite the naming, all three selections are basically \"clipboards\". Rather than the old \"cut buffers\" system where arbitrary applications could modify data stored in the cut buffers, only one application may control or \"own\" a selection at one time. This prevents inconsistencies in the operation of the selections.\n\nSee the [[Keyboard shortcuts]] page which lists the default shortcuts in many programs.\n\nIt is also important to realize that according to the selection protocols, nothing is copied [https://unix.stackexchange.com/questions/213840/how-to-toggle-or-turn-off-text-selection-being-sent-to-the-clipboard/213843#213843 until it is pasted]. For example, if you select some word in a terminal window, close the terminal and then want to paste it somewhere else, it will not work because the terminal is gone and the text has not been copied anywhere. If you want the word to be preserved after closing terminal window, consider installing a [[clipboard manager]].\n\n{{Note|[[#Managers|Clipboard managers]] can significantly change the user experience, for example they might synchronize the PRIMARY and CLIPBOARD selections to emulate a single-clipboard system.}}\n\n== Disabling middle-click paste ==\n\nThe following disables the middle-click pasting behavior by automatically clearing PRIMARY, without disabling the middle-click button or altering its other functionalities (like opening in a new tab or scrolling).\n\n=== Globally ===\n\n==== Using sxhkd ====\n\nUsing [[sxhkd]], add the following to the [[sxhkd#Configuration|configuration file]]: \n\n ~button2\n     ;echo -n | xclip -in\n\nThe command makes use of {{Pkg|xclip}}. See [[sxhkd#Usage]] for configuring sxhkd to autostart.\n\n==== Using xsel ====\n\nRun the script\n\n #!/bin/sh\n while true; do\n     xsel -fin </dev/null\n done\n\n=== Application-specific ===\n\n* [[GTK]] \u2014 See [[GTK#Disable mouse paste]]\n* [[Firefox]] \u2014 See [[Firefox#Middle-click behavior]]\n* [[LibreOffice]] \u2014 Can be disabled from Tools > Options > LibreOffice > View > Mouse\n\n== Tools ==\n\nThis section lists command-line tools to manipulate the clipboards.\n\n* {{App|sselp|Simple X selection printer. Prints the X selection to stdout.|https://tools.suckless.org/x/sselp|{{AUR|sselp}}}}\n* {{App|xclip|A lightweight, command-line based interface to the clipboard.|https://github.com/astrand/xclip|{{Pkg|xclip}}}}\n* {{App|xsel|Command-line program for getting and setting the contents of the X selection.|http://www.vergenet.net/~conrad/software/xsel/|{{Pkg|xsel}}}}\n* {{App|wl-clipboard|A simple copy/paste tool for [[Wayland]] compositors.|https://github.com/bugaevc/wl-clipboard|{{Pkg|wl-clipboard}}}}\n\n{{Tip|Clipboards on Wayland can be synchronized with {{Pkg|wl-clipboard}} using {{ic|wl-paste -pw wl-copy}}.}}\n\n== Managers ==\n\nThis section lists clipboard managers which provide additional features such as clipboard history or synchronization.\n\n* {{App|Anamnesis|Clipboard manager that stores all the clipboard history and offers an interface to do a full-text search. It has both a command line and GUI mode available.|http://anamnesis.sourceforge.net/|{{AUR|anamnesis}}}}\n* {{App|Autocutsel|Command line and daemon interfaces to synchronize PRIMARY, {{Ic|CLIPBOARD}} and cut buffer selections.|https://www.nongnu.org/autocutsel/|{{AUR|autocutsel}}}}\n* {{App|Clipboard|Easy-to-use clipboard manager for terminals with multiple different clipboards, persistent clipboards, and regex selection.|https://github.com/Slackadays/Clipboard|{{AUR|clipboard}}}}\n* {{App|Clipboard Indicator|Clipboard manager extension for GNOME Shell. Adds a clipboard indicator to the top panel, and caches clipboard history.|https://github.com/Tudmotu/gnome-shell-extension-clipboard-indicator|{{AUR|gnome-shell-extension-clipboard-indicator-git}}}}\n* {{App|Clipcat|Clipboard manager written in Rust which allows user to select clipboard history from application launchers such as [[dmenu]], [[rofi]]. |https://github.com/xrelkd/clipcat|{{Pkg|clipcat}}}}\n* {{App|cliphist|wayland clipboard manager with support for multimedia.|https://github.com/sentriz/cliphist|{{Pkg|cliphist}}}}\n* {{App|ClipIt|Fork of Parcellite. It has both a command line and GUI mode available.|https://github.com/CristianHenzel/ClipIt|{{AUR|clipit}}}}\n* {{App|Clipman|Clipboard manager plugin for the Xfce4 panel. It keeps the clipboard contents around while it is usually lost when you close an application. It is able to handle text and images, and has a feature to execute actions on specific text selections by matching them against regular expressions.|https://goodies.xfce.org/projects/panel-plugins/xfce4-clipman-plugin|{{Pkg|xfce4-clipman-plugin}}}}\n* {{App|Clipmenu|Dmenu based clipboard manager|https://github.com/cdown/clipmenu/|{{Pkg|clipmenu}}}}\n* {{App|Clipmon|A lightweight clipboard manager for Wayland. Intended as a monitoring tool that will send a notification when an application pastes from the clipboard on its own (this feature is a work in progress).|https://git.sr.ht/~whynothugo/clipmon|{{AUR|clipmon-git}}}}\n* {{App|clipsim|Simple and fast X clipboard manager written in C.|https://github.com/lucas-mior/clipsim|{{AUR|clipsim-git}}}}\n* {{App|Clipster|A lightweight, command-line-driven clipboard manager, written in Python.|https://github.com/mrichar1/clipster|{{AUR|clipster}}}}\n* {{App|Clipton|Clipboard manager with a Rofi frontend.|https://github.com/madprops/clipton|{{AUR|clipton-git}}}}\n* {{App|CopyQ|Clever Qt clipboard manager with searchable and editable history, custom actions on items and command line support.|https://github.com/hluk/CopyQ|{{Pkg|copyq}}}}\n* {{App|Gnome Clipboard History|Gnome Clipboard History is a clipboard manager GNOME extension that saves what you've copied into an easily accessible, searchable history panel.|https://github.com/SUPERCILEX/gnome-clipboard-history|{{AUR|gnome-shell-extension-clipboard-history}}}}\n* {{App|GPaste|Clipboard management system that aims at being a new generation Parcellite, with a modular structure split in a couple of libraries and a daemon for adaptability. Offers a GNOME Shell extension and a CLI interface.|https://github.com/Keruspe/GPaste|{{Pkg|gpaste}}}}\n* {{App|[[Greenclip]]|Simple clipboard manager to be integrated with rofi|https://github.com/erebe/greenclip|{{AUR|rofi-greenclip}}}}\n* {{App|[[Wikipedia:Klipper|Klipper]]|Full featured clipboard manager for the KDE desktop.|https://userbase.kde.org/Klipper|{{Pkg|plasma-workspace}}}}\n* {{App|Parcellite|Lightweight yet feature-rich clipboard manager. It has both a command line and GUI mode available.|https://parcellite.sourceforge.net/|{{Pkg|parcellite}}}}\n* {{App|Qlipper|Lightweight and cross-platform clipboard history applet based on Qt.|https://github.com/pvanek/qlipper/|{{AUR|qlipper}}}}\n* {{App|xclipboard|Official X clipboard command-line client.|https://www.x.org/releases/X11R7.5/doc/man/man1/xclipboard.1.html|{{Pkg|xorg-xclipboard}}}}\n* {{App|xcmenu|Clipboard synchronizer developed for window manager users.|https://github.com/dindon-sournois/xcmenu|{{AUR|xcmenu-git}}}}\n\n== See also ==\n\n* [https://specifications.freedesktop.org/clipboards-spec/clipboards-latest.txt Cut-and-paste in X]\n* [https://www.jwz.org/doc/x-cut-and-paste.html X Selections, Cut Buffers, and Kill Rings.]\n* [https://www.uninformativ.de/blog/postings/2017-04-02/0/POSTING-en.html X11: How does \u201cthe\u201d clipboard work?]\n* [https://wayland.app/protocols/primary-selection-unstable-v1 Wayland's Primary selection protocol]"
                    }
                ]
            },
            "6789": {
                "pageid": 6789,
                "ns": 0,
                "title": "ECryptfs",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "{{Lowercase title}}\n[[Category:Data-at-rest encryption]]\n[[Category:Stackable file systems]]\n[[ja:ECryptfs]]\n[[ru:ECryptfs]]\nThis article describes basic usage of [https://launchpad.net/ecryptfs eCryptfs]. It guides you through the process of creating a private and secure encrypted directory within your home directory to store sensitive files and private data.\n\nIn implementation eCryptfs differs from [[dm-crypt]], which provides a ''block device encryption layer'', while eCryptfs is an actual file-system &ndash; a [[wikipedia:Cryptographic_filesystems|stacked cryptographic file system]]. For comparison of the two you can refer to [[Data-at-rest encryption#Block device vs stacked filesystem encryption]]. One distinguished feature is that the encryption is stacked on an existing filesystem; eCryptfs can be mounted onto any single existing directory and does not require a separate partition (or size pre-allocation).\n\n== Basics ==\n\nAs mentioned in the summary eCryptfs does not require special on-disk storage allocation effort, such as a separate partition or pre-allocated space. Instead, you can mount eCryptfs on top of any single directory to protect it. That includes, for example, a user's entire home directory or single dedicated directories within it. All cryptographic metadata is stored in the headers of files, so encrypted data can be easily moved, stored for backup and recovered. There are other advantages, but there are also drawbacks, for instance eCryptfs is not suitable for encrypting complete partitions which also means you cannot protect swap space with it (but you can, of course, combine it with [[Dm-crypt/Swap encryption]]). If you are just starting to set up disk encryption, swap encryption and other points to consider are covered in [[Data-at-rest encryption#Preparation]].\n\nTo familiarize with eCryptfs a few points:\n\n* As a stacked filesystem, a mounting of an eCryptfs directory refers to mounting a (stacked) encrypted directory to another '''un'''encrypted mount point (directory) at Linux kernel runtime.\n* It is possible to share an encrypted directory between users. However, the encryption is linked to one passphrase so this must be shared as well. It is also possible to share a directory with differently encrypted files (different passphrases).\n* Several eCryptfs terms are used throughout the documentation:\n** The encrypted directory is referred to as the '''lower''' and the unencrypted as the '''upper''' directory throughout the eCryptfs documentation and this article. While not relevant for this article, the [[Overlay filesystem]] introduced with Linux 3.18 uses [https://docs.kernel.org/filesystems/overlayfs.html#upper-and-lower the same upper/lower nomenclature] for the stacking of filesystems.\n** The '''mount''' passphrase (or key) is what gives access to the encrypted files, i.e. unlocks the encryption. eCryptfs uses the term '''wrapped''' passphrase to refer to the cryptographically secured mount passphrase.\n** {{ic|FEKEK}} refers to a '''F'''ile's '''E'''ncryption '''K'''ey '''E'''ncryption '''K'''ey (see [https://docs.kernel.org/security/keys/ecryptfs.html kernel documentation]).\n** {{ic|FNEK}} refers to a '''F'''ile '''N'''ame '''E'''ncryption '''K'''ey, a key to (optionally) encrypt the filenames stored in the encrypted directory.\n\nBefore using eCryptfs, the following disadvantages should be checked for applicability.\n\n=== Deficiencies ===\n\n* Ease of use\n:The {{Pkg|ecryptfs-utils}} package provides several different ways of setting up eCryptfs. The high-level [[#Ubuntu tools]] are the easiest to use, but they hard-code the lower directory path and other settings, limiting their usefulness. The package also includes low-level tools which are fully configurable, but they are somewhat more difficult to use compared to alternatives like [[EncFS]].\n\n* File name length\n:File names longer than 143 bytes cannot be encrypted (with the {{ic|FNEK}} option) when stacked on a filesystem with a maximum file name length of 255 bytes.[https://bugs.launchpad.net/ecryptfs/+bug/344878] This can break some programs in your home directory (for example [[wikipedia:Symfony|Symfony]] caching).\n\n* Network storage mounts\n:eCryptfs has long-standing [https://bugs.launchpad.net/ecryptfs/+bug/277578 bugs] when used on top of NFS and possibly other networked filesystems, for example, [[#Mounting may fail on a remote host when connecting via Mosh]]. It is always possible to use eCryptfs on a local directory and then copy the encrypted files from the local directory to a network host. However, if you want to set up eCryptfs directly on top of an NFS mount, with no local copy of the files, eCryptfs may crash or behave incorrectly. If in doubt, [[EncFS]] may be a better choice in this case.\n\n* Sparse files\n:[[wikipedia:Sparse_file|Sparse files]] written to eCryptfs will produce larger, non-sparse encrypted files in the lower directory. For example, in an eCryptfs directory running {{ic|truncate -s 1G file.img}} creates a 1GB encrypted file on the underlying filesystem, with the corresponding resource (disk space, data throughput) requirements. If the same file were created on an unencrypted filesystem or a filesystem using [[Data-at-rest encryption#Block device encryption|block device encryption]], it would only take a few kilobytes.\n\n:This should be considered before encrypting large portions of the directory structure, though in most cases the disadvantages will be minor. If you need to use large sparse files, you can work around this issue by putting the sparse files in an unencrypted directory or using block device encryption for them.\n\n== Setup & mounting ==\n\nBefore starting setup, check the eCryptfs documentation. The software is distributed with a very comprehensive set of [https://www.ecryptfs.org/documentation manual pages].\n\neCryptfs has been included in Linux since version 2.6.19. Start by loading the {{ic|ecryptfs}} module:\n\n # modprobe ecryptfs\n\nTo actually mount an eCryptfs filesystem, you need to use userspace tools provided by the {{Pkg|ecryptfs-utils}} package. Unfortunately, due to the poor design of these tools, you must choose between three ways of setting up eCryptfs, each with different tradeoffs:\n\n# Use the high-level [[#Ubuntu tools]], which sets things up automatically, but requires the lower directory to be {{ic|~/.Private/}}, and allows only one encrypted filesystem per user.\n# Use [[#ecryptfs-simple|ecryptfs-simple]], which is an easy way to mount eCryptfs filesystems using any lower directory and upper directory.\n# [[#Manual setup]], which involves separate steps for loading the passphrase and mounting eCryptfs, but allows complete control over the directories and encryption settings.\n\n=== Ubuntu tools ===\n\nMost of the user-friendly convenience tools installed by the {{Pkg|ecryptfs-utils}} package assume that a very specific eCryptfs setup is being used, namely the one that is officially used by Ubuntu (where it can be selected as an option during installation). Unfortunately, these choices are not just default options, but are actually hard-coded in the tools. If this setup does not suit your needs, then you cannot use the convenience tools and will have to follow the steps at [[#Manual setup]] instead.\n\nThe setup used by these tools is as follows:\n\n* each user can have '''only one encrypted directory''' that is managed by these tools:\n** either full {{ic|$HOME}} directory encryption, or\n** a single encrypted data directory (by default {{ic|~/Private/}}, but this can be customized).\n* the '''lower directory''' for each user is always {{ic|~/.Private/}}{{Tip|In the case of full home dir encryption, this will be a symlink to the actual location at {{ic|/home/.ecryptfs/''username''/.Private/}}.}}\n* the '''encryption options''' used are:\n** ''cipher:'' AES\n** ''key length:'' 16 bytes (128 bits)\n** ''key management scheme:'' passphrase\n** ''plaintext passthrough:'' enabled\n* the '''configuration / control info''' for the encrypted directory is stored in a bunch of files at {{ic|~/.ecryptfs/}}{{Tip|In the case of full home dir encryption, this will be a symlink to the actual location at {{ic|/home/.ecryptfs/''username''/.ecryptfs/}}.}}\n** {{ic|Private.mnt}} ''[plain text file]'' - contains the path where the upper directory should be mounted (e.g. {{ic|/home/lucy}} or {{ic|/home/lucy/Private}})\n** {{ic|Private.sig}} ''[plain text file]'' - contains the signature used to identify the mount passphrase in the kernel keyring\n** {{ic|wrapped-passphrase}} ''[binary file]'' - the mount passphrase, encrypted with the login passphrase\n** {{ic|auto-mount}}, {{ic|auto-umount}} ''[empty files]'' - if they exist, the {{ic|pam_ecryptfs.so}} module will (assuming it is loaded) automatically mount/unmount this encrypted directory when the user logs in/out\n\n==== Encrypting a data directory ====\n\nFor a full {{ic|$HOME}} directory encryption see [[#Encrypting a home directory]]\n\nBefore the data directory encryption is setup, decide whether it should later be mounted manually or automatically with the user log-in.\n\nTo encrypt a single data directory as a user and mount it manually later, run:\n $ ecryptfs-setup-private --nopwcheck --noautomount\n\nand follow the instructions. The option {{ic|--nopwcheck}} enables you to choose a passphrase different to the user login passphrase and the option {{ic|--noautomount}} is self-explanatory. So, if you want to setup the encrypted directory automatically on log-in later, just ''leave out'' both options right away.\n\nThe script will automatically create the {{ic|~/.Private/}} and {{ic|~/.ecryptfs/}} directory structures as described in the box above. It will also ask for two passphrases:\n\n;login passphrase: This is the password you will have to enter each time you want to mount the encrypted directory. If you want auto-mounting on login to work, it has to be the same password you use to login to your user account.\n\n;mount passphrase: This is used to derive the actual file encryption master key. Thus, you should not enter a custom one unless you know what you are doing - instead press Enter to let it auto-generate a secure random one. It will be encrypted using the login passphrase and stored in this encrypted form in {{ic|~/.ecryptfs/wrapped-passphrase}}. Later it will automatically be decrypted (\"unwrapped\") again in RAM when needed, so you never have to enter it manually. Make sure this file does not get lost, otherwise you can never access your encrypted folder again! You may want to run {{ic|ecryptfs-unwrap-passphrase}} to see the mount passphrase in unencrypted form, write it down on a piece of paper, and keep it in a safe (or similar), so you can use it to recover your encrypted data in case the {{ic|wrapped-passphrase}} file is accidentally lost, corrupted, or you forget the login passphrase.\n\nThe mount point (\"upper directory\") for the encrypted folder will be at {{ic|~/Private/}} by default. However, you can manually change this right after the setup command has finished running, by doing:\n\n $ mv ~/Private ''/path/to/new/folder''\n $ echo ''/path/to/new/folder'' > ~/.ecryptfs/Private.mnt\n\nTo actually use your encrypted folder, you will have to mount it - see [[#Mounting]] below.\n\n==== Encrypting a home directory ====\n\nThe wrapper script {{ic|ecryptfs-migrate-home}} will set up an encrypted home directory for a user and take care of migrating any existing files they have in their not yet encrypted home directory.\n\nTo run it, the user must be logged out and own no processes. The best way to achieve this is to log the user out, log into a console as the root user, and check that {{ic|ps -U ''username''}} returns no output.  You also need to ensure that you have {{pkg|rsync}}, {{pkg|lsof}}, and {{pkg|which}} installed. Once the prerequisites have been met, run:\n\n # modprobe ecryptfs\n # ecryptfs-migrate-home -u ''username''\n\nand follow the instructions. After the wrapper script is complete, follow the instructions for auto-mounting - see [[#Auto-mounting]] below. To complete this process, it is imperative that the user logs in ''before'' the next reboot.\n\nOnce everything is working, the unencrypted backup of the user's home directory, which is saved to {{ic|/home/''username''.''random_characters''}}, should be deleted.\n\n==== Mounting ====\n\n===== Manually =====\n\nExecuting the wrapper\n\n $ ecryptfs-mount-private\n\nand entering the passphrase is all needed to mount the encrypted directory to the ''upper directory'' {{ic|~/Private/}}, described in [[#Ubuntu tools]].\n\nLikewise, executing\n\n $ ecryptfs-umount-private\n\nwill unmount it again.\n\n{{Tip|If it is not required to access the private data permanently during a user session, maybe define an [[alias]] to speed the manual step up.}}\n\nThe tools include another script useful in accessing the encrypted {{ic|.Private}} data or home directory. Executing  {{ic|ecryptfs-recover-private}} as root will search the system (or an optional specific path) for the directory, interactively query the passphrase for it, and mount the directory. It can, for example, be used from a live-CD or different system to access the encrypted data in case of a recovery. Note that if booting from an Arch Linux ISO you must first install the {{pkg|ecryptfs-utils}}. Further, it will only be able to mount {{ic|.Private}} directories created with the Ubuntu tools.\n\n===== Auto-mounting =====\n\nThe default way to auto-mount an encrypted directory is via [[Pam_mount|PAM]]. See {{man|8|pam_ecryptfs}} and - for more details - 'PAM MODULE' in:\n\n /usr/share/doc/ecryptfs-utils/README\n\nFor auto-mounting, it is required that the encrypted directory passphrase is identical to the user's log-in password.\n\nUse these steps to set up auto-mounting:\n\n1. Check if {{ic|~/.ecryptfs/auto-mount}}, {{ic|~/.ecryptfs/auto-umount}} and {{ic|~/.ecryptfs/wrapped-passphrase}} exist (these are automatically created by ''ecryptfs-setup-private'').\n\n2. Add ''ecryptfs'' to the pam-stack exactly as following to allow transparent unwrapping of the passphrase on login:\n\nOpen {{ic|/etc/pam.d/system-auth}} and ''after'' the line containing {{ic|auth required pam_unix.so}} (or {{ic|1=auth [default=die] pam_faillock.so authfail}} if present) add:\n\n auth [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet\n auth    required    pam_ecryptfs.so unwrap\nNext, ''above'' the line containing {{ic|password required pam_unix.so}} (or {{ic|1=-password [success=1 default=ignore] pam_systemd_home.so}} if present) insert:\n password    optional    pam_ecryptfs.so\nAnd finally, ''after'' the line {{ic|session required pam_unix.so}} add:\n session [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet\n session    optional    pam_ecryptfs.so unwrap\n\n{{Note|1=The {{ic|pam_succeed_if.so}} instructions tells the process to ''skip the next line'' if the service requesting authentication is {{ic|systemd-user}}, that runs parallel to your user session and also authenticates through PAM. Should the home directory be mounted a second time, PAM would be unable to unmount it. This is referenced as a [https://bbs.archlinux.org/viewtopic.php?id=194509 break] with systemd and bugs are filed against it : [https://bugs.freedesktop.org/show_bug.cgi?id=72759] [https://nwrickert2.wordpress.com/2013/12/16/systemd-user-manager-ecryptfs-and-opensuse-13-1/]{{Dead link|2023|10|29|status=410}} [https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/313812/comments/43] [https://lists.alioth.debian.org/pipermail/pkg-systemd-maintainers/2014-October/004088.html]. The method exposed here is a workaround. }}\n\n3. Re-login and check output of ''mount'' which should now contain a mountpoint, e.g.:\n\n /home/''username''/.Private on /home/''username''/Private type ecryptfs (...)\n\nfor the user's encrypted directory. It should be perfectly readable at {{ic|~/Private/}}.\n\n{{Note|The above changes to {{ic|system-auth}} enable auto-mounting for normal login. If you switch users instead using {{ic|su -l}}, you need to apply similar changes also to {{ic|/etc/pam.d/su-l}}.}}\n\nThe latter should be automatically unmounted and made unavailable when the user logs off.\n\n{{Note|If you use systemd-user [[systemd/User#Automatic start-up of systemd user instances|lingering]] services, or other separate processes that survive after you logout, your home directory will not get unmounted until they exit. This is intended, because the user processes should always be able to save their state.}}\n\n=== ecryptfs-simple ===\n\nUse [https://xyne.dev/projects/ecryptfs-simple/ ecryptfs-simple] if you just want to use eCryptfs to mount arbitrary directories the way you can with [[EncFS]]. ecryptfs-simple does not require root privileges or entries in {{ic|/etc/fstab}}, nor is it limited to hard-coded directories such as {{ic|~/.Private/}}. The package is available to be [[install]]ed as {{AUR|ecryptfs-simple}} and from [https://xyne.dev/repos/ Xyne's repos].\n\nAs the name implies, usage is simple:\n\nSimple mounting:\n\n $ ecryptfs-simple /path/to/foo /path/to/bar\n\nAutomatic mounting: prompts for options on the first mount of a directory then reloads them next time:\n\n $ ecryptfs-simple -a /path/to/foo /path/to/bar\n\nUnmounting by source directory:\n\n $ ecryptfs-simple -u /path/to/foo\n\nUnmounting by mountpoint:\n\n $ ecryptfs-simple -u /path/to/bar\n\n=== Manual setup ===\n\nThe following details instructions to set up eCryptfs encrypted directories manually. This involves two steps. First, the passphrase is processed and loaded into the kernel keyring. Second, the filesystem is actually mounted using the key from the keyring.\n\nThere are two ways to add the passphrase to the kernel keyring in the first step. The simpler option is {{ic|ecryptfs-add-passphrase}}, which uses a single passphrase to encrypt the files. The disadvantage is that you cannot change the passphrase later. It works like this:\n\n $ ecryptfs-add-passphrase\n Passphrase:\n Inserted auth tok with sig [78c6f0645fe62da0] into the user session keyring\n\nYou can also pipe a passphrase into {{ic|ecryptfs-add-passphrase -}}. Keep in mind that if you leave your passphrase in a file, it will usually defeat the purpose of using encryption.\n\nAs an alternative to a plain passphrase, you can use a \"wrapped passphrase\", where the files are encrypted using a randomly generated key, which is itself encrypted with your passphrase and stored in a file. In this case, you can change your passphrase by unwrapping the key file with your old passphrase and rewrapping it using your new passphrase.\n\nIn the following we [https://stackoverflow.com/a/3980713 prompt] for the wrapping passphrase and do a generation similar to the [https://bazaar.launchpad.net/~ecryptfs/ecryptfs/trunk/view/head:/src/utils/ecryptfs-setup-private#L96 source] and then use ''ecryptfs-wrap-passphrase'' to wrap it with the given password to {{ic|~/.ecryptfs/wrapped-passphrase}}:\n\n $ mkdir ~/.ecryptfs\n $ ( stty -echo; printf \"Passphrase: \" 1>&2; read PASSWORD; stty echo; echo 1>&2; head -c 48 /dev/random | base64; echo \"$PASSWORD\"; ) \\\n   | ecryptfs-wrap-passphrase ~/.ecryptfs/wrapped-passphrase >/dev/null\n\nDo not use a passphrase with more than 64 characters as this will result in an error later when using {{ic|ecryptfs-insert-wrapped-passphrase-into-keyring}}.\n\nNext, we can enter our passphrase to load the key into the keyring:\n\n $ ( stty -echo; printf \"Passphrase: \" 1>&2; read PASSWORD; stty echo; echo $PASSWORD; ) | ecryptfs-insert-wrapped-passphrase-into-keyring ~/.ecryptfs/wrapped-passphrase -\n Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring\n\nIn either case, when you successfully add the passphrase to the kernel keyring, you will get a \"key signature\" like {{ic|78c6f0645fe62da0}} which you will need in the next step.\n\nThere are two different ways of manually mounting eCryptfs, described in the following sections. The first way, using {{ic|mount.ecryptfs_private}}, can be run as a regular user and involves setting up some configuration files. This method does not allow you to change the encryption settings, such as key size. The second way is to use a raw {{ic|mount}} command, which gives you complete control over all settings, but requires you to either run it as root, or add an entry to {{ic|/etc/fstab}} which lets a user mount eCryptfs.\n\n{{Tip|The following examples use an encrypted directory ({{ic|.secret}}) different to the default, hard-coded {{ic|.Private}} in the Ubuntu tools. This is on purpose to avoid problems of erroneous [[#Auto-mounting]] when the system has PAM setup for it, as well as problems with other tools using the hard-coded defaults.}}\n\n==== With configuration files ====\n\nThis method involves running {{ic|mount.ecryptfs_private}} from the {{Pkg|ecryptfs-utils}} package, after first loading your passphrase. This binary requires no root privileges to work by default.\n\nFirst choose a name for your configuration files in {{ic|~/.ecryptfs/}} and decide on the lower and upper directories. In this example we use {{ic|secret}} for the configuration files, put in encrypted data in {{ic|~/.secret/}}, and mount the decrypted files at {{ic|~/secret/}}. Create the required directories:\n\n $ mkdir ~/.secret ~/secret ~/.ecryptfs\n\nNow specify the directories in {{ic|~/.ecryptfs/secret.conf}}, using full paths. Its format looks like the one in {{ic|/etc/fstab}} without the mount options:\n\n $ echo \"$HOME/.secret $HOME/secret ecryptfs\" > ~/.ecryptfs/secret.conf\n\nWrite the key signature you got from {{ic|ecryptfs-add-passphrase}} or {{ic|ecryptfs-insert-wrapped-passphrase-into-keyring}} (see above) into {{ic|~/.ecryptfs/secret.sig}}:\n\n $ echo 78c6f0645fe62da0 > ~/.ecryptfs/secret.sig\n\nIf you also want to enable filename encryption, add a second passphrase to the keyring (or reuse the first passphrase) and '''append''' its key signature to {{ic|~/.ecryptfs/secret.sig}}:\n\n  $ echo 326a6d3e2a5d444a >> ~/.ecryptfs/secret.sig\n\nFinally, mount {{ic|~/.secret/}} on {{ic|~/secret/}}:\n\n $ mount.ecryptfs_private secret\n\nWhen you are done, unmount it:\n\n $ umount.ecryptfs_private secret\n\n==== Raw mount command ====\n\nBy running the actual {{ic|mount}} command manually, you get complete control over the encryption options. The disadvantage is that you need to either run {{ic|mount}} as root, or add an entry to {{ic|/etc/fstab}} for each eCryptfs directory so users can mount them.\n\nFirst create your private directories. In this example, we use the same ones as the previous section:\n\n $ mkdir -m 700 ~/.secret\n $ mkdir -m 500 ~/secret\n\nTo summarize:\n\n* Actual encrypted data will be stored in the lower {{ic|~/.secret/}} directory\n* While mounted, decrypted data will be available in {{ic|~/secret/}} directory\n** While not mounted nothing can be written to this directory\n** While mounted it has the same permissions as the lower directory\n\nNow, supposed you have created the [[#Manual setup|wrapped keyphrase]] above, you need to insert the encryption key once to the root user's keyring:\n\n # ( stty -echo; printf \"Passphrase: \" 1>&2; read PASSWORD; stty echo; echo $PASSWORD; ) | ecryptfs-insert-wrapped-passphrase-into-keyring /home/''username''/.ecryptfs/wrapped-passphrase -\n Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring\n\nso that the following mount command succeeds:\n\n # mount '''-i''' -t ecryptfs /home/''username''/.secret /home/''username''/secret -o ecryptfs_sig=7c5d3dd8a1b49db0,ecryptfs_fnek_sig=7c5d3dd8a1b49db0,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_unlink_sigs\n\n{{Note|1=As of 2022, this command does not work because of a bug in systemd (see {{Bug|55943}}). A [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=870126#10 workaround] is to run {{ic|keyctl link @u @s}} before mounting.}}\n\n* {{ic|ecryptfs_sig}} sets the data passphrase key signature.\n* {{ic|ecryptfs_fnek_sig}} sets the filename passphrase key signature; you can omit this option if you do not want to encrypt filenames.\n* {{ic|ecryptfs_key_bytes}} can be 16, 24, or 32 to change the encryption key size.\n* {{ic|ecryptfs_unlink_sigs}} will remove the passphrase(s) from the keyring when you unmount, so you have to add the passphrase(s) back again in order to re-mount the filesystem.\n* There are a few other options listed in {{man|7|ecryptfs|OPTIONS}}.\n\n{{Tip|There is a {{ic|mount.ecryptfs}} tool, which you can run as root to enter the mount settings interactively. Once you have used it to mount eCryptfs, you can check {{ic|/etc/mtab}} to find out what options it used.}}\n\nOnce you have chosen the right mount options, you can add an entry to {{ic|/etc/fstab}} so regular users can mount eCryptfs on these directories. Copy the mount options to a new {{ic|/etc/fstab}} entry and add the options {{ic|user}} and {{ic|noauto}}. The full entry will look similar to (bold entries added):\n\n{{hc|/etc/fstab|2=\n/home/''username''/.secret /home/''username''/secret ecryptfs '''noauto''','''user''',ecryptfs_sig=7c5d3dd8a1b49db0,ecryptfs_fnek_sig=7c5d3dd8a1b49db0,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_unlink_sigs '''0 0'''\n}}\n\n* The {{ic|noauto}} option is important, because otherwise systemd will error trying to mount the entry directly on boot.\n* The {{ic|user}} option enables to mount the directory as a user.\n** The user mount will default to option {{ic|noexec}}. If you want to have at least executable files in your private directory, you can add {{ic|exec}} to the fstab options.\n\nThe setup is now complete and the directory should be mountable by the user.\n\n===== Mounting =====\n\nTo mount the encrypted directory as the user, the passphrase must be unwrapped and made available in the user's keyring. Following above section example:\n\n $ ecryptfs-insert-wrapped-passphrase-into-keyring ~/.ecryptfs/wrapped-passphrase\n Passphrase:\n Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring\n\nNow the directory can be mounted without the mount helper questions:\n\n $ mount '''-i''' ~/secret\n\nand files be placed into the {{ic|secret}} directory. The above two steps are necessary every time to mount the directory manually.\n\nTo unmount it again:\n\n $ umount ~/secret\n\nTo finalize, the preliminary passphrase to wrap the encryption passphrase may be changed:\n\n $ ecryptfs-rewrap-passphrase ~/.ecryptfs/wrapped-passphrase\n Old wrapping passphrase:\n New wrapping passphrase:\n New wrapping passphrase (again):\n\nThe unmounting should also clear the keyring, to check the user's keyring or clear it manually:\n\n $ keyctl list @u\n $ keyctl clear @u\n\n{{Note|One should remember that {{ic|/etc/fstab}} is for system-wide partitions only and should not generally be used for user-specific mounts.}}\n\n===== Auto-mounting =====\n\nDifferent methods can be employed to automount the previously defined user-mount in {{ic|/etc/fstab}} on login. As a first general step, follow point (1) and (2) of [[#Auto-mounting]].\n\nThen, if you login via console, a simple way is to specify the [[#Mounting_2|user-interactive]] ''mount'' and ''umount'' in the user's shell configuration files, for example [[Bash#Configuration files]].\n\n{{Accuracy|<br>- the section should be more generic than it is now<br>\n- the described method does not work for users, for encountered problems:|section=Automounting}}\n\nAnother method is to automount the eCryptfs directory on user login using [[pam_mount]]. To configure this method, add the following lines to {{ic|/etc/security/pam_mount.conf.xml}}:\n\n <luserconf name=\".pam_mount.conf.xml\" />\n <mntoptions require=\"\" /> <!-- Default required mount options are ; this clears them -->\n <lclmount>mount -i %(VOLUME) \"%(before=\\\"-o\\\" OPTIONS)\"</lclmount> <!--  -->\n\nPlease prefer writing manually these lines instead of simply copy/pasting them (especially the lclmount line). Otherwise, you might get some corrupted characters.\nExplanation:\n\n* the first line indicates where the user-based configuration file is located (here {{ic|~/.pam_mount.conf.xml}})\n* the second line overwrites the default required mount options which are unnecessary (\"nosuid,nodev\")\n* the last line indicates which mount command to run (eCryptfs needs the {{Ic|-i}} switch).\n\nThen set the volume definition, preferably to {{ic|~/.pam_mount.conf.xml}}:\n\n <pam_mount>\n     <volume noroot=\"1\" fstype=\"ecryptfs\" path=\"/home/''username''/.secret/\" mountpoint=\"/home/''username''/secret/\" />\n </pam_mount>\n\n\"noroot\" is needed because the encryption key will be added to the user's keyring.\n\nFinally, edit {{ic|/etc/pam.d/system-login}} as described in the [[pam_mount]] article.\n\n====== Optional step ======\n\nTo avoid needlessly wasting time unwrapping the passphrase, you can create a script that will check ''pmvarrun'' to see the number of open sessions:\n\n{{hc|/usr/local/bin/doecryptfs|2=\n#!/bin/sh\nexit $(/usr/sbin/pmvarrun -u$PAM_USER -o0)\n}}\n\nWith the following line added before the eCryptfs unwrap module in your PAM stack:\n\n auth    [success=ignore default=1]    pam_exec.so     quiet /usr/local/bin/doecryptfs\n auth    required                      pam_ecryptfs.so unwrap\n\nThe article suggests adding these to {{ic|/etc/pam.d/login}}, but the changes will need to be added to all other places you login, such as {{ic|/etc/pam.d/kde}}.\n\n== Usage ==\n\n{{Expansion|Content that still may to be covered:\n- point to the above \"Setup & Mounting\" section for how to mount and unmount [this section here will cover all other (i.e. setup-independent) usage info]<br>\n- reference ecryptfs tools not used/mentioned in the prior sections (e.g. with a short link to the online manpages and mention of the other tools usage, as it seems useful (not covered yet are, e.g. ecryptfs-stat, ecryptfs-find, ecryptfs-rewrite-file.) <br>\n- mention the options to share an encrypted folder between users and to place non-encrypted files or folders in the encrypted container (\"pass-through\")\n(references for the points: [https://wiki.archlinux.org/index.php?title&61;Talk:ECryptfs&oldid&61;347981] and (maybe) [https://wiki.archlinux.org/index.php?title&61;ECryptfs&oldid&61;291214])\n|section=Major_restructuring/rewrite}}\n\n=== Symlinking into the encrypted directory ===\n\nBesides using your private directory as storage for sensitive files, and private data, you can also use it to protect application data. [[Firefox]] for example has an internal password manager, but the browsing history and cache can also be sensitive. Protecting it is easy:\n\n $ mv ~/.mozilla ~/Private/mozilla\n $ ln -s ~/Private/mozilla ~/.mozilla\n\n=== Removal of encryption ===\n\nThere are no special steps involved, if you want to remove your private directory. Make sure it is un-mounted and delete the respective lower directory (e.g. {{ic|~/.Private/}}), along with all the encrypted files. After also removing the related encryption signatures and configuration in {{ic|~/.ecryptfs/}}, all is gone.\n\nIf you were using the [[#Ubuntu tools]] to setup a single directory encryption, you can directly follow the steps detailed by:\n\n $ ecryptfs-setup-private --undo\n\nand follow the instructions.\n\n=== Backup ===\n\nIf you want to move a file out of the private directory just move it to the new destination while {{ic|~/Private/}} is mounted.\n\nWith eCryptfs the cryptographic metadata is stored in the header of the files. Setup variants explained in this article separate the directory with encrypted data from the mount point. The unencrypted mount point is fully transparent and available for a backup. Obviously this has to be considered for automated backups, if one has to avoid leaking sensitive unencrypted data into a backup.\n\nYou can do backups, or incremental backups, of the encrypted (e.g. {{ic|~/.Private/}}) directory, treating it like any other directory.\n\nFurther points to note:\n\n* If you used the Ubuntu tools for [[#Encrypting a home directory]], be aware the location of the lower directory with the encrypted files is ''outside'' the regular user's {{ic|$HOME}} at {{ic|/home/.ecryptfs/''username''/.Private/}}.\n* It should be ensured to include the eCryptfs setup files (located in {{ic|~/.ecryptfs/}} usually) into the regular or a separate backup.\n* If you use special filesystem mount options, for example {{ic|ecryptfs_xattr}}, do extra checks on restore integrity.\n\n== Known issues ==\n\n=== Mounting may fail on a remote host when connecting via Mosh ===\n\nThis is a [https://github.com/mobile-shell/mosh/issues/529 known issue] of [https://mosh.org/ Mosh] server, which does not keep the eCryptfs {{ic|/home}} directory mounted.\n\n== See also ==\n\n* [https://ecryptfs.org/documentation.html eCryptfs] - Manpages and project home\n* [https://defuse.ca/audits/ecryptfs.htm Security audit] of eCryptfs by Taylor Hornby (January 22, 2014).\n* [https://sysphere.org/~anrxc/j/articles/ecryptfs/index.html eCryptfs and $HOME] by Adrian C. (anrxc) - Article with installation instructions and discussion of eCryptfs usage\n* [https://www.chromium.org/chromium-os/chromiumos-design-docs/protecting-cached-user-data Chromium data protection] (November 2009) - Design document detailing encryption options for Chromium OS, including explanation on its eCryptfs usage\n* [http://ecryptfs.sourceforge.net/ecryptfs.pdf eCryptfs design] by Michael Halcrow (May 2005) - Original design document detailing and discussing eCryptfs"
                    }
                ]
            },
            "7187": {
                "pageid": 7187,
                "ns": 0,
                "title": "Firefox/Profile on RAM",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Web browser]]\n[[de:Firefox-Profile in Ramdisk auslagern]]\n[[ja:Firefox/\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092 RAM \u306b\u7f6e\u304f]]\n[[ru:Firefox (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)/Profile on RAM]]\nAssuming that there is memory to spare, placing [[Firefox]]'s cache or complete profile to RAM offers significant advantages. Even though opting for the partial route is an improvement by itself, the latter can make Firefox even more responsive compared to its stock configuration. Benefits include, among others:\n\n* reduced drive read/writes;\n* heightened responsive feel;\n* many operations within Firefox, such as quick search and history queries, are nearly instantaneous.\n\nTo do so we can make use of a [[tmpfs]].\n\nBecause data placed therein cannot survive a shutdown, a script responsible for syncing back to drive prior to system shutdown is necessary if persistence is desired (which is likely in the case of profile relocation). On the other hand, only relocating the cache is a quick, less inclusive solution that will slightly speed up user experience while emptying Firefox cache on every reboot.\n\n{{Note|Cache is stored '''separately''' from Firefox default profiles' folder ({{ic|/home/$USER/.mozilla/firefox/}}): it is found by default in {{ic|/home/$USER/.cache/mozilla/firefox/<profile>}}. This is similar to what Chromium and other browsers do. Therefore, sections [[#Place profile in RAM using tools]] and [[#Place profile in RAM manually]] '''do not deal''' with cache relocating and syncing but only with profile adjustments. See the first note of [[Profile-sync-daemon]] for more details. [[Anything-sync-daemon]] may be used to achieve the same thing as Option 2 for cache folders.}}\n\n== Relocate cache to RAM only ==\n\nSee [[Firefox/Tweaks#Turn off the disk cache]].\n\n== Place profile in RAM using tools ==\n\nRelocate the browser profile to [[tmpfs]] so as to globally improve browser's responsiveness. Another benefit is a reduction in drive I/O operations, of which [[Improving performance#Show disk writes|SSDs benefit the most]].\n\nUse an active management script for maximal reliability and ease of use. Several are available from the AUR.\n\n=== Profile-sync-daemon ===\n\nSee the [[Profile-sync-daemon]] page for additional info on it.\n\n=== firefox-sync ===\n\n{{AUR|firefox-sync}} is sufficient for a user with a single profile; uses a script and systemd service similar to [[#The script]].\n\nIdentify and backup your current Firefox profile as [[#Before you start]] suggests.\n\nUse a [[drop-in snippet]] to pass the profile as an argument with {{ic|-p ''profile_id''.default}}.\n\n{{Warning|This will possibly delete the profile, be ready to restore from a backup as soon as you start the service.}} \n\nThen [[start/enable]] the {{ic|firefox-sync.service}} [[user unit]].\n\n== Place profile in RAM manually ==\n\n=== Before you start ===\n\nBefore potentially compromising Firefox's profile, be sure to make a backup for quick restoration. First, find out the active profile name by visiting {{ic|about:profiles}} and checking which profile is in use. Replace '''{{ic|xyz.default}}''' as appropriate and use {{ic|tar}} to make a backup:\n\n $ tar zcvfp ~/firefox_profile_backup.tar.gz ~/.mozilla/firefox/'''xyz.default'''\n\n=== The script ===\n\n<small>''Adapted from [https://www.verot.net/firefox_tmpfs.htm verot.net's Speed up Firefox with tmpfs]''</small>\n\nThe script will first move Firefox's profile to a new static location, make a sub-directory in {{ic|/dev/shm}}, softlink to it and later populate it with the contents of the profile. As before, and until the end of this article, replace the bold '''{{ic|xyz.default}}''' strings with the name of your your Firefox profile folder. The only value that absolutely needs to be altered is, again, '''{{ic|xyz.default}}'''.\n\nBe sure that [[rsync]] is installed, [[create]]:\n\n{{hc|~/.local/bin/firefox-sync.sh|2=\n#!/bin/sh\n\nstatic=''static-$1''\nlink=''$1''\nvolatile=''/dev/shm/firefox-$1-$USER''\n\nIFS=\nset -efu\n\ncd ~/.mozilla/firefox\n\nif [ ! -r $volatile ]; then\n\tmkdir -m0700 $volatile\nfi\n\nif [ \"$(readlink $link)\" != \"$volatile\" ]; then\n\tmv $link $static\n\tln -s $volatile $link\nfi\n\nif [ -e $link/.unpacked ]; then\n\trsync -av --delete --exclude .unpacked ./$link/ ./$static/\nelse\n\trsync -av ./$static/ ./$link/\n\ttouch $link/.unpacked\nfi\n}}\n\nMake the script [[executable]], then run the following to close Firefox and test it:\n\n $ killall firefox firefox-bin\n $ ls ~/.mozilla/firefox/\n $ ~/.local/bin/firefox-sync.sh '''xyz.default'''\n\nRun Firefox again to gauge the results. The second time the script runs, it will then preserve the RAM profile by copying it back to disk.\n\n=== Automation ===\n\nSeeing that forgetting to sync the profile can lead to disastrous results, automating the process seems like a logical course of action.\n\n==== systemd ====\n\n[[Create]] the following script:\n\n{{hc|~/.config/systemd/user/firefox-profile@.service|2=\n[Unit]\nDescription=Firefox profile memory cache\n\n[Install]\nWantedBy=default.target\n\n[Service]\nType=oneshot\nRemainAfterExit=yes\nExecStart=%h/.local/bin/firefox-sync.sh %i\nExecStop=%h/.local/bin/firefox-sync.sh %i\n}}\n\nthen, do a [[daemon-reload]] and [[enable/start]] the {{ic|firefox-profile@'''xyz.default'''.service}} [[user unit]].\n\n==== cron job ====\n\nManipulate the user's [[cron]] table using {{ic|crontab}}:\n\n $ crontab -e\n\nAdd a line to start the script every 30 minutes,\n\n */30 * * * * ~/.local/bin/firefox-sync.sh '''xyz.default'''\n\nor add the following to do so every 2 hours:\n\n 0 */2 * * * ~/.local/bin/firefox-sync.sh '''xyz.default'''\n\n==== Sync at login/logout ====\n\nAssuming [[bash]] is being used, add the script to the login/logout files:\n\n $ echo 'bash -c \"~/.local/bin/firefox-sync.sh '''xyz.default''' > /dev/null &\"' | tee -a ~/.bash_logout ~/.bash_login\n\n{{Note|You may wish to use {{ic|~/.bash_profile}} instead of {{ic|~/.bash_login}} as bash will only read the first of these if both exist and are readable.}}\n\nFor [[zsh]], use {{ic|~/.zlogin}} and {{ic|~/.zlogout}} instead:\n\n $ echo 'bash -c \"~/.local/bin/firefox-sync.sh '''xyz.default''' > /dev/null &\"' | tee -a ~/.zlog{in,out}\n\n== See also ==\n\n* [[tmpfs]]"
                    }
                ]
            },
            "7966": {
                "pageid": 7966,
                "ns": 0,
                "title": "Man page",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "{{Lowercase title}}\n[[Category:Command-line]]\n[[de:Manpages]]\n[[es:Man page]]\n[[id:Man page]]\n[[ja:Man \u30da\u30fc\u30b8]]\n[[pt:Man page]]\n[[ru:Man page]]\n[[zh-hans:Man page]]\n{{Related articles start}}\n{{Related|Color output in console#man}}\n{{Related articles end}}\n[[Wikipedia:Man_page|man pages]]\u2014abbreviation for \"manual pages\"\u2014are the form of documentation that is available on almost all UNIX-like operating systems, including Arch Linux. The command used to display them is {{Ic|man}}.\n\nIn spite of their scope, man pages are designed to be self-contained documents, consequentially limiting themselves to referring to other man pages when discussing related subjects. This is in sharp contrast with the hyperlink-aware [[info manual|Info documents]], GNU's attempt at replacing the traditional man page format.\n\n== Installation ==\n\n{{Pkg|man-db}} implements ''man'' on Arch Linux, and [[less]] is the default pager used with ''man''. {{Pkg|mandoc}} can also be used.\n\n{{Pkg|man-pages}} provides both the Linux and the POSIX.1 man pages [https://gitlab.archlinux.org/archlinux/packaging/packages/man-pages/-/blob/main/PKGBUILD#L13-14].\n\nSome localized man pages are also available:\n\n* {{Pkg|man-pages-cs}} for Czech\n* {{Pkg|man-pages-da}} for Danish\n* {{Pkg|man-pages-de}} for German\n* {{Pkg|man-pages-el}} for Greek\n* {{Pkg|man-pages-es}} for Spanish\n* {{Pkg|man-pages-fi}} for Finnish\n* {{Pkg|man-pages-fr}} for French\n* {{Pkg|man-pages-hu}} for Hungarian\n* {{Pkg|man-pages-id}} for Indonesian\n* {{Pkg|man-pages-it}} for Italian\n* {{AUR|man-pages-ja}} for Japanese\n* {{Pkg|man-pages-mk}} for Macedonian\n* {{Pkg|man-pages-nl}} for Dutch\n* {{Pkg|man-pages-pl}} for Polish\n* {{Pkg|man-pages-pt_br}} for Brazilian Portuguese\n* {{Pkg|man-pages-ro}} for Romanian\n* {{Pkg|man-pages-ru}} for Russian\n* {{Pkg|man-pages-sr}} for Serbian\n* {{Pkg|man-pages-sv}} for Swedish\n* {{AUR|man-pages-tr}} for Turkish\n* {{Pkg|man-pages-uk}} for Ukranian\n* {{Pkg|man-pages-vi}} for Vietnamese\n* {{Pkg|man-pages-zh_cn}} for Simplified Chinese\n* {{Pkg|man-pages-zh_tw}} for Traditional Chinese\n\nYou can also search for all of the available localized man pages [https://archlinux.org/packages/?sort=&q=man-pages- on the official repositories] and [https://aur.archlinux.org/packages?K=man-pages- on the AUR].\n\nYou can use some applications to view man pages:\n\n* {{App|GNOME Help|Help viewer for [[GNOME]]. Part of {{Grp|gnome}}. It can show man pages via {{ic|yelp man:<name>}} or the undocumented {{ic|Ctrl+L}} keybinding from an existing window.|https://wiki.gnome.org/Apps/Yelp|{{Pkg|yelp}}}}\n* {{App|KHelpCenter|Application to show [[KDE]] Applications' documentation. Man pages are in ''UNIX manual pages'' or by running {{ic|khelpcenter man:<name>}}.|https://userbase.kde.org/KHelpCenter|{{Pkg|khelpcenter}}}}\n* {{App|[[Wikipedia:Konqueror|Konqueror]]|KDE file manager and web browser. It can show man pages via {{ic|man:<name>}}.|https://konqueror.org/|{{Pkg|konqueror}}}}\n* {{App|xman|Provides a categorized look at man pages.|https://xorg.freedesktop.org/|{{pkg|xorg-xman}}}}\n* {{App|[[neovim]]|The editor can be used to read man pages using the built-in {{ic|:Man ''name''}} command, or configured as a man pager with {{ic|export MANPAGER{{=}}'nvim +Man!'}}. Supports highlighting and navigation between command-line flags, keywords, and other man pages. Automatically generates an outline using section headers, command-line flags, and keywords as entries (available via {{ic|gO}}).|https://neovim.io/|{{Pkg|neovim}}}}\n* {{App|[[Emacs]]| The extensible and self-documenting editor can also be used to read man pages with the built-in M-x {{ic|man}} command.|https://www.gnu.org/software/emacs/|{{Pkg|emacs}}}}\n\n== Accessing man pages ==\n\nTo read a man page, simply enter:\n\n $ man ''page_name''\n\nManuals are sorted into several [[Wikipedia:Man page#Manual sections|sections]]. Each section has an intro, such as {{man|1|intro}}, {{man|2|intro}} and so on. For a full listing see {{man|7|man-pages|Sections of the manual pages}}.\n\nMan pages are usually referred to by their name, followed by their section number in parentheses. Often there are multiple man pages of the same name, such as {{man|1|man}} and {{man|7|man}}. In this case, give man the section number followed by the name of the man page, for example:\n\n $ man 5 passwd\n\nto read the man page on {{Ic|/etc/passwd}}, rather than the {{Ic|passwd}} utility.\n\nOr equivalently, the man page followed by the section number, separated by a period:\n\n $ man passwd.5\n\n== Searching manuals ==\n\nMan pages can be searched when the exact name of a page is not known using any of the following equivalent commands:\n\n $ man -k ''expression''\n $ man --apropos ''expression''\n $ apropos ''expression''\n\n{{ic|''expression''}} is interpreted as a regular expression by default.\n\nTo search for keywords in whole page texts, use the {{ic|-K}} option instead.\n\n{{Note|The search feature is provided by a dedicated cache. By default, maintenance of that cache is handled by {{ic|man-db.service}} which gets periodically triggered by {{ic|man-db.timer}}. If you are getting a \"nothing appropriate\" message for every search, try manually regenerating the cache by running {{ic|mandb}} as root.}}\n\nOne-line descriptions of man pages can be displayed using the {{ic|whatis}} command. For example, for a brief description of the man page sections about {{ic|ls}}, type:\n\n{{hc|$ whatis ls|\nls (1p)              - list directory contents\nls (1)               - list directory contents\n}}\n\n== Page width ==\n\nThe man page width is controlled by the {{Ic|MANWIDTH}} environment variable.\n\nIf the number of columns in the terminal is too small (e.g. the window width is narrow), the line breaks will be wrong. This can be very disturbing for reading. You can fix this by setting the MANWIDTH on {{Ic|man}} invocation. With {{Ic|Bash}}, that would be:\n\n{{Hc|~/.bashrc|<nowiki>\nman() {\n    local width=$(tput cols)\n    [ $width -gt $MANWIDTH ] && width=$MANWIDTH\n    env MANWIDTH=$width \\\n    man \"$@\"\n}\n</nowiki>}}\n\n== Reading local man pages ==\n\nUsing browsers such as {{Pkg|lynx}} and [[Firefox]] to view man pages allows users to reap info pages' main benefit of hyperlinked text. Alternatives include the following:\n\n=== Conversion to HTML ===\n\n==== mandoc ====\n\nInstall the {{Pkg|mandoc}} package. To convert a page, for example {{ic|free(1)}}:\n\n $ mandoc -Thtml -Ostyle=style.css /usr/share/man/man1/free.1.gz > free.html\n\nNow open the file called {{ic|free.html}} in your favourite browser.\n\n==== man2html ====\n\nFirst, install {{Pkg|man2html}} from the official repositories.\n\nNow, convert a man page:\n\n $ man free | man2html -compress -cgiurl man$section/$title.$section$subsection.html > ~/man/free.html\n\nAnother use for {{Ic|man2html}} is exporting to raw, printer-friendly text:\n\n $ man free | man2html -bare > ~/free.txt\n\n==== man -H ====\n\nThe {{Pkg|man-db}} implementation also has the ability to do this on its own:\n\n $ man -H free\n\nThis will read your {{ic|BROWSER}} [[environment variable]] to determine the browser. You can override this by passing the binary to the {{ic|-H}} option.\n\n==== roffit ====\n\nFirst install {{AUR|roffit}}.\n\nTo convert a man page:\n\n $ gunzip -c /usr/share/man/man1/free.1.gz | roffit > free.html\n\n=== Conversion to PDF ===\n\nman pages have always been printable: they are written in {{man|1|troff}}, which is fundamentally a typesetting language. Therefore, you can easily convert man pages to any of the formats supported as output devices by ''groff'', which is used by {{Pkg|man-db}}. For a list of output devices, see the {{ic|-T}} option in {{man|1|groff}} (or {{man|1|mandoc}} if you use the {{Pkg|mandoc}} package).\n\nThis will produce a PDF file:\n\n $ man -Tpdf ''manpage'' > ''filename''\n\nCaveats: Fonts are generally limited to Times at hardcoded sizes. Some man pages were specifically designed for terminal viewing, and will not look right in PS or PDF form.\n\n=== Qman ===\n\nFor an alternative interface for reading manual pages, that supports modern features such as hyperlinks and history, install {{AUR|qman}}{{Broken package link|package not found}}.\n\n==== Configuration (optional) ====\n\n''Qman'''s configuration file is located at {{ic|~/.config/qman.conf}}(user-specific) or {{ic|/etc/xdg/qman.conf}} (system-wide).\n\nIf you are using a modern terminal that supports 256 colors and Unicode, you may want to paste  [https://github.com/plp13/qman/blob/main/config/modernity.conf this code] into your configuration file, to give the software a more modern look. This breaks Linux console support, however.\n\nBy default ''Qman'' opens hyperlinks and e-mail links using {{ic|xdg-open}}. To override this, add the following to your configuration file:\n\n [misc]\n browser_path=/path/to/your/browser\n mailer_path=/path/to/your/email/client\n\nYou may also want to check out the project's [https://github.com/plp13/qman Github page].\n\n== Online man pages ==\n\nThere are several online databases of man pages, including:\n\n* [https://man.archlinux.org Arch manual pages]\u2014contains man pages from Arch Linux packages. Used for [[Template:man|man page links]] from the wiki. You can also use the {{ic|!archman}} DuckDuckGo [https://duckduckgo.com/bang bang] to search through the Arch manual pages directly.\n* [https://man7.org/linux/man-pages/index.html man7.org]\u2014The Linux man-pages project. Upstream of the {{pkg|man-pages}} package. The online pages currently show an outdated version of man-pages ([https://man7.org/linux/man-pages/changelog.html 5.13], released in 2021).\n* [https://manned.org/ manned.org]\u2014collection from various Linux distributions, BSD, etc., with multiple package versions.\n* [https://linux.die.net/man/ linux.die.net]\n* [https://man.cx/ man.cx]\u2014Man pages extracted from Debian testing.\n* [https://manpages.debian.org/ Debian man pages]\n* [https://manpages.ubuntu.com/ Ubuntu man pages]\n* [https://leaf.dragonflybsd.org/cgi/web-man DragonFlyBSD man pages]\n* [https://www.freebsd.org/cgi/man.cgi FreeBSD man pages]\n* [https://man.netbsd.org/ NetBSD man pages]\n* [https://man.openbsd.org OpenBSD man pages]\n* [http://man.cat-v.org/plan_9/ Plan 9 Manual \u2014 Volume 1]\n* [http://man.cat-v.org/inferno/ Inferno Manual \u2014 Volume 1]\n* [https://www.unix.com/man-page-repository.php The UNIX and Linux forums man page repository]\n\nNote that while {{pkg|man-pages}} provides man pages for POSIX.1 (see [https://gitlab.archlinux.org/archlinux/packaging/packages/man-pages/-/blob/main/PKGBUILD#L13-14]), an official online reference also exists:\n\n* [https://pubs.opengroup.org/onlinepubs/9699919799/ POSIX.1-2017]\n\nThere is also a [https://gist.github.com/rixx/6cb5fa38f694009ad0bd50c275bb61f2 comparison table] of the online databases.\n\n{{Warning|Some distributions provide patched or outdated man pages that differ from those provided by Arch. Exercise caution when using online man pages.}}\n\n{{Tip|The online Arch manual pages can be rendered in the terminal using this command:\n{{ic|curl -sL <nowiki>'https://man.archlinux.org/man/clang.raw' | man -l -</nowiki>}}}}\n\n== Noteworthy man pages ==\n\nHere follows a non-exhaustive list of noteworthy pages that might help you understand a lot of things more in-depth. Some of them might serve as a good reference (like the ASCII table).\n\n* {{man|7|ascii}}\n* {{man|7|boot}}\n* {{man|7|charsets}}\n* {{man|1|chmod}}\n* {{man|7|credentials}}\n* {{man|5|fstab}}\n* {{man|7|file-hierarchy}}\n* {{man|1|systemd}}\n* {{man|1p|locale}}, {{man|5|locale}}, {{man|7|locale}}\n* {{man|3|printf}}\n* {{man|5|proc}}\n* {{man|7|regex}}\n* {{man|7|signal}}\n* {{man|5|term}}, {{man|7|term}}\n* {{man|5|termcap}}\n* {{man|5|terminfo}}\n* {{man|7|utf-8}}\n\nMore generally, have a look at [https://man7.org/linux/man-pages/dir_section_7.html category 7 (miscellaneous) pages]:\n\n $ man -s 7 -k \".*\" \n\nArch Linux specific pages:\n\n* {{man|5|alpm-hooks}}\n* {{man|3|libalpm}}\n* {{man|8|makepkg}}\n* {{man|5|makepkg.conf}}\n* {{man|1|makepkg-template}}\n* {{man|8|mkinitcpio}}\n* {{man|8|pacman}}\n* {{man|5|pacman.conf}}\n* {{man|8|pacman-conf}}\n* {{man|8|pacman-key}}\n\n{{Expansion|Add a section on writing man pages, including conversion tools like {{Pkg|pandoc-cli}}, {{Pkg|ruby-ronn-ng}}, {{Pkg|asciidoc}}, {{Pkg|help2man}}, {{Pkg|go-md2man}}, {{Pkg|txt2man}}, {{Pkg|scdoc}}, {{aur|info2man}}, {{aur|pod2man}}, {{aur|ruby-md2man}}, etc.}}\n\n== See also ==\n\n* [[Gentoo:man page]]\n* [https://linuxtidbits.wordpress.com/2013/08/21/wtfm-write-the-fine-manual-with-pod2man-text-converter/ Write The Fine Manual with pod2man]\n* [https://manpages.bsd.lv/history.html History of UNIX Manpages]"
                    }
                ]
            },
            "9002": {
                "pageid": 9002,
                "ns": 0,
                "title": "Chromium",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Web browser]]\n[[Category:Google]]\n[[de:Chromium]]\n[[ja:Chromium]]\n[[zh-hans:Chromium]]\n{{Related articles start}}\n{{Related|Browser extensions}}\n{{Related|Firefox}}\n{{Related|Vivaldi}}\n{{Related articles end}}\n\n[[Wikipedia:Chromium (web browser)|Chromium]] is an open-source graphical web browser based on the [[Wikipedia:Blink (web engine)|Blink]] rendering engine. It is the basis for the proprietary Google Chrome browser.\n\nSee [https://chromium.googlesource.com/chromium/src/+/master/docs/chromium_browser_vs_google_chrome.md this page] for an explanation of the differences between Chromium and Google Chrome. Additionally:\n\n* Sync is unavailable in Chromium 89+ (2021-03-02) [https://archlinux.org/news/chromium-losing-sync-support-in-early-march/]\n\n{{Note|Sync can be temporarily restored by [https://gist.github.com/foutrelis/14e339596b89813aa9c37fd1b4e5d9d5 using Chrome's OAuth2 credentials] or [https://www.chromium.org/developers/how-tos/api-keys getting your own], but pay attention to the disclaimers and do not consider this to be a long-term solution.\nConsider switching to [https://www.xbrowsersync.org xbrowsersync] for bookmarks syncing as long term solution.\n}}\n\nSee [[List of applications/Internet#Blink-based]] for other browsers based on Chromium.\n\n== Installation ==\n\nThere are several packages available to [[install]] Chromium with:\n\n* {{Pkg|chromium}} \u2014 stable release;\n* {{AUR|chromium-dev}} \u2014 development release;\n* {{AUR|chromium-snapshot-bin}} \u2014 nightly build.\n\nGoogle Chrome packages:\n\n* {{AUR|google-chrome}} \u2014 stable release;\n* {{AUR|google-chrome-beta}} \u2014 beta release;\n* {{AUR|google-chrome-dev}} \u2014 development release.\n\n{{Note|From the [https://www.chromium.org/Home/chromium-privacy Chromium privacy page]: \"Features that communicate with Google made available through the compilation of code in Chromium are subject to the [https://www.google.com/policies/privacy/ Google Privacy Policy].\" For those who want to avoid all integration with Google services, there are some [[List of applications/Internet#Privacy-focused chromium spin-offs|privacy-focused spin-offs]].}}\n\n== Configuration ==\n\n{{Merge|Chromium#Tips and tricks 2|Most of the content in this section should be split between [[Chromium#Tips and tricks 2]] and maybe [[Chromium#Troubleshooting]] for the applicable sections.}}\n\n=== Default applications ===\n\nTo set Chromium as the default browser and to change which applications Chromium launches when opening downloaded files, see [[default applications]].\n\n=== Certificates ===\n\nChromium uses [[Network Security Services]] for certificate management. Certificates can be managed in {{ic|chrome://settings/certificates}}.\n\n=== Making flags persistent ===\n\n{{Note|The {{ic|chromium-flags.conf}} file and the accompanying custom launcher script are specific to the various Chromium packages. For Google Chrome, use {{ic|chrome-flags.conf}} (or {{ic|chrome-''channel''-flags.conf}} for the Dev and Beta channels) instead.}}\n\nYou can put your flags in a {{ic|chromium-flags.conf}} file under {{ic|$HOME/.config/}} (or under {{ic|$XDG_CONFIG_HOME}} if you have configured that environment variable) or {{ic|/etc/}} for global.\n\nNo special syntax is used; flags are defined as if they were written in a terminal.\n\n* The arguments are split on whitespace and shell quoting rules apply, but no further parsing is performed.\n* In case of improper quoting anywhere in the file, a fatal error is raised.\n* Flags can be placed in separate lines for readability, but this is not required.\n* Lines starting with a hash symbol (#) are skipped. (This is only supported by the Chromium launcher script and will not work when using Google Chrome.)\n\nBelow is an example {{ic|chromium-flags.conf}} file that defines the flags {{ic|--start-maximized --incognito}}:\n\n{{hc|~/.config/chromium-flags.conf|\n# This line will be ignored.\n--start-maximized\n--incognito\n}}\n\n=== Force GPU acceleration ===\n\nSince at least Chromium 110, GPU acceleration is enabled by default for most systems. You may have to [[append]] the following flags to [[/Tips and tricks#Making flags persistent|persistent configuration]] if your system configuration is matched by the [https://chromium.googlesource.com/chromium/src/gpu/+/master/config/software_rendering_list.json block list]:\n\n{{Warning|Disabling the rendering blocklist may cause unstable behavior, including crashes of the host. See the bug reports in {{ic|chrome://gpu}} for details.}}\n\n{{hc|~/.config/chromium-flags.conf|\n--ignore-gpu-blocklist\n--enable-zero-copy\n}}\n\n=== Hardware video acceleration ===\n{{Note|1=<nowiki/>\n* There is no official support from Chromium or Arch Linux for this feature [https://chromium.googlesource.com/chromium/src/+/master/docs/gpu/vaapi.md#vaapi-on-linux]. However, {{Pkg|chromium}} from official repositories is compiled with VA-API support and you may ask for help in [https://bbs.archlinux.org/viewtopic.php?id=244031 the dedicated forum thread].\n* Since Chromium version 122, the {{AUR|chromium-wayland-vaapi}} package is no longer needed. VA-API works when using the native Wayland backend with the {{Pkg|chromium}} package from official repositories.\n* On AMD GPU devices, VA-API does not work according to [https://bugs.chromium.org/p/chromium/issues/detail?id=1445074&q=VAAPI&can=2 Chromium bug 1445074]. It's been [https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26165 fixed] in time for mesa 24.1, but it only works under X11/XWayland (flag {{ic|1=--ozone-platform-hint=x11}}) and it requires additional flags (check the merge request).\n}}\nIf you've confirmed working VA-API support by checking the output of {{ic|1=vainfo}} (see [[Hardware video acceleration#Verifying VA-API]]), you might first try the following flag alone:\n{{hc|~/.config/chromium-flags.conf|\n--enable-features{{=}}VaapiVideoDecodeLinuxGL\n}}\notherwise, continue reading.\n\nTo enable VA-API support in Chromium:\n\n* Install the correct VA-API driver for your video card and verify VA-API has been enabled and working correctly, see [[Hardware video acceleration]]. For proprietary NVIDIA support, installing {{AUR|libva-vdpau-driver-chromium}}{{Broken package link|package not found}} or {{AUR|libva-vdpau-driver-vp9-git}} is required.\n* Set the option {{ic|1=--enable-features=VaapiVideoDecoder}}. This is enough when using ANGLE GL renderer and {{Pkg|libva-intel-driver}}.\n* When using ANGLE, Chromium forces the older i965 driver and fails when {{Pkg|intel-media-driver}} is used. As a workaround, [[Hardware video acceleration#Configuring VA-API|configure VA-API manually]]. See [https://github.com/intel/media-driver/issues/818] for details.\n* To use the system GL renderer on Xorg or Wayland, use {{ic|1=--use-gl=egl}}. Setting this option might no longer be needed when using Chrome 112 and may break GPU acceleration when using AMD GPUs.\n* If VA-API still does not work, try the {{ic|1=--enable-features=VaapiIgnoreDriverChecks}} or{{ic|1=--disable-features=UseChromeOSDirectVideoDecoder}} flag\n* If VA-API still does not work on X11 and old GPUs, set the {{ic|1=LIBVA_DRI3_DISABLE=1}} [[environment variable]] [https://www.phoronix.com/news/VA-API-libva-2.18].\n\n==== Tips and tricks ====\n\nTo check if it is working play a video which is using a codec supported by your VA-API driver (''vainfo'' tells you which codecs are supported, but Chromium will only support VP9 and h264):\n\n* Open the DevTools by pressing {{ic|Ctrl+Shift+I}} or on the ''Inspect'' button of the context (right-click) menu\n* Add the Media inspection tab: ''Hamburger menu > More tools > Media''\n* In the newly opened Media tab, look at the hardware decoder state of the video decoder\n\nTest on a large enough video. Starting with version 86, Chromium on desktop [https://bugs.chromium.org/p/chromium/issues/detail?id=684792 will only accelerate videos larger than 720p].\n\nTo reduce CPU usage while watching YouTube where VP8/VP9 hardware decoding is not available use the [https://chrome.google.com/webstore/detail/h264ify/aleakchihdccplidncghkekgioiakgal h264ify], [https://chrome.google.com/webstore/detail/enhanced-h264ify/omkfmpieigblcllmkgbflkikinpkodlk enhanced-h264ify] or [https://chrome.google.com/webstore/detail/not-yet-av1/dcmllfkiihingappljlkffafnlhdpbai Not yet, AV1][https://bbs.archlinux.org/viewtopic.php?pid=2039884#p2039884] extension.\n\nOn some systems (especially on Xwayland) you might need to [[#Force GPU acceleration]]. Only {{ic|--ignore-gpu-blocklist}} is enough for our purposes.\n\n{{Expansion|Provide a link to some bug report.}}\n\nYou might need to disable the Skia renderer, as it is currently not compatible with video decode acceleration: {{ic|1=--disable-features=UseSkiaRenderer}}\n\n=== KDE integration ===\n\nFor integration into [[Plasma]] install {{Pkg|plasma-browser-integration}}. See [https://community.kde.org/Plasma/Browser_Integration KDE Plasma Browser Integration] for more details.\n\n=== PDF viewer plugin ===\n\nChromium and Google Chrome are bundled with the ''Chromium PDF Viewer'' plugin. If you do not want to use this plugin, check ''Download PDFs'' in {{ic|chrome://settings/content/pdfDocuments}}.\n\n=== Running on Xwayland ===\n\nIf you are using NVIDIA's proprietary driver, running Chromium on Xwayland may cause the GPU process to occasionally crash. To prevent the GPU process from crashing, add the following flags:\n\n --use-angle=vulkan --use-cmd-decoder=passthrough\n\n{{Note|This does not prevent all Xwayland-related crashes.}}\n\n=== Native Wayland support ===\n\nSince version 97, native [[Wayland]] support in Chromium can be enabled with the following flags [https://chromium.googlesource.com/chromium/src/+/43cfb2f92a5cdc1a787d7326e74676884abf5052]:\n\n --ozone-platform-hint=auto\n\nIf this doesn't work, e.g. on version 106 under [[Weston]], then use:\n\n --ozone-platform=wayland\n\nSee [[#Making flags persistent]] for a permanent configuration. The flag is also available via [[#chrome:// URLs|browser flags menu]].\n\nThis will select wayland Ozone backend when in wayland session, so you can use a single desktop entry if you switch between X11 and Wayland often.\n\n{{Note|When changing the \"ozone-platform-hint\" in browser flags menu, the browser will provide you a relaunch button. Do not use it, because the browser will still be relaunched in a platform it was before changing the flag. You need to close the browser, then open it.}}\n\nAdditionally, if you are having [https://bugs.chromium.org/p/chromium/issues/detail?id=1422087 trouble with input methods] you may also want to force newer GTK:\n\n --gtk-version=4\n\n==== Touchpad Gestures for Navigation ====\n\nTo enable two finger swipe to go back and forward through your history, use the following flags:\n\n --ozone-platform-hint=auto --enable-features=TouchpadOverscrollHistoryNavigation\n\n== Tips and tricks ==\n\nThe following tips and tricks should work for both Chromium and Chrome unless explicitly stated.\n\n=== Browsing experience ===\n\n==== chrome:// URLs ====\n\nA number of tweaks can be accessed via Chrome URLs. See '''chrome://chrome-urls''' for a complete list.\n\n* '''chrome://flags''' - access experimental features such as WebGL and rendering webpages with GPU, etc.\n* '''chrome://extensions''' - view, enable and disable the currently used Chromium extensions.\n* '''chrome://gpu''' - status of different GPU options.\n* '''chrome://sandbox''' - indicate sandbox status.\n* '''chrome://version''' - display version and switches used to invoke the active {{ic|/usr/bin/chromium}}.\n\nAn automatically updated, complete listing of Chromium switches (command line parameters) is available [https://peter.sh/experiments/chromium-command-line-switches/ here].\n\n==== Chromium task manager ====\n\nShift+ESC can be used to bring up the browser task manager wherein memory, CPU, and network usage can be viewed.\n\n==== Chromium overrides/overwrites Preferences file ====\n\nIf you enabled syncing with a Google Account, then Chromium will override any direct edits to the Preferences file found under {{ic|~/.config/chromium/Default/Preferences}}. To work around this, start Chromium with the {{ic|--disable-sync-preferences}} switch:\n $ chromium --disable-sync-preferences\n\nIf Chromium is started in the background when you login in to your desktop environment, make sure the command your desktop environment uses is:\n $ chromium --disable-sync-preferences --no-startup-window\n\n==== Search engines ====\n\nMake sites like [https://wiki.archlinux.org wiki.archlinux.org] and [https://en.wikipedia.org wikipedia.org] easily searchable by first executing a search on those pages, then going to ''Settings > Search'' and click the ''Manage search engines..'' button. From there, \"Edit\" the Wikipedia entry and change its keyword to '''w''' (or some other shortcut you prefer). Now searching Wikipedia for \"Arch Linux\" from the address bar is done simply by entering \"'''w arch linux'''\".\n\n{{Note| Google search is used automatically when typing something into the URL bar. A hard-coded keyword trigger is also available using the '''?''' prefix.}}\n\n==== Tmpfs ====\n\n===== Cache in tmpfs =====\n\n{{Note|Chromium stores its cache separate from its browser profile directory.}}\n\nTo limit Chromium from writing its cache to a physical disk, one can define an alternative location via the {{ic|--disk-cache-dir}} flag:\n\n $ chromium --disk-cache-dir=\"$XDG_RUNTIME_DIR/chromium-cache\"\n\nCache should be considered temporary and will '''not''' be saved after a reboot or hard lock. Another option is to setup the space in {{ic|/etc/fstab}}:\n\n{{hc|/etc/fstab|2=\ntmpfs\t/home/''username''/.cache\ttmpfs\tnoatime,nodev,nosuid,size=400M\t0\t0\n}}\n\nAlternatively create a symbolic link to {{ic|/tmp}}. Make sure to delete Chromium's cache folder before you run the command: \n\n $ ln -s /tmp /home/''username''/.cache/chromium\n\n===== Profile in tmpfs =====\n\nRelocate the browser profile to a [[Wikipedia:Tmpfs|tmpfs]] filesystem, including {{ic|/tmp}}, or {{ic|/dev/shm}} for improvements in application response as the entire profile is now stored in RAM.\n\nUse an active profile management tool such as {{Pkg|profile-sync-daemon}} for maximal reliability and ease of use. It symlinks or bind mounts and syncs the browser profile directories to RAM. For more, see [[Profile-sync-daemon]].\n\n==== Launch a new browser instance ====\n\nWhen you launch the browser, it first checks if another instance using the same data directory is already running. If there is one, the new window is associated with the old instance. If you want to launch an independent instance of the browser, you must specify separate directory using the {{ic|--user-data-dir}} parameter:\n\n $ chromium --user-data-dir=''/path/to/some/directory''\n\n{{Note|The default location of the user data is {{ic|~/.config/chromium/}}.}}\n\n==== Directly open *.torrent files and magnet links with a torrent client ====\n\nBy default, Chromium downloads {{ic|*.torrent}} files directly and you need to click the notification from the bottom-left corner of the screen in order for the file to be opened with your default torrent client. This can be avoided with the following method:\n\n* Download a {{ic|*.torrent}} file.\n* Right-click the notification displayed at the bottom-left corner of the screen.\n* Check the \"''Always Open Files of This Type''\" checkbox.\n\nSee [[xdg-open]] to change the default assocation.\n\n==== Touch Scrolling on touchscreen devices ====\n\nYou may need to specify which touch device to use. Find your touchscreen device with {{ic| xinput list}} then launch Chromium with the {{ic|1=--touch-devices='''x'''}} parameter, where \"'''x'''\" is the id of your device. {{Note|If the device is designated as a slave pointer, using this may not work, use the master pointer's ID instead.}}\n\n==== Reduce memory usage ====\n\nBy default, Chromium uses a separate OS process for each ''instance'' of a visited web site. [https://www.chromium.org/developers/design-documents/process-models#Supported_Models] However, you can specify command-line switches when starting Chromium to modify this behaviour.\n\nFor example, to share one process for all instances of a website:\n\n $ chromium --process-per-site\n\nTo use a single process model:\n\n $ chromium --single-process\n\n{{Warning|The single-process model is discouraged because it is unsafe and may contain bugs not present in other models.[https://www.chromium.org/developers/design-documents/process-models#TOC-Single-process]}}\n\nIn addition, you can suspend or store inactive Tabs with extensions such as [https://chrome.google.com/webstore/detail/tab-suspender/fiabciakcmgepblmdkmemdbbkilneeeh?hl=en Tab Suspender] and [https://chrome.google.com/webstore/detail/onetab/chphlpgkkbolifaimnlloiipkdnihall?hl=en OneTab].\n\n==== User Agent ====\n\nThe User Agent can be arbitrarily modified at the start of Chromium's base instance via its {{Ic|<nowiki>--user-agent=\"[string]\"</nowiki>}} parameter.\n\n==== DOM Distiller ====\n\nChromium has a similar reader mode to Firefox. In this case it is called DOM Distiller, which is an [https://github.com/chromium/dom-distiller open source project].\nIt is disabled by default, but can be enabled using the {{Ic|chrome://flags/#enable-reader-mode}} flag, which you can also make [[#Making flags persistent|persistent]].\nNot only does DOM Distiller provide a better reading experience by distilling the content of the page, it also simplifies pages for print. Even though the latter checkbox option has been removed from the print dialog, you can still print the distilled page, which basically has the same effect.\n\nAfter enabling the flag, you will find a new \"Enter reader mode\" menu item and corresponding icon in the address bar when Chromium thinks the website you are visiting could do with some distilling.\n\n==== Forcing specific GPU ====\n\nIn multi-GPU systems, Chromium automatically detects which GPU should be used for rendering (discrete or integrated). This works 99% of the time, except when it does not - if an unavailable GPU is picked (for example, discrete graphics on VFIO GPU passthrough-enabled systems), {{ic|chrome://gpu}} will complain about not being able to initialize the GPU process. On the same page below '''Driver Information''' there will be multiple GPUs shown (GPU0, GPU1, ...). There is no way to switch between them in a user-friendly way, but you can read the device/vendor IDs present there and configure Chromium to use a specific GPU with flags:\n\n $ chromium --gpu-testing-vendor-id=0x8086 --gpu-testing-device-id=0x1912\n\n...where {{ic|0x8086}} and {{ic|0x1912}} is replaced by the IDs of the GPU you want to use (as shown on the {{ic|chrome://gpu}} page).\n\n==== Import bookmarks from Firefox ====\n\nTo ease the transition, you can import bookmarks from [[Firefox]] into Chromium.\n\nNavigate Chromium to {{ic|chrome://settings/importData}}\n\nIf Firefox is already installed on your computer, you can directly import bookmarks as well as many other things from Firefox.\n\nMake sure '''Mozilla Firefox''' is selected. Optionally, you can uncheck some unwanted items here. Click the '''Import''' and then '''Done'''. You are done with it.\n\n{{note|If you have not created any bookmarks in Chromium yet, the bookmarks will show up in your bookmarks bar. If you already have bookmarks, the bookmarks will be in a new folder labeled \"Imported From Firefox\"}}\n\nIf you import bookmarks from another PC, you have to export bookmarks from Firefox first.\n\n{{ic|Ctrl+Shift+o}} ''Import and Backup > Export Bookmarks To HTML'' in Firefox.\n\nThe procedure is pretty much the same. You need to go to {{ic|chrome://settings/importData}}. However, this time, in the '''From''' drop-down menu, select '''Bookmarks HTML File''' and click the '''Choose File''' button and upload the desired bookmark file.\n\n==== Enabling native notifications ====\n\nGo to {{ic|chrome://flags#enable-system-notifications}} and select ''Enabled''.\n\n==== U2F authentication ====\n\nInstall {{Pkg|libfido2}} library. This provides the udev rules required to enable access to the [[U2F]] key as a user.\nU2F keys are by default only accessible by root, and without these rules Chromium will give an error.\n\n==== Theming ====\n\nYou can make Chromium use your current GTK theme for browser menus and controls. Simply press ''Use GTK'' in {{ic|chrome://settings/appearance}}.\n\n==== Dark mode ====\n\nSince Chromium 114, [[XDG Desktop Portal]] is used to automatically determine the user's preferred appearance ([https://bugs.chromium.org/p/chromium/issues/detail?id=998903 issue]), thereby dissociating dark mode enablement from the user's GTK theme. This preference will be applied to ''prefers-color-scheme'' in CSS, JavaScript, Settings and Dev-Tools.\n\nThe way to change the preferred appearance depends on your XDG Desktop Portal backend. For instance, many desktop environments have a switch in their appearance settings. Or when using e.g. {{Pkg|xdg-desktop-portal-gtk}}, set the preferred mode to {{ic|prefer-light}}, {{ic|prefer-dark}} or {{ic|default}} with:\n\n $ dconf write /org/gnome/desktop/interface/color-scheme \\'prefer-dark\\'\n\nYou can query the current preferred appearance using {{ic|dbus-send}} in {{Pkg|dbus}} ([https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Settings documentation]):\n\n $ dbus-send --session --print-reply=literal --dest=org.freedesktop.portal.Desktop /org/freedesktop/portal/desktop org.freedesktop.portal.Settings.Read string:org.freedesktop.appearance string:color-scheme | tr -s ' ' | cut -d ' ' -f 5\n\n* '''0''': No preference\n* '''1''': Prefer dark appearance\n* '''2''': Prefer light appearance\n\n===== Pre Chromium 114 =====\n\nTo enable dark mode and enable the dark theme (normally used for incognito mode) [[append]] the following flag to [[#Making flags persistent|persistent configuration]]:\n\n{{hc|1=~/.config/chromium-flags.conf|2=\n--force-dark-mode\n--enable-features=WebUIDarkMode\n}}\n\n==== Enable Side Panel ====\n\nThe Side Panel can be enabled through {{ic|chrome://flags}}. You can enable or disable '''Side panel''', and change options such as '''Side panel border''' and '''Side panel drag and drop'''.\n\n=== Profile maintenance ===\n\nChromium uses [[SQLite]] databases to manage history and the like.  Sqlite databases become fragmented over time and empty spaces appear all around. But, since there are no managing processes checking and optimizing the database, these factors eventually result in a performance hit. A good way to improve startup and some other bookmarks- and history-related tasks is to defragment and trim unused space from these databases.\n\n{{Pkg|profile-cleaner}} and {{AUR|browser-vacuum}} do just this.\n\n=== Security ===\n\n==== Disable JIT ====\n\nAt the cost of reduced performance, you can disable just-in-time compilation of JavaScript to native code, which is responsible for [https://microsoftedge.github.io/edgevr/posts/Super-Duper-Secure-Mode/ roughly half of the security vulnerabilities in the JS engine], using the flag {{ic|1=--js-flags=--jitless}}.\n\n==== WebRTC ====\n\nWebRTC is a communication protocol that relies on JavaScript that can leak one's actual IP address and hardware hash from behind a VPN. While some software may prevent the leaking scripts from running, it is probably a good idea to block this protocol directly as well, just to be safe. As of October 2016, there is no way to disable WebRTC on Chromium on desktop, there are extensions available to disable local IP address leak, one is this [https://chrome.google.com/webstore/detail/webrtc-network-limiter/npeicpdbkakmehahjeeohfdhnlpdklia extension].\n\nOne can test WebRTC via https://browserleaks.com/webrtc.\n\n{{Warning|Even though IP leak can be prevented, Chromium still sends your unique hash, and there is no way to prevent this. Read more on https://www.browserleaks.com/webrtc#webrtc-disable}}\n\n==== SSL certificates ====\n\nChromium does not have an SSL certificate manager.  It relies on the NSS Shared DB {{ic|~/.pki/nssdb}}.  In order to add SSL certificates to the database, users will have to use the shell.\n\n===== Adding CAcert certificates for self-signed certificates =====\n\nGrab the CAcerts and create an {{ic|nssdb}}, if one does not already exist.  To do this, first install the {{Pkg|nss}} package, then complete these steps:\n\n $ mkdir -p $HOME/.pki/nssdb\n $ cd $HOME/.pki/nssdb\n $ certutil -N -d sql:.\n\n $ curl -k -o \"cacert-root.crt\" \"http://www.cacert.org/certs/root.crt\"\n $ curl -k -o \"cacert-class3.crt\" \"http://www.cacert.org/certs/class3.crt\"\n $ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n \"CAcert.org\" -i cacert-root.crt \n $ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n \"CAcert.org Class 3\" -i cacert-class3.crt\n\n{{Note|Users will need to create a password for the database, if it does not exist.}}\n\nNow users may manually import a self-signed certificate.\n\n===== Example 1: Using a shell script to isolate the certificate from TomatoUSB =====\n\nBelow is a simple script that will extract and add a certificate to the user's {{ic|nssdb}}:\n\n #!/bin/sh\n #\n # usage:  import-cert.sh remote.host.name [port]\n #\n REMHOST=$1\n REMPORT=${2:-443}\n exec 6>&1\n exec > $REMHOST\n echo | openssl s_client -connect ${REMHOST}:${REMPORT} 2>&1 |sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'\n certutil -d sql:$HOME/.pki/nssdb -A -t \"P,,\" -n \"$REMHOST\" -i $REMHOST \n exec 1>&6 6>&-\n\nSyntax is advertised in the commented lines.\n\nReferences:\n*https://web.archive.org/web/20180718193807/https://blog.avirtualhome.com/adding-ssl-certificates-to-google-chrome-linux-ubuntu\n*https://chromium.googlesource.com/chromium/src/+/master/docs/linux/cert_management.md\n\n===== Example 2: Using Firefox to isolate the certificate from TomatoUSB =====\n\nThe {{Pkg|firefox}} browser can be used to save the certificate to a file for manual import into the database.\n\nUsing firefox:\n#Browse to the target URL.\n#Upon seeing the \"This Connection is Untrusted\" warning screen, click: ''I understand the Risks > Add Exception...''\n#Click: ''View > Details > Export'' and save the certificate to a temporary location ({{ic|/tmp/easy.pem}} in this example).\n\nNow import the certificate for use in Chromium:\n $ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n \"easy\" -i /tmp/easy.pem\n\n{{Note|Adjust the name to match that of the certificate. In the example above, \"easy\" is the name of the certificate.}}\n\nReference:\n*https://sahissam.blogspot.com/2012/06/new-ssl-certificates-for-tomatousb-and.html\n\n==== Canvas Fingerprinting ====\n\nCanvas fingerprinting is a technique that allows websites to identify users by detecting differences when rendering to an HTML5 canvas. This information can be made inaccessible by using the {{ic|--disable-reading-from-canvas}} flag.\n\nTo confirm this is working run [https://panopticlick.eff.org this test] and make sure \"hash of canvas fingerprint\" is reported as undetermined in the full results.\n\n{{Note|1=<nowiki/>\n* Some extensions require reading from canvas and may be broken by setting {{ic|--disable-reading-from-canvas}}.\n* The YouTube player or Google Maps do not work properly without canvas reading. [https://github.com/qutebrowser/qutebrowser/issues/5345 Qutebrowser issue 5345][https://bbs.archlinux.org/viewtopic.php?id=255958 BBS#255958][https://bbs.archlinux.org/viewtopic.php?id=276425 BBS#276425]\n}}\n\n==== Privacy extensions ====\n\nSee [[Browser extensions#Privacy]].\n\n{{Tip|Installing too many extensions might take up much space in the toolbar. Those extensions which you would not interact with anyway (e.g. [https://chrome.google.com/webstore/detail/gcbommkclmclpchllfjekcdonpmejbdp HTTPS Everywhere]{{Dead link|2023|04|22|status=404}}) can be hidden by right-clicking on the extension and choosing ''Hide in Chromium menu''.}}\n\n==== Do Not Track ====\n\nTo enable [[wikipedia:Do Not Track|Do Not Track]], visit {{ic|chrome://settings}}, scroll down to ''Advanced'' and under ''Privacy and security'', check ''Send a \"Do Not Track\" request with your browsing traffic''.\n\n==== Force a password store ====\n\nChromium uses a password store to store your passwords and the ''Chromium Safe Storage'' key, which is used to encrypt cookie values. [https://codereview.chromium.org/24734007]\n\nBy default Chromium auto-detects which password store to use, which can lead to you apparently losing your passwords and cookies when switching to another desktop environment or window manager.\n\nYou can force Chromium to use a specific password store by launching it with the {{ic|--password-store}} flag with one of following the values [https://chromium.googlesource.com/chromium/src/+/master/docs/linux/password_storage.md]:\n\n* {{ic|gnome-libsecret}}, uses [[Gnome Keyring]] via [https://gitlab.gnome.org/GNOME/libsecret libsecret].\n* {{ic|kwallet5}}, uses [[KDE Wallet]]\n* {{ic|basic}}, saves the passwords and the cookies' encryption key as plain text in the file {{ic|Login Data}}\n* {{ic|detect}}, the default auto-detect behavior\n\nFor example, to force Chromium to use Gnome Keyring in another desktop or WM use {{ic|1=--password-store=gnome-libsecret}}, see [[#Making flags persistent]] for making it permanent.\n\nWhen using a password store of another desktop environment you probably also want to unlock it automatically. See [[GNOME/Keyring#Using the keyring]] and [[KDE Wallet#Unlock KDE Wallet automatically on login]].\n\n== Troubleshooting ==\n\n=== Fonts ===\n\n{{Note|Chromium does not fully integrate with fontconfig/GTK/Pango/X/etc. due to its sandbox. For more information, see the [https://dev.chromium.org/developers/linux-technical-faq Linux Technical FAQ].}}\n\n==== Tab font size is too large ====\n\nChromium will use the GTK settings as described in [[GTK#Configuration]]. When configured, Chromium will use the {{ic|gtk-font-name}} setting for tabs (which may mismatch window font size). To override these settings, use {{ic|1=--force-device-scale-factor=1.0}}.\n\nSince Chrome Refresh 2023 became default, GNOME users with Cantarell font may notice some characters (like lowercase g) cut off in the tab title. See the [https://issues.chromium.org/issues/40934082 issue on chromium.org].\n\nUntil the issue resolved, a workaround is to replace Cantarell with another font using a configuration based on [[Font configuration#Set default or fallback fonts]], e.g.\n\n{{hc|~/.config/fontconfig/conf.d/10-chromium-font.conf|<nowiki>\n<match target=\"pattern\">\n    <test name=\"prgname\" compare=\"eq\">\n        <string>chromium</string>\n    </test>\n    <test qual=\"any\" name=\"family\">\n         <string>Cantarell</string>\n    </test>\n    <edit name=\"family\" mode=\"assign\" binding=\"strong\">\n        <string>Ubuntu</string>\n    </edit>\n</match>\n</nowiki>}}\n\nThis configuration will apply only if process name {{ic|chromium}} matches. You can use {{ic|chrome}} for Google Chrome.\n\n=== WebGL ===\n\nThere is the possibility that your graphics card has been blacklisted by Chromium. See [[#Force GPU acceleration]].\n\nIf you are using Chromium with [[Bumblebee]], WebGL might crash due to GPU sandboxing. In this case, you can disable GPU sandboxing with {{ic|optirun chromium --disable-gpu-sandbox}}.\n\nVisit {{ic|chrome://gpu/}} for debugging information about WebGL support.\n\nChromium can save incorrect data about your GPU in your user profile (e.g. if you use switch between an Nvidia card using Optimus and Intel, it will show the Nvidia card in {{ic|chrome://gpu}} even when you are not using it or primusrun/optirun). Running using a different user directory, e.g, {{ic|1=chromium --user-data-dir=$(mktemp -d)}} may solve this issue. For a persistent solution you can reset the GPU information by deleting {{ic|~/.config/chromium/Local\\ State}}.\n\n=== Incorrect HiDPI rendering ===\n\nChromium will automatically scale for a [[HiDPI]] display, however, this may cause an incorrect rendered GUI.\n\nThe flag {{ic|1=--force-device-scale-factor=1}} may be used to overrule the automatic scaling factor.\n\nWhen [[#Native Wayland support|native Wayland support]] is enabled, Chromium will automatically scale based on the configured scale of each monitor.\n\n=== Password prompt on every start with GNOME Keyring ===\n\nSee [[GNOME/Keyring#Passwords are not remembered]].\n\n=== Everything is syncing except for password ===\n\nIf synchronization is not working for password only (you can check it on {{ic|chrome://sync-internals/}}) delete profile login data:\n\n $ rm ~/.config/chromium/Default/Login\\ Data*\n\nSee [https://support.google.com/chrome/thread/9947763?hl=en&msgid=23687608 Google Chrome Help forum] for details.\n\n=== Losing cookies and passwords when switching between desktop environments ===\n\nIf you see the message {{ic|Failed to decrypt token for service AccountId-*}} in the terminal when you start Chromium, it might try to use the wrong password storage backend. This might happen when you switch between Desktop Environments.\n\nSee [[#Force a password store]].\n\n=== Hang on startup when Google Sync enabled ===\n\nTry launching Chrome with {{ic|1=--password-store=basic}} or another appropriate password store.\n\nSee [[#Force a password store]].\n\n=== Chromium asks to be set as the default browser every time it starts ===\n\nIf you are using KDE and have once set Firefox as the default browser (by clicking the button inside Firefox), you might find Chromium asks to be set as the default browser every time it starts, even if you click the \"set as default\" button.\n\nChromium checks for this status by running {{ic|xdg-settings check default-web-browser chromium.desktop}}. If the output is \"no\", it is not considering itself to be the default browser. The script {{ic|xdg-settings}} checks for the following MIME associations and expect all of them to be {{ic|chromium.desktop}}:\n\n{{bc|\nx-scheme-handler/http\nx-scheme-handler/https\ntext/html}}\n\nTo fix it, go to ''System settings > Applications > Default applications > Web browser'' and choose Chromium. Then, set the MIME association for {{ic|text/html}}:\n\n $ xdg-mime default chromium.desktop text/html\n\nFinally, [[XDG MIME Applications#New MIME types|update the MIME database]]:\n\n $ update-mime-database ~/.local/share/mime\n\n=== \"This browser or app may not be secure\" error logging in to Google ===\n\nAs of 2020.04.20 if you run chromium with {{ic|1=--remote-debugging-port=9222}} flag for web development, you cannot log in to your Google account. Temporarily disable this flag to login and then you can enable it back.\n\n=== Chromium rendering at 60 FPS despite using a display with a higher refresh rate ===\n\nUpstream bug report about the general issue which may contain some additional workarounds can be found [https://bugs.chromium.org/p/chromium/issues/detail?id=1200167 here], and a sister issue about mixed refresh rates [https://bugs.chromium.org/p/chromium/issues/detail?id=1138080 here].\n\n==== Mixed refresh rates ====\n\n{{Tip|This issue is possibly not present on the Wayland backend, needs testing.}}\n\nWhen using displays with mixed refresh rates(for example 60Hz and 144Hz), Chromium might render for the lower Hz display.\n\nThere is a suitable workaround for this issue, [[append]] the following flags to [[#Making flags persistent|persistent configuration]]:\n\n{{hc|1=~/.config/chromium-flags.conf|2=\n--use-gl=egl\n--ignore-gpu-blocklist\n--enable-gpu-rasterization\n}}\n\nThis should make Chromium run at 144 FPS when used on a 144Hz display, assuming your compositor is also refreshing at 144 FPS.  \nKeep in mind it might be a little choppy due to {{Bug|67035}}, but it is way better than being stuck at 60 FPS.\n\n==== Running on the Wayland backend ====\n\nThere seem to be Wayland compositor-specific problems that trigger this issue.  \nNotably, Plasma 5 seems to only ever render on 60Hz no matter the setup, but Plasma 6(rc1, at the time of writing) makes Chromium work flawlessly on high refresh rates.\n\nA workaround may be to switch to the XWayland backend if all else fails.\n\n=== Chromium slow scroll speed ===\n\nMouse whell scrolling in chromium and electron based applications may be too slow for daily usage. Here are some solutions.\n\n[[Libinput#Mouse wheel scrolling speed scaling]] injects {{ic|libinput_event_pointer_get_axis_value}} function in libinput and provides an interface to change scale factor. This is not a application level injection, so an addition script for application specific scale factor tuning is needed. Note that scroll on chromium's small height developer tools may be too fast when scale factor is big enough.\n\n[[IMWheel]] increases scroll distance by replaying X wheel button event for multiple times. However, chromium assumes the real scroll and the replayed ones as two events. There is a small but noticeable delay between them, so one mouse wheel scroll leads to twice page jumps. Also, touchpad scroll needs additional care.\n\n[https://chrome.google.com/webstore/detail/linux-scroll-speed-fix/mlboohjioameadaedfjcpemcaangkkbp Linux Scroll Speed Fix] and [https://chrome.google.com/webstore/detail/smoothscroll/nbokbjkabcmbfdlbddjidfmibcpneigj SmoothScroll] are two chromium extensions with suppport for scroll distance modification. Upon wheel scroll in a web page, the closest scrollable ancestor of current focused node will be found, then a scroll method with given pixel distance will be called on it, even if it has been scrolled to bottom. So once you scroll into a text editor or any scrollable element, you can never scroll out of it, except moving mouse. Also, extension based methods can not be used outside chromium.\n\n=== Videos load but do not play ===\n\nThis may be a PulseAudio issue. See the suggested fix in [[PulseAudio/Troubleshooting#Browsers load videos but do no play]].\n\n=== Passwords are not saved due to a corrupted database ===\n\nThe stored password database can become corrupted and in need of getting rebuilt. Doing so will destroy all data therein/lose stored passwords.\n\nLaunch chromium from a terminal and look for output like:\n [472531:472565:1207/055404.688559:ERROR:login_database.cc(1048)] Password decryption failed, encryption_result is 2\n\nExit chromium and then delete these three database files: {{ic|~/.config/chromium/Default/Login Data*}}\n\nLaunching chromium again should re-create them.\n\n=== Cursor is not correct on KDE Wayland ===\n\nSee [[KDE#Plasma cursor sometimes shown incorrectly]].\n\n=== Chromium window is transparent under Wayland ===\n\nDue to a [https://issues.chromium.org/issues/329678163 bug], chromium 124 must be started with the explicit command line flag {{ic|1=--ozone-platform=wayland}}.\n\n== See also ==\n\n* [https://www.chromium.org/ Chromium homepage]\n* [https://chromereleases.googleblog.com/ Google Chrome release notes]\n* [https://chrome.google.com/webstore/ Chrome web store]\n* [[Wikipedia:Chromium (web browser)#Differences from Google Chrome|Differences between Chromium and Google Chrome]]\n* [https://peter.sh/experiments/chromium-command-line-switches/ List of Chromium command-line switches]\n* [[Profile-sync-daemon]] - Systemd service that saves Chromium profile in tmpfs and syncs to disk\n* [[Tmpfs]] - Tmpfs Filesystem in {{ic|/etc/fstab}}\n* [https://docs.kernel.org/filesystems/tmpfs.html Official tmpfs kernel Documentation]"
                    }
                ]
            },
            "9287": {
                "pageid": 9287,
                "ns": 0,
                "title": "Thunderbird",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Email clients]]\n[[Category:Mozilla]]\n[[Category:OpenPGP]]\n[[de:Thunderbird]]\n[[ja:Thunderbird]]\n[[ru:Thunderbird]]\n{{Related articles start}}\n{{Related|Firefox}}\n{{Related articles end}}\n\n[https://www.thunderbird.net/en-US/ Thunderbird] is an open source email, news, and chat client previously developed by the Mozilla Foundation.\n\n== Installation ==\n\n[[Install]] the {{Pkg|thunderbird}} package, with a [https://archlinux.org/packages/?q=thunderbird-i18n language pack] if required.\n\nOther versions include:\n\n* {{App|Thunderbird Beta|Cutting edge features with relatively-good stability.|https://www.thunderbird.net/channel/ |{{AUR|thunderbird-beta-bin}}}}\n* {{App|Thunderbird Nightly|Experience the newest innovations with nightly releases (for those that want to work with breakages).|https://ftp.mozilla.org/pub/thunderbird/nightly/latest-comm-central/|{{AUR|thunderbird-nightly-bin}}}}\n* {{App|Betterbird|Betterbird is a fine-tuned version of Mozilla Thunderbird, Thunderbird on steroids.|https://www.betterbird.eu|{{AUR|betterbird-bin}}}}\n\nA version overview, both past and future, can be read on [[MozillaWiki:Releases]].\n\n== Securing ==\n\n* Thunderbird sends your system's internal IP address to the configured SMTP server as an argument to the HELO/ELHO SMTP command. This value can be overridden by setting {{ic|mail.smtpserver.default.hello_argument}} to, for example, {{ic|localhost}}. Setting this value may increase the spam score of messages you send. See [http://kb.mozillazine.org/Replace_IP_address_with_name_in_headers] and [http://kb.mozillazine.org/Mail_and_news_settings].\n* To hide Thunderbird's [https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference#Linux User Agent], create a new empty {{ic|general.useragent.override}} string entry in the [[#Config editor]].\n* Thunderbird disables email images by default but enables HTML rendering which may expose IP address and location. To disable this click ''View > Message Body As > Plain Text''.\n* JavaScript is disabled for message content but not for RSS news feeds. To disable set {{ic|javascript.enabled}} to {{ic|false}} in the [[#Config editor]].\n\n{{Note|\n* Setting {{ic|javascript.enabled}} to {{ic|false}} also turns off Javascript in OAuth dialogs.\n* Setting {{ic|general.useragent.override}} to an empty string is known to break Duo MFA. See [https://github.com/webcompat/web-bugs/issues/104558 web-bugs#104558].\n}}\n\n== Extensions ==\n\n* {{App|Birdtray|System tray new mail notification which does not require extensions. Run Thunderbird with a system tray icon.|https://github.com/gyunaev/birdtray|{{AUR|birdtray}}}}\n* {{App|SysTray-X|system tray extension. Similar to FireTray but works with Thunderbird 68+.|https://github.com/Ximi1970/systray-x|{{Pkg|systray-x-common}} or {{Pkg|systray-x-kde}}}}\n* {{App|SOGo Connector| Lets you sync address books via CardDAV|https://sogo.nu/download.html#/frontends|{{AUR|thunderbird-sogo-connector-bin}}}}\n* {{App|Cardbook|A new addressbook for Thunderbird based on the CARDDav and VCARD standards.|[https://addons.thunderbird.net/thunderbird/addon/cardbook/ Cardbook AMO]|}}\n\n=== OpenPGP: signing and encryption ===\n\nFrom Thunderbird 78.2.1 onwards, this functionality is integrated into Thunderbird. This was previously provided by the Enigmail add-on, which is not compatible with Thunderbird 78+. To migrate keys from Enigmail to Thunderbird, as well as learn what is currently supported, see [https://support.mozilla.org/en-US/kb/openpgp-thunderbird-howto-and-faq Thunderbird OpenPGP FAQ]. Before migration, make sure that a strong passphrase is used for the master password. Otherwise the private key will not be properly protected.\n\n== Tips and tricks ==\n\n=== Config editor ===\n\nThunderbird can be extensively configured by clicking the ''Thunderbird Menu > Settings > General'' and looking for the ''Config Editor'' button at the bottom of the page. \nAlternatively, if the menu bar is toggled the Config Editor button can be found by clicking ''Edit > Settings > General''\n\n=== Set the default browser ===\n\nThunderbird uses the default browser as defined by the [[XDG MIME Applications]]. This is commonly modified by [[desktop environment]]s (for example [[GNOME]]'s Control Center: ''Details > Default Applications > Web'').\n\nThis can be overridden with {{ic|network.protocol-handler.warn-external}} in the [[#Config editor]]\n\nIf the following is all set to {{ic|false}} (default), set them to {{ic|true}} and Thunderbird will ask you which application to use when you click on a link (remember to also check ''\"Remember my choice for .. links\"'').\n\n network.protocol-handler.warn-external.http\n network.protocol-handler.warn-external.https\n\n=== Plain text mode and font uniformity ===\n\nPlain Text mode lets you view all your emails without HTML rendering and is available in ''View > Message Body As''. This defaults to the [[Wikipedia:Monospace_(Unicode)|Monospace]] font but the size is still inherited from original system fontconfig settings. The following example will overwrite this with Ubuntu Mono of 10 pixels (available in: {{Pkg|ttf-ubuntu-font-family}}).\n\nRemember to run {{ic|fc-cache -fv}} to update system font cache. See [[Font configuration]] for more information.\n\n{{hc|~/.config/fontconfig/fonts.conf|<nowiki>\n<?xml version=\"1.0\"?>\n<!DOCTYPE fontconfig SYSTEM \"fonts.dtd\">\n<fontconfig>\n  <match target=\"pattern\">\n    <test qual=\"any\" name=\"family\"><string>monospace</string></test>\n    <edit name=\"family\" mode=\"assign\" binding=\"same\"><string>Ubuntu Mono</string></edit>\n    <!-- For Thunderbird, lowering default font size to 10 for uniformity -->\n    <edit name=\"pixelsize\" mode=\"assign\"><int>10</int></edit>\n  </match>\n</fontconfig>\n</nowiki>}}\n\n=== Migrate profile to another system ===\n\n{{Tip|The [https://addons.thunderbird.net/thunderbird/addon/importexporttools-ng/ ImportExportTools NG] add-on offers an option to export and import a profile folder.}}\n\nBefore you start with Importing or Exporting tasks, backup your complete {{ic|~/.thunderbird}} profile:\n\n $ cp -R ~/.thunderbird ''/to/backup/folder/''\n\nWith migration you just copy your current Thunderbird profile to another PC or a new Thunderbird installation:\n\n# Install Thunderbird on the target PC.\n# Start Thunderbird without doing anything and quit it.\n# Copy the profile content from your backup folder into the target profile folder: {{bc|$ cp -R ''/to/backup/folder/''.thunderbird/<''oldrandomnumber''>.default/* ~/.thunderbird/<''newrandomnumber''>.default/}}\n\n=== Export and import ===\n\nBefore you start with Importing or Exporting tasks, backup your complete {{ic|~/.thunderbird}} profile:\n\n $ cp -R ~/.thunderbird /to/backup/folder/\n\nIf your accounts are broken or you want to join two different Thunderbird installations, you can install [https://addons.thunderbird.net/thunderbird/addon/importexporttools-ng/ ImportExportTools NG] add-on for both Thunderbird installations and following this just export and import all your data to the new installation.\n\n=== Change the default sorting order ===\n\nThunderbird (up to at least 31.4.0-1) sorts mail by date with the oldest on top without any threading. While this can be changed per folder, it is easier to set a sane default instead as described [https://superuser.com/questions/13518/change-the-default-sorting-order-in-thunderbird here].\n\nSet these preferences in the [[#Config editor]]:\n\n mailnews.default_sort_order = 2 (descending)\n mailnews.default_view_flags = 1 (Threaded view)\n\n=== Maildir support ===\n\nThe default message store format is mbox. To enable the use of Maildir, see [[MozillaWiki:Thunderbird/Maildir]]. You basically have to set the following preference in the [[#Config editor]]:\n\n mail.serverDefaultStoreContractID = @mozilla.org/msgstore/maildirstore;1\n\nSome limitations up to at least 31.4.0-1: only the \"tmp\" and \"cur\" directories are supported. The \"new\" directory is completely ignored. The read state of mails are stored in a separate \".msf\" file, so initially all local mail using Maildir will be marked as unread even when located in the \"cur\" directory. It is also possible to change this setting in the regular user interface now: Go to ''Menu > Settings > General > Indexing > Message Store Type for new accounts'' and choose ''File per message (maildir)''.\n\n=== Spell checking ===\n\nInstall [[hunspell]] and a hunspell language dictionary and restart Thunderbird.\n\nSee the Firefox article for [[Firefox#Firefox does not remember default spell check language|how to set the default spell checking language]].\n\n=== Native notifications ===\n\nMake sure that {{ic|mail.biff.use_system_alert}} in the [[#Config editor]] is set to \"true\" (default). This option means that extensions (such as Gnome Integration) are not needed for these newer versions of Thunderbird.\n\nYou might also need to install [[Desktop notifications#Notification servers|a notification server]].\n\n=== Sound ===\n\nThunderbird can be configured to play sounds when new emails are received and when calendar reminders are dispatched. This requires {{pkg|libcanberra}}.\n\n=== Theming tweaks ===\n\nThunderbird should conform to [[GTK#Themes]] as defined on your system.  However, two tweaks are desirable for full consistency.  These are most beneficial for dark themes.\n\n# To view the body of emails with colors following your theme:\n## Go to ''Menu > Preferences > Preferences''\n## Select the ''Display'' tab\n## Click the ''Colors'' button\n## Check ''Use system colors''\n## Set the option for ''Override the colors specified by the content with my selection above'' to ''Always'' or ''Only with High Contrast themes''\n# To view Lightning calendar with colors following your theme:\n## Go to ''Menu > Preferences > Preferences''\n## Select the ''Calendar'' tab\n## Check ''Optimize colors for accessibility''\n\nFurther customization can be attained by creating and editing a {{ic|userchrome.css}}.  See [[Firefox/Tweaks#General user interface CSS settings]] and [http://kb.mozillazine.org/UserChrome.css Mozillazine's userchrome page].\n\n=== Keyboard bindings ===\n\nThunderbird [https://bugzilla.mozilla.org/show_bug.cgi?id=615957 unfortunately lacks] an easy way to disable single-key bindings, such that pressing e.g. \"a\" on the keyboard will not archive a message. The [https://addons.thunderbird.net/thunderbird/addon/tbkeys-lite/ tbkeys-lite] extension provides a means of editing and deleting such bindings and is available for Thunderbird 68.0 onwards.\n\n=== Use OpenPGP with external GnuPG ===\n\nStarting with v78.1, Thunderbird now ships with integrated OpenPGP support previously provided by Add-Ons like Enigmail. It will offer you to migrate your existing Enigmail keys into Thunderbird upon the first start after the update. If you do not want to store your private keys inside Thunderbird, it is possible to use Thunderbird with an external GnuPG installation in order to keep your keys safe or use a Smartcard.\n\nTo view any OpenPGP keys stored inside Thunderbird:\n# Go to ''Menu > Tools > OpenPGP Key Manager''\n# Disable ''View > Display Keys From Other People'' for better visibility of your own keys. Private keys are displayed in bold.\n# Review present keys and possibly delete them.\n# Import public keys of any external private keys you want to use using ''File > Import public key(s) from file''. See [[GnuPG#Export your public key]].\nTo enable external GnuPG support in Thunderbird:\n# Ensure you have [[GnuPG#List keys|relevant keys available]] or [[GnuPG#Create a key pair|created]].\n# Open the [[#Config editor]]\n# Search for {{ic|mail.openpgp.allow_external_gnupg}} and set its value to {{ic|true}}\n# Go to ''Menu > Account Settings'' and select the account you want to use.\n# Click ''Manage Identities'' and select the Identity you want to edit.\n# Click ''Edit > End-To-End Encryption > Add Key''.\n# Select ''Use your external key through GnuPG'' and paste your key ID from GnuPG. {{Note|The Secret Key ID is the last 16 characters of your primary key's fingerprint.}}\nRefer to [[MozillaWiki:Thunderbird:OpenPGP:Smartcards]] for further instructions and specialized configurations.\n\n=== Wayland ===\n\nYou can use the following way to start Thunderbird natively on wayland:\n $ MOZ_ENABLE_WAYLAND=1 thunderbird\n\n=== Tor ===\n\nTo route the connection to the server through the Tor network the proxy settings must be set accordingly. \n\n# Make sure you have {{Pkg|tor}} installed and that the process is running.\n# In Thunderbird go to ''Menu > Settings > General''. In the ''Network & Disk Space > Connection'' section, click on the ''Settings...'' button. \n# Select ''Manual proxy configuration'', enter ''localhost'' as SOCKS Host and 9050 as Port (9050 is the default; it may be configured differently in /etc/tor/torrc). Select ''Proxy DNS when using SOCKS v5''.\n\n== Troubleshooting ==\n\n=== LDAP Segfault ===\n\nAn [https://bugzilla.mozilla.org/show_bug.cgi?id=292127 LDAP clash (Bugzilla#292127)] arises on systems configured to use it to fetch user information. A possible [https://bugzilla.mozilla.org/show_bug.cgi?id=292127#c7 workaround] consists of renaming the conflicting bundled LDAP library.\n\n=== Error: Incoming server already exists ===\n\nIf you want to reinstall a previously deleted account with the same account data, you might get a popup with \"Incoming server already exists\". See bug [https://bugzilla.mozilla.org/show_bug.cgi?id=1121151 Bugzilla#1121151] for details. Unfortunately, if you get this error you can now only clean reinstall Thunderbird: \n\n# Make a backup of your current profile: {{bc|$ cp -R ~/.thunderbird /to/backup/folder/}}\n# Export all your Accounts, Calendar and Feeds via an add-on like it is written in ''Export section'' of this Wiki.\n# Close Thunderbird\n# Remove all your data by deleting your current Thunderbird folder {{ic|rm -R ~/.thunderbird/}}.\n# Start Thunderbird\n# Create your mail accounts, feeds and calendars (empty).\n# Install the [https://addons.thunderbird.net/thunderbird/addon/importexporttools-ng/ ImportExportTools NG] add-on\n# Import all your data.\n\n=== Thunderbird UI freezes when receiving a new message ===\n\nIf Thunderbird is configured to show an alert when a new message arrives, or at launch, the lack of a notification daemon may freeze the interface (white screen) for many seconds. You can solve this issue by disabling alerts or installing a [[Desktop notifications#Notification servers|notification server]].\n\n=== LC_TIME environment variable not respected ===\n\nThunderbird should use the {{ic|LC_TIME}} environment variable for localization, but it might not do so in all contexts. Some problems can be mitigated by setting ''Menu'' > ''Preferences'' > ''Preferences'' > ''Advanced'' > ''Date and Time Formatting'' to ''Regional settings locale'', a setting which was introduced in Thunderbird 56.\n\nWith version 60, Gecko started using the [https://cldr.unicode.org/ CLDR project] for localization, including datetime formatting, which uses different settings than most other software based purely on {{ic|LC_TIME}}. There is a [https://bugzilla.mozilla.org/show_bug.cgi?id=1426907 bug report] for this issue that includes workarounds with varying effects. To achieve ISO-8601-formatted dates in Thunderbird and a week beginning on Monday, use {{ic|1=LC_TIME=lt_LT thunderbird}}.\n\nStarting in Thunderbird version 91, one can set a number of preferences to make Thunderbird compliant with ISO-8601. Most programs can be set to ISO-8601 by setting your region locale to {{ic|en_DK}}, but by default Thunderbird ignores regional locale preferences. See [https://support.mozilla.org/en-US/kb/customize-date-time-formats-thunderbird] for details.\n\n=== ''Authentication failure while connecting to server imap.gmail.com'' error when using OAuth2 with G Suite account ===\n\nSometimes Thunderbird fails to log in to G Suite with ''Authentication failure while connecting to server imap.gmail.com'' error. It can be fixed with setting {{ic|general.useragent.compatMode.firefox}} setting to {{ic|true}} in [[#Config editor]] and then passing authentication stage again.\n\n=== Outlook 365 SMTP fails to authenticate with OAuth2 authentication ===\n\nApparently by default, SMTP authentication is disabled for Outlook 365 accounts. Use the Microsoft 365 admin center to enable it. Refer to: [https://docs.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission Enable SMTP AUTH for specific mailboxes].\n\n=== Difficulties using Thunderbird to access Outlook 365 accounts ===\n\nVersion 102.7.0 of Thunderbird included changes to the OAUTH2 implementation that affected access to Outlook 365 accounts (see [https://www.thunderbird.net/en-US/thunderbird/102.7.0/releasenotes/] and [https://bugzilla.mozilla.org/show_bug.cgi?id=1810760]). Affected users should directly upgrade to 102.7.1 or newer.\n\n=== Cannot login to access Outlook 365 accounts ===\n\nIf, after being redirected to your institution's login page, inserting credentials and pressing the login button, you are being redirected to the same login page, try to:\n\n# Remove cookies and cache with ''Menu'' > ''Tools'' > ''Clear Recent History'', on ''Time range to clear'' select ''Everything'', on ''History'' select ''Browsing History'', ''Cookies'', ''Cache'', click ''Ok''.\n# Enable cookies with ''Edit'' > ''Settings'' > ''Privacy & Security'' and under ''Web Content'' check ''Accept cookies from sites''"
                    }
                ]
            },
            "9436": {
                "pageid": 9436,
                "ns": 0,
                "title": "GNOME (Italiano)/Tips and tricks (Italiano)",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Desktop environments (Italiano)]]\n[[en:GNOME/Tips and tricks]]\n[[es:GNOME]]\n[[ja:GNOME/\u30d2\u30f3\u30c8\u3068\u30c6\u30af\u30cb\u30c3\u30af]]\n[[pt:GNOME]]\n{{TranslationStatus|GNOME/Tips and tricks|2020-08-08|627430}}\nVedi [[GNOME (Italiano)]] per l'articolo principale.\n\n== Tastiera ==\n\n=== Attiva NumLock all'accesso ===\n\nVedere [[Activating numlock on bootup#GNOME]]\n\n=== Alternative di tasti di scelta rapida ===\n\nMolti tasti di scelta rapida possono essere modificati tramite il menu delle impostazioni di sistema. Ad esempio, per riattivare l'associazione dei tasti show desktop:\n\n'' Impostazioni di sistema ''> '' Tastiera ''> '' Scorciatoie ''> '' Navigazione ''> '' Nascondi tutte le finestre normali ''\n\nTuttavia, alcuni tasti di scelta rapida non possono essere modificati direttamente tramite le impostazioni di sistema. Per cambiare queste chiavi, usa \"dconf-editor\". Un esempio di nota particolare \u00e8 il tasto di scelta rapida {{ic|Alt-}} + {{ic|`}} (il tasto sopra {{ic|Tab}} sui layout di tastiera USA). In GNOME Shell \u00e8 preconfigurato per scorrere le finestre di un'applicazione, tuttavia \u00e8 anche un tasto di scelta rapida usato spesso nell'editor [[Emacs]]. Pu\u00f2 essere cambiato aprendo \"dconf-editor\" e modificando la chiave \"switch-group\" che si trova in {{ic|org.gnome.desktop.wm.keybindings}}.\n\n=== Interruttore da tastiera con comando ===\n\nPer cambiare la scorciatoia da tastiera predefinita '' 'Win' '' + '' 'Spazio' '' in un altro tasto di scelta rapida:\n\nAd esempio, per passare a '' Alt '' + '' Maiusc '': apri Gnome-Tweak-Tool (o Impostazioni tastiera, in GNOME 3.16) e imposta '' Digitazione ''> '' Sorgenti di input solo modificatori ''> '' seleziona Alt-Maiusc ''. Per maggiori informazioni vedere anche il forum [https://bbs.archlinux.org/viewtopic.php?id=152127 thread].\n\n=== Opzioni della tastiera XkbOptions ===\n\nUtilizzando '' 'dconf-editor' '', vai alla chiave denominata {{ic|org.gnome.desktop.input-sources.xkb-options}} e aggiungi le XkbOptions desiderate (es. '' Caps: swapescape '') alla lista.\n\nVedere {{ic|/usr/share/X11/xkb/rules/xorg}} per tutte le XkbOptions e {{ic|/usr/share/X11/xkb/symbols/*}} per le rispettive descrizioni.\n\n{{Nota|Per abilitare la combinazione {{ic|Ctrl+Alt+Backspace}} per terminare Xorg, usa {{Pkg|gnome-tweaks}}. All'interno dello '' 'Strumento Modifica' '', vai a '' Digitazione> Sequenza di tasti per uccidere il server X '' e seleziona l'opzione {{ic|Ctrl+Alt+Backspace}} dal menu a discesa.}}\n\n=== Annulla il binding della chiave Windows ===\n\nPer impostazione predefinita, il \"tasto Windows\" aprir\u00e0 la modalit\u00e0 panoramica della shell GNOME. Puoi svincolare questa chiave eseguendo il comando seguente\n\n $ gsettings set org.gnome.mutter overlay-key 'Foo'\n\n=== Modifica i tasti di scelta rapida Nautilus ===\n\nDalla 3.15 non \u00e8 pi\u00f9 possibile usare il file '' 'accel' '', ma \u00e8 possibile riassociare le chiavi utilizzando {{Pkg|python-nautilus}}. Installa il pacchetto e aggiungi il seguente file:\n\n{{hc|~/.local/share/nautilus-python/extensions/modify_keybindings.py|<nowiki>\nimport os, gi\ngi.require_version('Nautilus', '3.0')\nfrom gi.repository import GObject, Nautilus, Gtk, Gio, GLib\n\ndef rebind():\n    app = Gtk.Application.get_default()\n    # Search for open_accels and nautilus_application_set_accelerators in:\n    #   https://github.com/GNOME/nautilus/blob/master/src/nautilus-files-view.c\n    app.set_accels_for_action( \"win.back\", [\"<alt>Left\", \"BackSpace\"] )\n\n    # if you want to figure out which hotkey belongs to which action try this:\n    # print(f'Alt+Left is: {app.get_actions_for_accel(\"<alt>Left\")}')\n\nclass BackspaceBack(GObject.GObject, Nautilus.LocationWidgetProvider):\n    def __init__(self):\n        pass\n\n    def get_widget(self, uri, window):\n        rebind()\n        return None\n\n}</nowiki>}}\n\nRiavvia nautilus:\n\n $ nautilus -q ; nautilus\n\n== Dischi ==\n\nGNOME fornisce un'utilit\u00e0 del disco per manipolare le impostazioni dell'unit\u00e0 di archiviazione. Queste sono alcune delle sue caratteristiche:\n\n* '' 'Abilita cache di scrittura' '' \u00e8 una funzionalit\u00e0 fornita dalla maggior parte dei dischi rigidi. I dati vengono memorizzati nella cache e allocati in orari prestabiliti per migliorare le prestazioni del sistema. Non consigliato a meno che il computer non abbia una batteria di backup o sia un laptop poich\u00e9 i dati andrebbero persi in caso di interruzione di corrente.\n: '' Impostazioni ''> '' Impostazioni unit\u00e0 ''> '' Scrittura cache ''> '' 'On' ''\n* '' 'Opzioni di montaggio automatico' '' pu\u00f2 montare unit\u00e0 e partizioni basate su GPT - utilizzer\u00e0 le opzioni predefinite consigliate.\n: {{Warning (Italiano)|This setting erases related [[fstab]] entries}}\n: '' Impostazioni partizione ''> '' Modifica opzioni di montaggio ''> '' Opzioni di montaggio automatico ''> '' 'On' ''\n\n== Nascondere le applicazioni dal menu ==\n\n{{Tip (Italiano)|\n* Le voci del desktop possono essere nascoste modificando i file {{ic|.desktop}} stessi. Vedere [[Desktop entries#Hide desktop entries]].\n* {{AUR|Menulibre}} fornisce un editor di menu senza dipendenze GNOME.}}\nUsa l'applicazione '' Menu principale '' (fornita dal pacchetto {{Pkg|alacarte}}) per nascondere tutte le applicazioni che non desideri mostrare nel menu.\n\n== Registrazione screencast ==\n\nGNOME presenta la registrazione screencast incorporata con la combinazione di tasti {{ic|Ctrl+Shift+Alt+r}}. Quando la registrazione \u00e8 in corso, viene visualizzato un cerchio rosso nell'angolo inferiore destro dello schermo. Al termine della registrazione, un file denominato {{ic|Screencast from% d% u-% c.webm}} viene salvato nella directory {{ic|Videos}}. Per poter utilizzare la funzione screencast \u00e8 necessario installare i plugin gst.\n\n{{Nota|Il nome del file di registrazione potrebbe essere tradotto a seconda della lingua del sistema.}}\n\n== Screenshot ==\n\n{{pkg|gnome-screenshot}} per impostazione predefinita salva l'immagine nella directory dell'ultimo salvataggio, che puoi interrogare:\n\n $ gsettings get org.gnome.gnome-screenshot last-save-directory\n\nInvece di usare la directory sopra, puoi impostare una directory di salvataggio automatico. per esempio. per salvare automaticamente gli screenshot nella directory del desktop di {{ic|''user''}}:\n\n $ gsettings set org.gnome.gnome-screenshot auto-save-directory file:///home/''user''/Desktop\n\nControlla la pagina man digitando sul terminale questo comando: {{man|1|gnome-screenshot}} per ulteriori opzioni.\n\n== Ritardo di disconnessione ==\n\nPer eliminare il ritardo predefinito di 60 secondi durante la disconnessione:\n\n $ gsettings set org.gnome.SessionManager logout-prompt false\n\n== Disabilita animazioni ==\n\nPer disabilitare le animazioni della shell (come \"Mostra applicazioni\" e l'animazione wave nell'angolo attivo in alto a sinistra delle attivit\u00e0), esegui:\n\n $ gsettings set org.gnome.desktop.interface enable-animations false\n\noppure tramite {{pkg|gnome-tweaks}}, nella scheda \"Generale\", disattiva \"Animazioni\".\n\n== Supporto display Retina (HiDPI) ==\n\nGNOME ha introdotto il supporto HiDPI nella versione 3.10. Se il display non fornisce le dimensioni corrette dello schermo tramite EDID, ci\u00f2 pu\u00f2 portare a elementi dell'interfaccia utente ridimensionati in modo errato. Come soluzione alternativa \u00e8 possibile aprire \"dconf-editor\" e trovare la chiave {{ic|scaling-factor}} in {{ic|org.gnome.desktop.interface}}. Impostalo su {{ic|1}} per ottenere la scala standard.\n\nVedi anche [[HiDPI]].\n\n== Password e chiavi (chiavi PGP) ==\n\n\u00c8 possibile utilizzare il programma Password e chiavi {{pkg|seahorse}} per creare una chiave PGP in quanto \u00e8 un front-end per [[GnuPG]] e la installa come dipendenza. Questo potrebbe essere utile in futuro (ad esempio se crittografare un file). Crea una chiave come mostrato di seguito (il processo potrebbe richiedere circa 10 minuti):\n\n'' File ''> '' Nuovo ''> '' Chiave PGP ''> '' Nome ''> '' Email ''> '' Impostazioni predefinite ''> '' Passphrase ''.\n\n== Terminale ==\n\n=== Modifica la dimensione del terminale predefinita ===\n\nLa dimensione predefinita di un nuovo terminale pu\u00f2 essere regolata nel menu '' Modifica> Preferenze profilo ''.\n\n=== I nuovi terminali adottano la directory corrente ===\n\nPer impostazione predefinita, i nuovi terminali si aprono nella directory {{ic|$HOME}}. Per avere nuovi terminali, adottare la directory di lavoro corrente: {{ic|source /etc/profile.d/vte.sh}}. Aggiungi il comando alla configurazione della shell per mantenere il comportamento. [https://unix.stackexchange.com/questions/93476/gnome-terminal-keep-track-of-directory-in-new-tab]\n\n=== Riempi il terminale ===\n\nPer riempire il terminale (creare un piccolo bordo invisibile tra i bordi della finestra e il contenuto del terminale) creare il file seguente:\n\n{{hc|~/.config/gtk-3.0/gtk.css|<nowiki>\nvte-terminal,\nterminal-window {\n    padding: 10px 10px 10px 10px;\n    -vte-terminal-inner-border: 10px 10px 10px 10px;\n}</nowiki>}}\n\n=== Disabilita il cursore lampeggiante ===\n\nPer disabilitare il cursore lampeggiante in GNOME 3.8 e versioni successive, utilizzare:\n\n $ gsettings set org.gnome.desktop.interface cursor-blink false\n\nPer disabilitare il cursore lampeggiante sul terminale utilizzare solo:\n\n $ gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:$(gsettings get org.gnome.Terminal.ProfilesList default|tr -d \\')/ cursor-blink-mode off\n\nNotare che {{ic|gnome-settings-daemon}}, dal pacchetto con lo stesso nome, deve essere in esecuzione affinch\u00e9 questa e altre modifiche alle impostazioni abbiano effetto nelle applicazioni GNOME - vedere [[GNOME#Configuration]].\n\n=== Disabilita la finestra di conferma alla chiusura del terminale ===\n\nIl Terminale mostrer\u00e0 sempre una finestra di conferma quando si tenta di chiudere la finestra mentre si \u00e8 loggati come root. Per evitare ci\u00f2, eseguire quanto segue:\n \n $ gsettings set org.gnome.Terminal.Legacy.Settings confirm-close false\n\n== Pulsante centrale del mouse ==\n\nPer impostazione predefinita, GNOME 3 disabilita l'emulazione del pulsante centrale del mouse indipendentemente dalle impostazioni [[Xorg]] ('' 'Emulate3Buttons' ''). Per abilitare l'emulazione del pulsante centrale del mouse, utilizzare:\n\n $ gsettings set org.gnome.settings-daemon.peripherals.mouse middle-button-enabled true\n\n== Abilita pulsanti e icone di menu ==\n\nA partire da GTK 3.10, la chiave GSettings \"menu-have-icons\" \u00e8 stata deprecata. Le icone nei pulsanti e nei menu possono ancora essere abilitate impostando le seguenti sostituzioni:\n \n $ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides \"{'Gtk/ButtonImages': <1>, 'Gtk/MenuImages': <1>}\"\n\n== Usa colori e gradienti personalizzati per lo sfondo del desktop ==\n\nPer utilizzare colori e sfumature personalizzati per lo sfondo del desktop, devi prima impostare un'immagine trasparente oppure un'immagine inesistente come sfondo del desktop. Ad esempio, il comando seguente imposter\u00e0 un'immagine inesistente come sfondo.\n\n $ gsettings set org.gnome.desktop.background picture-uri none\n\nA questo punto, lo sfondo del desktop dovrebbe essere di un colore piatto - l'impostazione predefinita del colore \u00e8 per un blu intenso.\n\nPer un colore piatto diverso \u00e8 necessario modificare solo l'impostazione del colore primario:\n  $ gsettings set org.gnome.desktop.background primary-color <my color>\ndove <my color> \u00e8 un valore esadecimale (come \"ffffff\" per il bianco).\n\nPer un gradiente di colore, dovrai anche cambiare l'impostazione del colore secondario {{ic|org.gnome.desktop.background secondary-color}} e selezionare un tipo di ombreggiatura. Ad esempio, se desideri un gradiente orizzontale, esegui quanto segue:\n\n $ gsettings set org.gnome.desktop.background color-shading-type horizontal\n\nSe stai usando un'immagine trasparente come sfondo, puoi impostare l'opacit\u00e0 eseguendo quanto segue: Se stai usando un'immagine trasparente come sfondo, puoi impostare l'opacit\u00e0 eseguendo quanto segue:\n \n $ gsettings set org.gnome.desktop.background picture-opacity <value>\n\ndove valore \u00e8 un numero compreso tra 1 e 100 (100 per la massima opacit\u00e0).\n\n== Sfondi in transizione ==\n\nGNOME pu\u00f2 passare da sfondi diversi a intervalli di tempo specifici. Questo viene fatto creando un file XML che specifica le immagini da utilizzare e l'intervallo di tempo. Per ulteriori informazioni sulla creazione di tali file, vedere il seguente [https://www.linuxjournal.com/content/create-custom-transitioning-background-your-gnome-228-desktop articolo].\n\nIn alternativa, sono disponibili numerosi strumenti per automatizzare il processo:\n\n* {{App|mkwlppr|Questo script crea file XML che possono agire come sfondi dinamici per GNOME facendo riferimento a pi\u00f9 sfondi.|https://pastebin.com/019G2rCy{{Dead link (Italiano)|2023|07|30|status=404}}|vedi [https://pastebin.com/019G2rCy mkwlppr]{{Dead link (Italiano)|2023|07|30|status=404}} }}\n\nPer impostare il file XML come sfondo predefinito, vedere [[GNOME (Italiano)#Blocca schermo e sfondo]].\n\n== Sessioni GNOME personalizzate ==\n\n\u00c8 possibile creare sessioni GNOME personalizzate che utilizzano il gestore di sessioni GNOME ma che avviano diversi set di componenti ([[Openbox]] con [[tint2]] invece di GNOME Shell per esempio).\n\nSono necessari due file per una sessione GNOME personalizzata: un file di sessione in {{ic|/usr/share/gnome-session/sessions/}} che definisce i componenti da avviare e un [[desktop entry]] in {{ic|/usr/share/xsessions}} che viene letto dal [[display manager]]. Di seguito viene fornito un file di sessione di esempio:\n{{hc|/usr/share/gnome-session/sessions/gnome-openbox.session|<nowiki>\n[GNOME Session]\nName=GNOME Openbox\nRequiredComponents=openbox;tint2;gnome-settings-daemon;\n</nowiki>}}\n\nE un file desktop di esempio:\n\n{{hc|/usr/share/xsessions/gnome-openbox.desktop|<nowiki>\n[Desktop Entry]\nName=GNOME Openbox\nExec=gnome-session --session=gnome-openbox\n</nowiki>}}\n\n{{Note (Italiano)|GNOME Session richiama i file {{ic|.desktop}} di ciascuno dei componenti da avviare. Se un componente che desideri avviare non fornisce un file {{ic|.desktop}}, devi creare una voce [[desktop entry]] adatta in una directory come {{ic|/usr/local/share/applications }}.}}\n\n== Reindirizza determinati URL a browser web specifici ==\n\nQuesto mostra come utilizzare [[Chromium]] per alcuni tipi di URL mantenendo [[Firefox]] come browser predefinito per tutte le altre attivit\u00e0.\n\nAssicurati che {{pkg|pcre}} sia [[install]], per usare ''pcregrep''.\n\nConfigurazione personalizzata ''xdg-open'':\n\n{{hc|/usr/local/bin/xdg-open|<nowiki>\n#!/bin/bash\nDOMAIN_LIST_FILE=~/'domains.txt'\nOTHER_BROWSER='/usr/bin/chromium-browser'\nBROWSER_OPTIONS='' # Opzionale, per le opzioni della riga di comando passate al browser\nXDG_OPEN='/usr/bin/xdg-open'\nDEFAULT_BROWSER='/usr/bin/firefox'\n\nif echo \"$1\"|pcregrep -q '^https?://'; then\n    matching=0\n    while read domain; do\n\tif echo \"$1\"|pcregrep -q \"^https?://${domain}\"; then\n\t    matching=1\n\t    break\n\tfi\n    done < \"$DOMAIN_LIST_FILE\"\n\n    if [[ $matching -eq 1 ]]; then\n\t\"$OTHER_BROWSER\" $BROWSER_OPTIONS ${*}\n\texit 0\n    fi\n    \n    \"$DEFAULT_BROWSER\" ${*}\n    exit 0\nelse\n    \"$XDG_OPEN\" ${*}\nfi\n</nowiki>}}\n\nConfigura i domini per il reindirizzamento a \"Chromium\":\n\n{{hc|$HOME/domains.txt|<nowiki>\nstackexchange.com\nstackoverflow.com\nsuperuser.com\nwww.youtube.com\ngithub.com\n</nowiki>}}\n\nImposta '' xdg-open web '' come applicazione desktop:\n\n{{hc|$HOME/.local/share/applications/xdg-open-web.desktop|<nowiki>\n[Desktop Entry]\nVersion=1.0\nName=xdg-open web\nGenericName=Web Browser\nExec=xdg-open %u\nTerminal=false\nType=Application\nMimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;\nStartupNotify=true\nCategories=Network;WebBrowser;\nKeywords=web;browser;internet;\nActions=new-window;new-private-window;\n</nowiki>}}\n\n $ update-desktop-database $HOME/.local/share/applications/\n\nImposta '' xdg-open web '' come applicazione Web predefinita nelle impostazioni di GNOME:\nVai su \"Impostazioni GNOME> Dettagli> Applicazioni predefinite\" e imposta \"Web\" su \"xdg-open web\".\n\n== Rimozione pellicola delle miniature dei video in Nautilus ==\n\nNautilus (File) sovrappone i fori della pellicola / l'effetto striscia di pellicola sulle miniature dei video a partire da Gnome 3.12. Per rimuovere o sovrascrivere questo effetto, la variabile d'ambiente {{ic|G_RESOURCE_OVERLAYS}} pu\u00f2 essere utilizzata per fare riferimento al percorso di una risorsa compilata (in questo caso {{ic|filmholes.png}}) e specificare il percorso per l'overlay pertinente . Questa variabile d'ambiente \u00e8 disponibile solo da GLib 2.50 e non avr\u00e0 effetto sulle versioni precedenti.\n\nEstrai {{ic|filmholes.png}} da Nautilus.\n\n gresource extract /usr/bin/nautilus /org/gnome/nautilus/icons/filmholes.png > filmholes.png\n\nModifica {{ic|filmholes.png}} utilizzando il tuo editor preferito e rimuovi l'effetto pellicola dall'immagine, lasciando intatte la trasparenza e le dimensioni, quindi sovrascrivendo l'immagine estratta.\n\nCopia o sposta l'immagine estratta dove desiderato, ad esempio {{ic|/ usr / share / icons /}} e modifica {{ic|~ / .profile}}, aggiungendo la seguente esportazione, cambiando {{ic|/ usr / condividi / icons /}} come necessario per la posizione in cui hai inserito il file.\n\n export G_RESOURCE_OVERLAYS=/org/gnome/nautilus/icons/filmholes.png=/usr/share/icons/filmholes.png\n\nSe {{Pkg|ffmpegthumbnailer}} \u00e8 stato installato come dipendenza per un altro file manager che potrebbe generare miniature, la riga {{ic|Exec}} in {{ic|/usr/share/thumbnailers/ffmpegthumbnailer.thumbnailer}} dovrebbe essere modificato rimuovendo il flag {{ic|-f}}.\n\nPer assicurarti che non rimangano miniature che potrebbero gi\u00e0 avere l'effetto pellicola incorporato, rimuovi la cache delle miniature.\n\n rm -r ~/.cache/thumbnails\n\nEsci e torna alla tua sessione e non dovresti pi\u00f9 avere l'effetto fori della pellicola / striscia di pellicola sulle tue miniature in Nautilus.\n\n== Impedisci al software GNOME di scaricare gli aggiornamenti ==\n\nPer impostazione predefinita {{pkg|gnome-software}} scaricher\u00e0 i pacchetti aggiornati dai repository di Arch Linux. Questo forza il software GNOME ad aggiornare automaticamente gli elenchi dei pacchetti per \"pacman\". Questo \u00e8 l'equivalente di {{ic|pacman -Sy}}. Se l'utente ignora il prompt di aggiornamento del software GNOME, ma installa un nuovo pacchetto, ci\u00f2 risulter\u00e0 in [[partial upgrade]]s, che sono '' 'non supportati' ''. Per impedire al software GNOME di aggiornare gli elenchi dei pacchetti, impostare la seguente impostazione dconf:\n\n $ gsettings set org.gnome.software download-updates false\n\n== Aumenta il volume oltre il 100% ==\n\nInstalla l'estensione [https://extensions.gnome.org/extension/858/volume-mixer/ volume mixer]. Quindi utilizzare il mouse per scorrere sopra l'icona del volume nel pannello superiore per aumentare il volume oltre il 100%.\n\n== Regola il volume a passi pi\u00f9 piccoli ==\n\nPer impostazione predefinita, premendo i tasti del volume della tastiera si regola il volume del 6%. Se si desiderano passi pi\u00f9 piccoli, la scorciatoia '' Maiusc + Tasto volume su / gi\u00f9 '' regola il volume in passi del 2%.\n\nInoltre, a partire da GNOME 3.36, \u00e8 ora possibile regolare direttamente il passo del volume tramite un'impostazione di dconf. Ad esempio, per impostare l'incremento del volume al 2%, eseguire quanto segue:\n\n $ gsettings set org.gnome.settings-daemon.plugins.media-keys volume-step 2\n\n== Mostra la percentuale del volume del suono accanto all'icona del pannello superiore ==\n\nInstalla l'estensione [https://github.com/maoschanz/sound-percentage-gs-extension sound percentage] per visualizzare il livello del volume di output corrente accanto all'icona del suono nel pannello superiore.\n\n== Sospensione ibrida sull'azione di chiusura del coperchio del laptop ==\n\nSeguire i comandi seguenti per attivare [[Power management/Suspend and hibernate|Hybrid Sleep]] quando si chiude il coperchio del laptop. Leggi [https://www.reddit.com/r/gnome/comments/97688y/can_gnome_trigger_hybrid_sleep_on_laptop_lid/ qui] per ulteriori informazioni.\n\n    mkdir --parents /etc/systemd/logind.conf.d\n    printf '%s\\n' '[Login]' 'HandleLidSwitch=hybrid-sleep' >/etc/systemd/logind.conf.d/50-local.conf\n    systemctl restart systemd-logind.conf\n\n== Avvia su GPU discreta ==\n\nInstalla {{Pkg|switcheroo-control}} o {{AUR|switcheroo-control-git}}.\n[[start]] e [[enable]] {{ic|switcheroo-control.service}}\n\n== Elenco finestre ==\n\nSe ti piace avere un elenco di attivit\u00e0 in basso ma non ti piace il colore nero predefinito di questa estensione, copia la sua directory:\n\n cp -r /usr/share/gnome-shell/extensions/window-list@gnome-shell-extensions.gcampax.github.com/ ~/.local/share/gnome-shell/extensions/\n\ne modifica il CSS a tuo piacimento. Ad esempio, per renderlo trasparente modifica {{ic|stylesheet.css}} in questo modo:\n\n .bottom-panel {\n   background: transparent;\n\n .window-button > StWidget,\n .window-picker-toggle > StWidget {\n   background-color: transparent;\n\n== Consultare inoltre ==\n\n* [[GNOME (Italiano)|Gnome]]"
                    }
                ]
            },
            "9802": {
                "pageid": 9802,
                "ns": 0,
                "title": "OpenSSH (Espa\u00f1ol)",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Secure Shell (Espa\u00f1ol)]]\n[[Category:Servers (Espa\u00f1ol)]]\n[[Category:OpenBSD (Espa\u00f1ol)]]\n[[de:SSH]]\n[[en:OpenSSH]]\n[[fr:OpenSSH]]\n[[ja:OpenSSH]]\n[[pt:Secure Shell]]\n[[ru:OpenSSH]]\n[[zh-hans:OpenSSH]]\n{{TranslationStatus (Espa\u00f1ol)|OpenSSH|2018-01-05|352767}}\n{{Related articles start (Espa\u00f1ol)}}\n{{Related|SSH keys (Espa\u00f1ol)}}\n{{Related|Pam abl}}\n{{Related|fail2ban}}\n{{Related|sshguard (Espa\u00f1ol)}}\n{{Related|SSHFS (Espa\u00f1ol)}}\n{{Related|Syslog-ng}}\n{{Related|SFTP chroot}}\n{{Related articles end}}\n\n'''S'''ecure '''Sh'''ell o '''SSH''' es un protocolo de red que permite el intercambio de datos sobre un canal seguro entre dos computadoras. SSH usa t\u00e9cnicas de cifrado que hacen que la informaci\u00f3n que viaja por el medio de comunicaci\u00f3n vaya de manera no legible y ninguna tercera persona pueda descubrir el usuario y contrase\u00f1a de la conexi\u00f3n ni lo que se escribe durante toda la sesi\u00f3n. SSH usa criptograf\u00eda de clave p\u00fablica para autenticar el equipo remoto y permitir al mismo autenticar al usuario si es necesario.\n\nSSH se suele utilizar para iniciar una sesi\u00f3n en una m\u00e1quina remota, donde poder ejecutar \u00f3rdenes, pero tambi\u00e9n permite la tunelizaci\u00f3n, el reenv\u00edo de puertos TCP de forma arbitraria y de conexiones X11; tambi\u00e9n se pueden realizar transferencias de archivos usando protocolos SFTP o SCP asociados.\n\nUn servidor SSH, por defecto, escucha el puerto TCP 22. Un programa cliente de SSH es utilizado, generalmente, para establecer conexiones a un demonio ''sshd'' que acepta conexiones remotas. Ambos se encuentran com\u00fanmente en los sistemas operativos m\u00e1s modernos, incluyendo Mac OS X, Linux, Solaris y OpenVMS. Existen versiones propietarias, freeware y open-source de varios niveles de complejidad y exhaustividad.\n\n(Source: [[Wikipedia:es:Secure Shell]])\n\n== OpenSSH ==\n\nOpenSSH (OpenBSD Secure Shell) es un conjunto de programas de computadora que proveen una sesi\u00f3n de comunicaci\u00f3n encriptada en una red inform\u00e1tica que utiliza el protocolo SSH. Fue creado como una alternativa de c\u00f3digo abierto al software propietario ofrecido por SSH Communications Security. OpenSSH es desarrollado como parte del proyecto OpenBSD, que est\u00e1 a cargo de Theo de Raadt.\n\nOpenSSH es confundido a veces con OpenSSL por la similitud de nombre, sin embargo, los proyectos tienen objetivos distintos y est\u00e1n desarrollados por equipos diferentes.\n\n=== Instalaci\u00f3n ===\n\n[[Help:Reading (Espa\u00f1ol)#Instalaci\u00f3n de paquetes|Instale]] {{Pkg|openssh}} desde los [[official repositories (Espa\u00f1ol)|repositorios oficiales]].\n\n=== Cliente ===\n\nPara conectarse a un servidor, ejecuta:\n\n $ ssh -p ''puerto'' ''usuario''@''direcci\u00f3n-servidor''\n\nSi el servidor solo acepta verificaci\u00f3n con claves p\u00fablicas, siga las instrucciones en [[SSH keys (Espa\u00f1ol)|claves SSH]].\n\n==== Configuraci\u00f3n ====\n\nEl archivo de configuraci\u00f3n del cliente SSH se puede encontrar y editar en {{ic|~/.ssh/config}}.\n\nEl cliente se puede configurar para guardar servidores y opciones comunes. Todas las opciones se pueden declarar globalmente o se pueden restringir a un servidor especifico. Por ejemplo:\n\n{{hc|~/.ssh/config|# opciones globales\nUser ''usuario''\n\n# opciones especificas por servidor\nHost miServidor\n    HostName ''direci\u00f3n-servidor''\n    Port     ''puerto''}}\n\nCon dicha configuraci\u00f3n, los siguientes comando son equivalentes:\n\n $ ssh -p ''puerto'' ''usuario''@''direcci\u00f3n-servidor''\n $ ssh miServidor\n\nVea {{man|5|ssh_config}} para m\u00e1s informaci\u00f3n.\n\nAlgunas opciones no tienen parametros equivalentes en al ejecutar un comando directamente, pero se puede especificar opciones en en comando con el parametro {{ic|-o}}. Por ejemplo {{ic|1=-oKexAlgorithms=+diffie-hellman-group1-sha1}}.\n\n=== Servidor ===\n\n==== Configuraci\u00f3n ====\n\nEl archivo de configuraci\u00f3n del demonio SSH se puede encontrar y editar en {{ic|/etc/ssh/ssh'''d'''_config}}.\n\nPara permitir el acceso s\u00f3lo a algunos usuarios a\u00f1adir esta l\u00ednea:\n AllowUsers    user1 user2\n\nPara permitir el acceso s\u00f3lo a algunos grupos:\n AllowGroups group1 group2\n\nPara agregar un agradable mensaje de bienvenida edite el archivo {{ic|/etc/issue}} y cambie la l\u00ednea Banner para que luzca as\u00ed:\n Banner /etc/issue\n\nClaves de acceso del servidor ser\u00e1n generadas autom\u00e1ticamente por los [[#Gesti\u00f3n del Demonio|archivos de servicio]] de ''sshd''. Si se desea usar una clave especifica, previamente creada, se puede configurar manualmente:\n\n HostKey /etc/ssh/ssh_host_rsa_key\n\nSi el servidor va a estar expuesto a la WAN, es recomendado cambiar el puerto por defecto 22 a algo aleatorio y superior:\n\n Port 39901\n\n{{Tip (Espa\u00f1ol)|\n*Es posible que desee cambiar el puerto por defecto de 22 a cualquier puerto superior (ver [[Wikipedia:es:Seguridad_por_oscuridad|seguridad por oscuridad]]). A pesar de que el puerto ssh que est\u00e1 siendo ejecutado puede ser detectado utilizando un port-scanner o esc\u00e1ner de puertos como {{Pkg|nmap}}, cambiarlo reducir\u00e1 el n\u00famero de entradas en el log causados por intentos de autentificaci\u00f3n autom\u00e1ticos. Para ayudar a seleccionar un puerto, revise la [[Wikipedia:es:Anexo:N\u00fameros_de_puerto|lista de n\u00fameros de puerto TCP y UDP]]. Tambi\u00e9n puede encontrar informaci\u00f3n de los puertos a nivel local en {{ic|/etc/services}}. Seleccione un puerto alternativo que '''no''' est\u00e9 ya asignado a un servicio com\u00fan para evitar conflictos.\n* Desactivar completamente los inicios de sesi\u00f3n con contrase\u00f1a aumentar\u00e1 en gran medida el nivel seguridad, consulte [[#Forzamiento de autenticaci\u00f3n con claves p\u00fablicas]] para m\u00e1s informaci\u00f3n.\n}}\n\n==== Gesti\u00f3n del Demonio ====\n\n{{Pkg|openssh}} viene con un archivo de unidad de [[systemd (Espa\u00f1ol)|systemd]]:\n\n#{{ic|sshd.service}}, el cual mantendra el demonio de SSH permanentemente activo y bifurcara para cada conexi\u00f3n entrante. [https://github.com/archlinux/svntogit-packages/blob/packages/openssh/trunk/sshd.service#L16] Es especialmente interesante para sistemas con bastante trafico de SSH. [https://github.com/archlinux/svntogit-packages/blob/4cadf5dff444e4b7265f8918652f4e6dff733812/trunk/sshd.service#L15] \n\nSe puede [[systemd (Espa\u00f1ol)#Utilizar las unidades|activar]] y [[systemd (Espa\u00f1ol)#Utilizar las unidades|activar inicio autom\u00e1tico]] de {{ic|sshd.service}} para empezar a usar el demonio.\n\nSi se desea utilizar un puerto diferente al puerto por defecto 22, tendremos que modificar el fichero de configuraci\u00f3n del demonio ubicado en /etc/ssh/sshd_config, buscar la l\u00ednea Port=* y cambiar por el puerto deseado.\n\n{{Warning (Espa\u00f1ol)|\n* Systemd inicia los procesos de manera as\u00edncrona. Si se amarra el demonio SSH a una direcci\u00f3n IP espec\u00edfica {{ic|ListenAddress 192.168.1.100}} puede ser que no cargue al arranque porque por defecto el archivo sshd.service no depende de que se hayan habilitado las interfaces de red. Cuando se amarre a una direcci\u00f3n IP, es necesario agregar {{ic|After&#61;network.target}} a un archivo personalizado de sshd.service. Ver [[Systemd (Espa\u00f1ol)#Modificar los archivos de unidad suministrados]].\n}}\n\n{{Tip (Espa\u00f1ol)|Cuando se utiliza la activaci\u00f3n del socket, ni {{ic|sshd.socket}} ni {{ic|sshd.service}} permiten supervisar los intentos de conexi\u00f3n en el registro, pero si lo puede ver al ejecutar {{ic|# journalctl /usr/bin/sshd}}.}}\n\n==== Protecci\u00f3n ====\n\nPermitir el acceso remoto al sistema a trav\u00e9s de SSH es bueno para fines administrativos, pero puede representar una amenaza para la seguridad de su servidor. A menudo es el blanco de ataques de fuerza bruta, por lo que el acceso SSH necesita ser limitado adecuadamente para evitar que terceros accedan a su servidor.\n* Utilice nombres de cuenta y contrase\u00f1as no est\u00e1ndar .\n* Permita solo conexiones SSH entrantes desde ubicaciones de confianza.\n* Utilice [[fail2ban]] o [[sshguard]] para controlar los ataques de fuerza bruta, y banear las IP que se correspondan con las de los ataques de fuerza bruta.\n\n===== Forzamiento de autenticaci\u00f3n con claves p\u00fablicas =====\n\nSi un cliente no se puede autenticar mediante clave p\u00fablica, por defecto el servidor de SSH intentar\u00e1 autenticar con contrase\u00f1a, permitiendo as\u00ed que un usuario malicioso intente ganar acceso con [[#Protecci\u00f3n contra ataques de fuerza bruta|ataques de fuerza bruta]] en la contrase\u00f1a. Uno de los m\u00e9todos m\u00e1s efectivos para proteger el sistema contra esta clase de ataques es desactivando el inicio de sesi\u00f3n con contrase\u00f1a completamente, forzando as\u00ed el uso de [[SSH keys (Espa\u00f1ol)|claves SSH]]. Esto se puede lograr modificando la siguiente opci\u00f3n en el archivo {{ic|sshd_config}}:\n\n PasswordAuthentication no\n\n{{Warning (Espa\u00f1ol)|Antes de efectuar este ajuste, aseg\u00farese de que todas las cuentas que requieren acceso SSH, tienen configurada la autenticaci\u00f3n de la clave p\u00fablica en los correspondientes archivos {{ic|authorized_keys}}. Vea [[SSH keys#Copying the public key to the remote server]] para m\u00e1s informaci\u00f3n.\n}}\n\n===== Autenticaci\u00f3n de dos factores y claves p\u00fablicas =====\n\nDesde la versi\u00f3n 6.2 de OpenSSH, se puede agregar su propia utilidad para autenticar usando la opci\u00f3n {{ic|AuthenticationMethods}}. Esta opci\u00f3n da la posibilidad de usar sus claves p\u00fablicas o autenticaci\u00f3n de dos factores.\n\nVea [[Google Authenticator (Espa\u00f1ol)|Autenticador de Google]] para configurar el autenticador de Google.\n\nPara usar [[PAM (Espa\u00f1ol)|PAM]] son OpenSSH, edite las siguientes lineas:\n\n{{hc|/etc/ssh/sshd_config|\nChallengeResponseAuthentication yes\nAuthenticationMethods publickey keyboard-interactive:pam\n}}\n\nDespu\u00e9s puede iniciar sesi\u00f3n ya sea con clave p\u00fablica '''o''' con la autenticaci\u00f3n del usuario, tal como es requerido en la configuraci\u00f3n de PAM.\n\nSi, por otra parte se quiere autenticar el usuario con la clave p\u00fablica y la autenticaci\u00f3n especificada en la configuraci\u00f3n de PAM, use una coma en lugar de un espacio para separar los {{ic|AuthenticationMethods}}.\n\n{{hc|/etc/ssh/sshd_config|\nChallengeResponseAuthentication yes\nAuthenticationMethods publickey''','''keyboard-interactive:pam\n}}\n\nCuando se requiere autenticaci\u00f3n de clave p\u00fablica '''y''' PAM, es deseable desactivar el requisito de contrase\u00f1a:\n\n{{hc|/etc/pam.d/sshd|\n# Desactive inicio de sesi\u00f3n root remoto\nauth      required  pam_securetty.so\n# Requerido por el authenticator de google\nauth      required  pam_google_authenticator.so\n# Desactive inicio de sesi\u00f3n con contrase\u00f1a\n#auth      include   system-remote-login\naccount   include   system-remote-login\npassword  include   system-remote-login\nsession   include   system-remote-login\n}}\n\n===== Protecci\u00f3n contra ataques de fuerza bruta =====\n\nEl concepto de [[Wikipedia:es:Ataque_de_fuerza_bruta|ataques de fuerza bruta]] es simple: es un mecanismo por el que alguien trata continuamente de iniciar sesi\u00f3n en una p\u00e1gina web o un servidor para acceder a un prompt como SSH utilizando un elevado n\u00famero de combinaciones de nombre de usuario y contrase\u00f1a aleatorios.\n\n====== Usango ufw ======\n\nVea [[ufw#Rate limiting with ufw]].\n\n====== Usando iptables ======\n\nSi su sistema ya esta usando iptables, se puede proteger f\u00e1cilmente contra los ataques de fuerza bruta usando la siguientes reglas\n\n{{Note (Espa\u00f1ol)|En este ejemplo el puerto de SSH fue cambiado al puerto TCP 42660.\n}}\n\nAntes de usar las siguientes reglas es necesario crear una nueva regla que registra y descarta demasiados intentos de conexi\u00f3n:\n\n # iptables -N LOG_AND_DROP\n\nLa primera regla va a ser aplicada a paquetes que se\u00f1aalan el comienzo de nuevas conexiones con destino el puert TCP 42660.\n\n # iptables -A INPUT -p tcp -m tcp --dport 42660 -m state --state NEW -m recent --set --name DEFAULT --rsource\n\nEsta regla le permite a iptables buscar por paquetes que coinciden con los par\u00e1metros de la regla anterior, y que provienen de servidores que ya est\u00e1n en la lista de vigilancia.\n\n # iptables -A INPUT -p tcp -m tcp --dport 42660 -m state --state NEW -m recent --update --seconds 90 --hitcount 4 --name DEFAULT --rsource -j LOG_AND_DROP\n\nAhora iptables decide que hacer con trafico con destino al puerto TCP 42660 que no coincide con la regla anterior.\n\n # iptables -A INPUT -p tcp -m tcp --dport 42660 -j ACCEPT\n\nSe adjunta esta regla a la tabla de registro y descarte, y se usa el operador {{ic|-j}} (jump), para pasar la informaci\u00f3n del paquete al registro.\n\n # iptables -A LOG_AND_DROP -j LOG --log-prefix \"iptables deny: \" --log-level 7\n\nDespu\u00e9s que el paquete es registrado por la primera regla, el resto de paquetes sera descartado.\n\n # iptables -A LOG_AND_DROP -j DROP\n\n====== Utilidades para prevenir ataques de fuerza bruta ======\n\nSe pueden prevenir los ataques de fuerza bruta usando un script automatizado que bloquea a cualquiera que intenta usar fuerza bruta, por ejemplo [[fail2ban]] o [[Sshguard (Espa\u00f1ol)|sshguard]].\n\n* Solo permite conexiones SSH entrantes de ubicaciones de confianza.\n* Use [[fail2ban]] o [[Sshguard (Espa\u00f1ol)|sshguard]] para bloquear direcciones IP que fallan en la autenticaci\u00f3n con contrase\u00f1a demasiadas veces.\n* Use [https://github.com/jtniehof/pam_shield pam_shield] para bloquear direcciones IP que intentan iniciar sesi\u00f3n demasiadas veces en un periodo de tiempo determinado. En comparaci\u00f3n con [[fail2ban]] o [[Sshguard (Espa\u00f1ol)|sshguard]], este programa no toma en cuenta si el intento de inicio de sesi\u00f3n fue exitoso o no.\n\n===== Limitar el inicio de sesi\u00f3n como root =====\n\nEn general, se considera una mala pr\u00e1ctica permitir que el usuario root inicie sesi\u00f3n sin restricciones a trav\u00e9s de SSH. Hay dos m\u00e9todos por los cuales el acceso de root a SSH puede ser restringido para mayor seguridad.\n\n====== Denegar ======\n\nSudo proporciona los derechos de root de forma selectiva para las acciones que requieran de estos derechos, sin necesidad de autenticarse con la cuenta de root. Esto permite el bloqueo de la cuenta root para acceder a trav\u00e9s de SSH y funciona como una medida de seguridad frente a los potenciales ataques de fuerza bruta, ya que ahora un atacante debe adivinar, adem\u00e1s del nombre de la cuenta, la contrase\u00f1a.\n\nSSH se puede configurar para negar las conexiones remotas con el usuario root, editando la secci\u00f3n \u00abAuthentication\u00bb en {{ic|/etc/ssh/sshd_config}}. Basta con cambiar {{ic|#PermitRootLogin yes}} a {{ic|no}} y descomentar la l\u00ednea:\n\n{{hc|/etc/ssh/sshd_config|\nPermitRootLogin no\n...\n}}\n\nA continuaci\u00f3n, reiniciar el demonio de SSH:\n  # systemctl restart sshd\n\nAhora va a ser incapaz de conectarse por SSH como root, pero todav\u00eda ser\u00e1 capaz de iniciar sesi\u00f3n con su usuario normal y utilizar [[su (Espa\u00f1ol)]] o [[sudo (Espa\u00f1ol)]] para hacer la administraci\u00f3n del sistema.\n\n====== Restringir ======\n\nAlgunas tareas automatizadas realizadas a distancia, como copia de seguridad de todo el sistema, requieren el acceso de root completo. Para permitir que esto se haga de una manera segura, en lugar de desactivar el inicio de sesi\u00f3n de root a trav\u00e9s de SSH, es posible permitir las conexiones de root solo para ciertas \u00f3rdenes seleccionadas. Esto se puede lograr editando {{ic|~root/.ssh/authorized_keys}}, y anteponiendo la clave deseada, por ejemplo, como sigue:\n\n command=\"/usr/lib/rsync/rrsync -ro /\" ssh-rsa \u2026\n\nEsto permitir\u00e1 cualquier inicio de sesi\u00f3n con esta clave espec\u00edfica, solo para ejecutar la orden especificada entre las comillas.\n\nEl aumento de la superficie de ataque creado por exponer el nombre de usuario root al iniciar la sesi\u00f3n, se puede compensar a\u00f1adiendo lo siguiente a {{ic|sshd_config}}:\n\n PermitRootLogin forced-commands-only\n\nEste ajuste no solo restringir\u00e1 las \u00f3rdenes que puede ejecutar root a trav\u00e9s de SSH, sino que tambi\u00e9n desactiva el uso de contrase\u00f1as, forzando el uso de la autenticaci\u00f3n de la clave p\u00fablica para la cuenta root.\n\nHay una alternativa un poco menos restrictiva, que permitir\u00e1 ejecutar cualquier orden por root, pero hace los ataques de fuerza bruta no factibles mediante la exigencia de la autenticaci\u00f3n de la clave p\u00fablica. Para esta opci\u00f3n, establezca:\n\n PermitRootLogin without-password\n\n==== VirtualBox ====\n\nPara comunicarse entre hu\u00e9sped y anfitri\u00f3n de VirtualBox, el puerto del servidor debe ser reenviado en Settings > Network. Al conectarse desde el cliente/anfitri\u00f3n, conecte a la direcci\u00f3n IP de la m\u00e1quina del cliente/anfitri\u00f3n, en oposici\u00f3n a la conexi\u00f3n de la otra m\u00e1quina. Esto es porque la conexi\u00f3n se realizar\u00e1 a trav\u00e9s de un adaptador virtual.\n\n== Otros servidores y clientes SSH ==\n\nAparte de OpenSSH, hay otros muchos [[Wikipedia:Comparison of SSH clients|clientes]] y [[Wikipedia:Comparison of SSH servers|servidores]] SSH disponibles.\n\n=== Dropbear ===\n\n[[Wikipedia:Dropbear (software)|Dropbear]] es un cliente SSH-2  y un servidor. El paquete {{Pkg|dropbear}} est\u00e1 disponible en [[Arch User Repository (Espa\u00f1ol)|AUR]].\n\nEl cliente ssh en l\u00ednea de \u00f3rdenes se llama dbclient.\n\n=== SSH alternativa: Mobile Shell - responsive, survives disconnects ===\n\nDel [https://mosh.mit.edu/ sitio web]{{Dead link (Espa\u00f1ol)|2023|05|06|status=404}} de Mosh:\n\nAplicaci\u00f3n de terminal remoto que permite la itinerancia, soporta conectividad intermitente y proporciona echo local inteligente y la edici\u00f3n de l\u00ednea de keystrokes del usuario. Mosh es un reemplazo para SSH. Es m\u00e1s robusto y sensible, sobre todo a trav\u00e9s de Wi-Fi, m\u00f3vil y enlaces de larga distancia.\n\n[[Help:Reading (Espa\u00f1ol)#Instalaci\u00f3n de paquetes|Instale]] {{Pkg|mosh}} desde los [[official repositories (Espa\u00f1ol)|repositorios oficiales]] o la \u00faltima revisi\u00f3n {{AUR|mosh-git}} desde [[AUR (Espa\u00f1ol)|AUR]].\n\n== Trucos y sugerencias ==\n\n=== T\u00faneles SOCKS cifrados ===\n\nEste tipo de conexi\u00f3n es muy \u00fatil para usuarios de equipos port\u00e1tiles conectados a varias conexiones inal\u00e1mbricas no seguras. Lo \u00fanico que necesitas es un servidor SSH corriendo en alg\u00fan lugar seguro, como tu casa o tu trabajo. Puede ser \u00fatil usar un servicio de DNS din\u00e1mico como [http://www.dyndns.org/ DynDNS] para no tener que recordar la direcci\u00f3n IP a la que desea conectarse.\n\n==== Paso 1: Iniciar la conexi\u00f3n ====\n\nLo \u00fanico que tienes que hacer es ejecutar este comando en tu terminal favorita para iniciar la conexi\u00f3n:\n\n $ ssh -ND 4711 ''user''@''host''\n\ndonde {{Ic|''user''}} es tu nombre de usuario en el servidor SSH que se est\u00e1 ejecutando en el {{Ic|''host''}}. Preguntar\u00e1 por tu contrase\u00f1a, y luego \u00a1estar\u00e1s conectado! El par\u00e1metro {{Ic|N}} desactiva el prompt interactivo, y el {{Ic|D}} especifica el puerto local en el cual escuchar (puedes elegir el numero de puerto que quieras). El par\u00e1metro {{Ic|T}} desactiva la asignaci\u00f3n pseudo-tty.\n\nLe puede interesar a\u00f1adir el par\u00e1metro ''verbose'' ({{Ic|-v}}), ya que la salida le permite comprobar que est\u00e1 realmente conectado.\n\n==== Paso 2: Configurar tu navegador (u otros programas) ====\n\nEl paso anterior es in\u00fatil si no configura el navegador web (u otros programas) para su uso con el t\u00fanel que acaba de crear. Debido a que la versi\u00f3n actual de SSH soporta SOCKS4 y SOCKS5, se puede usar cualquiera de ellos.\n\n* Para Firefox: ''Editar &rarr; Preferencias &rarr; Avanzadas &rarr; Red &rarr; Conexi\u00f3n &rarr; Configuraci\u00f3n'':\n: Marca la casilla ''\"Configuraci\u00f3n manual de proxy\"'' , y escribe {{ic|localhost}} en el campo ''\"servidor SOCKS\"'' , y luego escribe tu n\u00famero de puerto en el siguiente campo de texto ({{ic|4711}} en el siguiente ejemplo).\n\nFirefox no hace autom\u00e1ticamente las peticiones DNS a trav\u00e9s del t\u00fanel socks. Este potencial problema de privacidad puede ser mitigado por los siguientes pasos:\n\n# Escriba \u00ababout:config\u00bb en la barra de navegaci\u00f3n de Firefox.\n# Busque por \u00abnetwork.proxy.socks_remote_dns\u00bb\n# Ajuste el valor a \u00abtrue\u00bb.\n# Reinicie el navegador.\n\n* Para Chromium: Se pueden setear las configuraciones de SOCKS como variables de entorno o como opciones en l\u00ednea de comandos. Es recomendable agregar una de las siguientes funciones a {{ic|.bashrc}}:\n function secure_chromium() {\n     port=4711\n     export SOCKS_SERVER=localhost:$port\n     export SOCKS_VERSION=5\n     chromium &\n     exit\n }\no\n function secure_chromium {\n     port=4343\n     chromium --proxy-server=\"socks://localhost:$port\" &\n     exit\n }\n\nAhora solo queda abrir una terminal y escribir:\n $ secure_chromium\n\nListo. \u00a1Disfruta tu t\u00fanel seguro!\n\n=== Redireccionar X11 ===\n\n''X11 forwarding'' es un mecanismo que permite a las interfaces gr\u00e1ficas de los programas de X11, que se ejecutan en un sistema remoto, mostrarse en una m\u00e1quina cliente local. Para reenviar X11 al equipo remoto, este no necesita tener un sistema completo X11 instalado, sin embargo, necesita, al menos, tener ''xauth'' instalado. ''xauth'' es una utilidad que mantiene las configuraciones de {{ic|Xauthority}} utilizadas por el servidor y el cliente para la autenticaci\u00f3n de la sesi\u00f3n de X11 ([https://www.xmodulo.com/how-to-enable-x11-forwarding-using-ssh.html fuente]).\n\n{{Warning (Espa\u00f1ol)|Redirigir X11 tiene importantes implicaciones de seguridad que aconsejan la lectura de, al menos, las secciones pertinentes de {{ic|ssh}}, {{ic|sshd_config}} y {{ic|ssh_config}} de las p\u00e1ginas del manual. Vea tambi\u00e9n [https://security.stackexchange.com/questions/14815/security-concerns-with-x11-forwarding esta breve nota].}}\n\n==== Configuraci\u00f3n ====\n\nEn el sistema remoto:\n\n*[[Help:Reading (Espa\u00f1ol)#Instalaci\u00f3n de paquetes|Instale]] {{Pkg|xorg-xauth}} y {{Pkg|xorg-xhost}} desde los [[official repositories (Espa\u00f1ol)|repositorios oficiales]]\n*en {{ic|/etc/ssh/ssh'''d'''_config}}:\n**verifique que las opciones {{ic|AllowTcpForwarding}} y {{ic|X11UseLocalhost}} est\u00e1n ajustadas a ''yes'', y que {{ic|X11DisplayOffset}} est\u00e1 ajustado a ''10'' (esos son los valores por defecto si no se han cambiado, ver {{man|5|sshd_config}})\n**ajuste {{ic|X11Forwarding}} a ''yes''\n* a continuaci\u00f3n, [[systemd (Espa\u00f1ol)#Utilizar las unidades|reinicie]] el [[#Gesti\u00f3n del Demonio|demonio ''sshd'']]. \n\nEn el sistema cliente, active la opci\u00f3n {{ic|ForwardX11}},  bien especificando el par\u00e1metro {{ic|-X}} en la l\u00ednea de \u00f3rdenes para las conexiones ocasionales, bien ajustando {{ic|ForwardX11}} a ''yes'' en el [[#Cliente|archivo de configuraci\u00f3n del cliente de openSSH]].\n\n{{Tip (Espa\u00f1ol)|Puede activar la opci\u00f3n {{ic|ForwardX11Trusted}} ({{ic|-Y}} en la l\u00ednea de \u00f3rdenes) si la interfaz gr\u00e1fica est\u00e1 llegando mal o recibe errores; esto evitar\u00e1 que las redirecciones de X11 vengan sujetas a los controles de la [https://www.x.org/wiki/Development/Documentation/Security/ extensi\u00f3n de SEGURIDAD de X11]. Aseg\u00farese de haber entendido [[#Redireccionar X11|la advertencia]] del comienzo de esta secci\u00f3n, si lo hace.}}\n\n==== Utilizaci\u00f3n ====\n\nInicie sesi\u00f3n en el equipo remoto como de costumbre, especificando el par\u00e1metro {{ic|-X}} si ''ForwardX11'' no se ha activado en el archivo de configuraci\u00f3n del cliente:\n $ ssh -X ''user@host''\n\nSi recibe errores tratando de ejecutar aplicaciones gr\u00e1ficas, pruebe ''ForwardX11Trusted'' en su lugar:\n $ ssh -Y ''user@host''\n\nAhora puede iniciar cualquier programa X en el servidor remoto, la salida ser\u00e1 enviada a su sesi\u00f3n local:\n $ xclock\n\nSi recibe errores como \u00abCannot open display\u00bb, pruebe la siguiente orden como usuario no root:\n $ xhost +\n\nLa orden anterior permitir\u00e1 a cualquiera transmitir aplicaciones X11. Para limitar el reenv\u00edo a un tipo de equipo particular:\n $ xhost +hostname\n\ndonde hostname es el nombre del equipo en particular al que desea remitirse. Ver {{man|1|xhost}} para m\u00e1s detalles.\n\nTenga cuidado con algunas aplicaciones, ya que hacen un chequeo para ejecutar una instancia en la m\u00e1quina local. [[Firefox]] es un ejemplo: o bien cierre la instancia de Firefox en ejecuci\u00f3n o utilice el siguiente par\u00e1metro de inicio para poner en marcha una instancia remota en el equipo local:\n $ firefox -no-remote\n\nSi recibe \u00abX11 forwarding request failed on channel 0\u00bb cuando se conecta (y el archivo {{ic|/var/log/errors.log}} del servidor  muestra \u00abFailed to allocate internet-domain X11 display socket\u00bb), aseg\u00farese de que el paquete {{Pkg|xorg-xauth}} est\u00e1 instalado. Si su instalaci\u00f3n no funciona, pruebe cualquiera de los dos opciones siguientes:\n\n* active la opci\u00f3n {{ic|AddressFamily any}} en {{ic|ssh'''d'''_config}} en el ''server'', o\n* ajuste la opci\u00f3n {{ic|AddressFamily}} en {{ic|ssh'''d'''_config}} en el ''server'' a inet.\nSi establece \u00abinet\u00bb puede arreglar los problemas con los clientes de Ubuntu en IPv4.\n\nPara ejecutar aplicaciones X como otro usuario en el servidor SSH, necesita la l\u00ednea de autenticaci\u00f3n {{ic|xauth add}} tomada desde {{ic|xauth list}} de la sesi\u00f3n SSH del usuario conectado.\n\n=== Redireccionar otros puertos ===\n\nAdem\u00e1s del soporte integrado de SSH para redirigir X11, dicho soporte se puede usar tambi\u00e9n para asegurar el canal de cualquier conexi\u00f3n TCP, mediante su re direcci\u00f3n local o remota.\n\nEl reenv\u00edo local abre un puerto en la m\u00e1quina local, a la que se redirigir\u00e1n las conexiones para el equipo remoto y de ah\u00ed a un destino determinado. Muy a menudo, el destino de reenv\u00edo ser\u00e1 el mismo que el del equipo remoto, proporcionando as\u00ed un shell seguro y, por ejemplo, una conexi\u00f3n VNC segura, a la misma m\u00e1quina. El reenv\u00edo local se lleva a cabo por medio del par\u00e1metro {{Ic|-L}} y la especificaci\u00f3n de reenv\u00edo se acompa\u00f1a en forma de {{Ic|<tunnel port>:<destination address>:<destination port>}}.\n\nAs\u00ed:\n\n $ ssh -L 1000:mail.google.com:25 192.168.0.100\n\nutilizar\u00e1 SSH para iniciar sesi\u00f3n y abrir un shell en 192.168.0.100, y tambi\u00e9n crear\u00e1 un t\u00fanel desde el puerto TCP 1000 de la m\u00e1quina local a mail.google.com en el puerto 25. Una vez establecidas, las conexiones a localhost:1000 conectar\u00e1n al puerto SMTP de Gmail. Para Google, parecer\u00e1 que dichas conexiones (aunque no necesariamente los datos transmitidos por la conexi\u00f3n) se originaron en 192.168.0.100, y tales datos estar\u00e1n seguros entre el equipo local y 192.168.0.100, pero no una vez en 192.168.0.100, a menos que se tomen otras medidas.\n\nDel mismo modo:\n\n $ ssh -L 2000:192.168.0.100:6001 192.168.0.100\n\npermitir\u00e1 conexiones a localhost:2000 que se enviar\u00e1n de forma transparente al equipo remoto en el puerto 6001. El ejemplo anterior es \u00fatil para conexiones VNC mediante la utilidad de vncserver \u2014parte del paquete tightvnc\u2014 que, aunque muy \u00fatil, es expl\u00edcita acerca de su falta de seguridad.\n\nEl reenv\u00edo remoto permite al equipo remoto conectarse a un equipo de forma arbitraria a trav\u00e9s del t\u00fanel SSH y la m\u00e1quina local, proporcionando un cambio funcional de redirecciones locales, y es \u00fatil para situaciones en las que, por ejemplo, el equipo remoto ha limitado conectividad debido a los cortafuegos. Se activa con el par\u00e1metro {{Ic|-R}} y utiliza la especificaci\u00f3n de reenv\u00edo en forma de {{Ic|<tunnel port>:<destination address>:<destination port>}}.\n\nAs\u00ed:\n\n $ ssh -R 3000:irc.libera.chat:6667 192.168.0.200\n\nabrir\u00e1 una shell en 192.168.0.200, y las conexiones desde 192.168.0.200 a s\u00ed mismo en el puerto 3000 (hablando en terminolog\u00eda remota, localhost:3000) ser\u00e1n enviadas a trav\u00e9s del t\u00fanel de la m\u00e1quina local y luego a irc.libera.chat en el puerto 6667, por lo tanto, en este ejemplo, lo que permite es el uso de programas de IRC en el equipo remoto, incluso si el puerto 6667 est\u00e9 bloqueado por \u00e9l, como es lo normal.\n\nTanto el reenv\u00edo local como el remoto se pueden utilizar para ofrecer una \u00abpuerta de enlace\u00bb segura, lo que permite que otros equipos se aprovechen de un t\u00fanel SSH, sin ejecutar SSH o el demonio SSH, proporcionando una direcci\u00f3n de enlace para el inicio del t\u00fanel como parte de la especificaci\u00f3n de reenv\u00edo, por ejemplo {{Ic|<tunnel address>:<tunnel port>:<destination address>:<destination port>}}. La especificaci\u00f3n {{Ic|<tunnel address>}} puede ser cualquier direcci\u00f3n de la m\u00e1quina en el inicio del t\u00fanel, {{Ic|localhost}}, (o en blanco) {{Ic|*}}, que, respectivamente, permiten conexiones a trav\u00e9s de la direcci\u00f3n indicada, a trav\u00e9s de la interfaz loopback, o a trav\u00e9s de cualquier interfaz. De forma predeterminada, el reenv\u00edo se limita a las conexiones desde la m\u00e1quina en el \u00abprincipio\u00bb del t\u00fanel, es decir, la especificaci\u00f3n {{Ic|<tunnel address>}} viene asignada a {{Ic|localhost}}. El reenv\u00edo local no requiere ninguna configuraci\u00f3n adicional, sin embargo, el reenv\u00edo remoto est\u00e1 limitado por la configuraci\u00f3n del demonio SSH del servidor remoto. Vea la opci\u00f3n {{Ic|GatewayPorts}} en {{Ic|sshd_config(5)}} para m\u00e1s informaci\u00f3n.\n\n=== Multiplexaci\u00f3n ===\n\nEl demonio SSH normalmente escucha en el puerto 22. Sin embargo, es una pr\u00e1ctica com\u00fan para muchos puntos de acceso p\u00fablico a Internet bloquear todo el tr\u00e1fico que no pase por los puertos HTTP/S normales (80 y 443, respectivamente), por lo que, efectivamente, bloquean las conexiones SSH. La soluci\u00f3n inmediata para esto es tener listado adicionalmente{{ic|sshd}} en uno de los puertos de la lista blanca:\n\n{{hc|/etc/ssh/sshd_config|\nPort 22\nPort 443\n}}\n\nSin embargo, es probable que el puerto 443 ya est\u00e9 en uso por un servidor web que sirve contenidos HTTPS, en cuyo caso es posible utilizar un multiplexor, como {{Pkg|sslh}}, que escucha en el puerto multiplexado y puede inteligentemente reenviar paquetes a muchos servicios.\n\n=== Acelerando SSH ===\n\nSe puede hacer que todas las sesiones al mismo equipo utilicen una conexi\u00f3n \u00fanica, lo que acelerar\u00e1 enormemente los inicios de sesi\u00f3n posteriores, a\u00f1adiendo estas l\u00edneas bajo el equipo (host) adecuado en {{ic|/etc/ssh/ssh_config}}:\n Host examplehost.com\n   ControlMaster auto\n   ControlPersist yes\n   ControlPath ~/.ssh/socket-%r@%h:%p\n\nVea la p\u00e1gina del manual {{ic|ssh_config(5)}} para obtener una descripci\u00f3n completa de estas opciones.\n\nOtra opci\u00f3n para mejorar la velocidad es habilitar la compresi\u00f3n con el sufijo  {{ic|-C}}. Una soluci\u00f3n permanente es agregar esta l\u00ednea debajo del host correcto en {{ic|/etc/ssh/ssh_config}}:\n Compression yes\n{{Warning (Espa\u00f1ol)|{{man|1|ssh}} establece que \u00ab''La compresi\u00f3n es deseable en las l\u00edneas de m\u00f3dem y otras conexiones lentas, pero ralentizar\u00e1 las cosas en redes r\u00e1pidas''\u00bb. Este consejo podr\u00eda ser contraproducente en funci\u00f3n de su configuraci\u00f3n de red.}}\n\nEl tiempo de inicio de sesi\u00f3n puede ser acortado usando el sufijo {{ic|-4}},que saltea la b\u00fasqueda IPv6. Esto puede hacerse permanente a\u00f1adiendo esta l\u00ednea bajo el host correcto en {{ic|/etc/ssh/ssh_config}}:\n AddressFamily inet\n\nCambiar los algoritmos de cifrado usados por SSH para demandar menos cpu puede mejorar la velocidad. En este sentido, las mejores opciones son arcfour y blowfish-cbc.\n\n{{Warning (Espa\u00f1ol)|Por favor, no haga esto a menos que sepa lo que est\u00e1 haciendo; arcfour tiene una serie de debilidades conocidas.}}\n\nPara utilizar sistemas de cifrado alternativos, ejecute SSH con el par\u00e1metro {{ic|-c}}:\n $ ssh -c arcfour,blowfish-cbc user@server-address\n\nPara usar el cifrado permanentemente, a\u00f1ada esta l\u00ednea bajo el equipo adecuado en {{ic|/etc/ssh/ssh_config}}:\n Ciphers arcfour,blowfish-cbc\n\n=== Montando un Sistema de archivos Remoto con SSHFS ===\n\nPor favor, consulte el art\u00edculo [[SSHFS (Espa\u00f1ol)|Sshfs]] para utilizar sshfs a fin de montar un sistema remoto \u2014accesible a trav\u00e9s de SSH\u2014 en una carpeta local, de modo que sea capaz de hacer cualquier operaci\u00f3n en los archivos montados con cualquier herramienta (copiar, renombrar, editar con vim, etc.). Utilizar sshfs en lugar de shfs es, en general, preferible, como una nueva versi\u00f3n de shfs, ya que esta \u00faltima no ha sido liberada desde 2004.\n\n=== Mantener la sesi\u00f3n activa ===\n\nTu sesion ssh sera autom\u00e1ticamente desconectada si \u00e9sta se encuentra inactiva. Para mantener activa la conexi\u00f3n agrega esto a {{ic|~/.ssh/config}} o a {{ic|/etc/ssh/ssh_config}} en el cliente.\n\n ServerAliveInterval 120\n\nEsto enviar\u00e1 la se\u00f1al \u00abkeep alive\u00bb al servidor cada 120 segundos.\n\nPor el contrario, para mantener activas las conexiones entrantes, puede establecer:\n \n ClientAliveInterval 120\n\n(o alg\u00fan otro n\u00famero mayor que 0) en el archivo {{ic|/etc/ssh/sshd_config}} del servidor.\n\n=== Guardar los datos de conexi\u00f3n en la configuraci\u00f3n de SSH ===\n\nCada vez que desee conectarse a un servidor ssh, por lo general, tiene que escribir, al menos, su direcci\u00f3n y el nombre de usuario. Para ahorrarse tener que reescribirlo, puede guardar los datos de los servidores a los que se conecta regularmente, utilizando el archivo personal {{ic|~/.ssh/config}} o el global del sistema {{ic|/etc/ssh/ssh_config}}, como se muestra en el siguiente ejemplo:\n\n{{hc|~/.ssh/config|\nHost myserver\n    HostName 123.123.123.123\n    Port 12345\n    User bob\nHost other_server\n    HostName test.something.org\n    User alice\n    CheckHostIP no\n    Cipher blowfish\n}}\n\nAhora solo queda conectarse al servidor utilizando el nombre especificado:\n\n $ ssh myserver\n\nPara ver una lista completa de las opciones posibles, eche un vistazo a la p\u00e1gina del manual de ssh_config en el sistema o a la [https://www.openbsd.org/cgi-bin/man.cgi?query=ssh_config ssh_config documentaci\u00f3n] en el sitio web oficial.\n\n=== Autossh - reiniciar autom\u00e1ticamente las sesiones y t\u00fanes de SSH ===\n\nCuando una sesi\u00f3n o t\u00fanel no pueden mantenerse activos, por ejemplo debido a las malas condiciones de la red que provoca desconexiones del cliente, puede utilizar [https://www.harding.motd.ca/autossh/ Autossh] para reiniciar autom\u00e1ticamente. Autossh se puede instalar desde los [[official repositories (Espa\u00f1ol)|repositorios oficiales]]. \n\nEjemplos de uso:\n $ autossh -M 0 -o \"ServerAliveInterval 45\" -o \"ServerAliveCountMax 2\" username@example.com\nCombinado con [[SSHFS (Espa\u00f1ol)|sshfs]]:\n $ sshfs -o reconnect,compression=yes,transform_symlinks,ServerAliveInterval=45,ServerAliveCountMax=2,ssh_command='autossh -M 0' username@example.com: /mnt/example \nConexi\u00f3n a trav\u00e9s de un conjunto SOCKS-proxy por [[Proxy settings (Espa\u00f1ol)|Proxy_settings]]:\n $ autossh -M 0 -o \"ServerAliveInterval 45\" -o \"ServerAliveCountMax 2\" -NCD 8080 username@example.com \nCon el opci\u00f3n {{ic|-f}}, autossh puede hacer que se ejecute como un proceso en segundo plano. Ejecutarlo de esta manera, sin embargo, significa que la frase de contrase\u00f1a no se podr\u00e1 introducir de forma interactiva.\n\nLa sesi\u00f3n finalizar\u00e1 una vez que se escribe {{ic|exit}} en la sesi\u00f3n, o el proceso autossh recibe una se\u00f1al SIGTERM, SIGINT of SIGKILL.\n\n==== Ejecutar Autossh autom\u00e1ticamente en el arranque mediante systemd ====\n\nSi desea iniciar autom\u00e1ticamente autossh, ahora es f\u00e1cil conseguirlo haciendo que systemd maneje esto. Por ejemplo, puede crear un archivo de unidad systemd como este:\n\n [Unit]\n Description=AutoSSH service for port 2222\n After=network.target\n \n [Service]\n Environment=\"AUTOSSH_GATETIME=0\"\n ExecStart=/usr/bin/autossh -M 0 -NL 2222:localhost:2222 -o TCPKeepAlive=yes foo@bar.com\n \n [Install]\n WantedBy=multi-user.target\n\nAqu\u00ed {{ic|1=AUTOSSH_GATETIME=0}} es una variable de entorno que especifica cu\u00e1nto tiempo ssh debe estar activo antes de que autossh considere la conexi\u00f3n exitosa, ponerlo a 0 hace que autossh ignore el primer fallo de ejecuci\u00f3n de ssh. Esto puede ser \u00fatil cuando se ejecuta autossh en el arranque. Otras variables de entorno est\u00e1n disponibles en la p\u00e1gina del manual. Por supuesto, se puede hacer esta unidad m\u00e1s compleja si es necesario (consulte la documentaci\u00f3n de systemd para m\u00e1s detalles), y, obviamente, puede utilizar sus propias opciones para autossh, pero tenga en cuenta que el par\u00e1metro {{ic|-f}} implica {{ic|1=AUTOSSH_GATETIME=0}} quen no funciona con systemd.\n\nLuego coloque esto en, por ejemplo, /etc/systemd/system/autossh.service. Posteriormente, puede activar sus t\u00faneles autossh con, por ejemplo:\n\n $ systemctl start autossh\n(o como llame al archivo de servicios)\n\nSi esto funciona bien para su caso, puede hacer esto permanente ejecutando:\n\n $ systemctl enable autossh\n\nEso hace que autossh se inicie autom\u00e1ticamente en el arranque.\n\nTambi\u00e9n es f\u00e1cil mantener varios procesos autossh, para mantener activos varios t\u00faneles. Solo tiene que crear varios archivos .service con diferentes nombres.\n\n== Cambiar el n\u00famero de puerto de SSH con la activaci\u00f3n del socket (sshd.socket) ==\n\nCree el archivo {{ic|/etc/systemd/system/sshd.socket.d/port.conf}} con:\n\n [Socket]\n # Desactivar puerto por defecto\n ListenStream=\n # Establecer nuevo puerto\n ListenStream=12345\n\nsystemd escuchar\u00e1 autom\u00e1ticamente en el nuevo puerto despu\u00e9s de su recarga:\n\n systemctl daemon-reload\n\n== Soluci\u00f3n de problemas ==\n\n=== Lista de comprobaci\u00f3n ===\n\nEsta es una primera aproximaci\u00f3n a la soluci\u00f3n de problemas con una lista de comprobaci\u00f3n. Se recomienda revisar estos puntos antes de mirar m\u00e1s lejos:\n\n1. La carpeta {{ic|~/.ssh}} del cliente y del servidor y su contenido deben ser accesibles por sus usuarios:\n\n   $ chmod 700 /home/USER/.ssh\n   $ chmod 600 /home/USER/.ssh/*\n\n2. Compruebe que todos los archivos de la carpeta {{ic|~/.ssh}} del cliente y del servidor son propiedad de sus usuario:\n\n   $ chown -R USER: ~/.ssh\n\n3. Compruebe que, por ejemplo, la clave p\u00fablica {{ic |id_rsa.pub}} del cliente est\u00e1 en el archivo {{ic|authorized_keys}} del servidor .\n\n4. Compruebe que no se limit\u00f3 el acceso a SSH a trav\u00e9s de {{ic|AllowUsers}} en {{ic|/etc/ssh/sshd_config}} (separadas por espacios).\n\n==== Limpiar claves desactualizadas (opcional) ====\n\n5. Elimine claves antiguas/no v\u00e1lidas del archivo {{ic|/.ssh/authorized_keys}} del servidor.\n\n6. Elimine claves antiguas/no v\u00e1lidas privadas y p\u00fablicas dentro de la carpeta {{ic|~/.ssh}} de los clientes.\n\n==== Recomendaciones ====\n\n7. Mantenga el menor n\u00famero de claves posibles del archivo {{ic |~/.ssh/authorized_keys}} del cliente en el servidor.\n\n=== La conexi\u00f3n SSH queda colgada despu\u00e9s de apagar/reiniciar ===\n\nLa conexi\u00f3n SSH se bloquea despu\u00e9s de apagar o reiniciar si systemd detiene la conexi\u00f3n de red antes que sshd. Para solucionar este problema, comente y cambie la declaraci\u00f3n {{ic|After}}:\n{{hc|/usr/lib/systemd/system/systemd-user-sessions.service|2=\n#After=remote-fs.target\nAfter=network.target}}\n\n=== Conexi\u00f3n denegada o problemas con timeout ===\n\n==== \u00bfEst\u00e1 su router haciendo reenv\u00edo de puertos? ====\n\nSALTAR ESTE PASO SI NO EST\u00c1 DETR\u00c1S DE UNA NAT DE M\u00d3DEM/ROUTER (por ejemplo, un VPS o en otro caso un equipo con direcciones p\u00fablicas). La mayor\u00eda de los hogares y peque\u00f1as empresas tendr\u00e1n un m\u00f3dem/router con NAT.\n\nLo primero es asegurarse de que el router sabe que reenv\u00eda cualquier conexi\u00f3n ssh entrante a su m\u00e1quina. Su IP externa es dada a usted por su proveedor de Internet, y se asocia con cualquier petici\u00f3n que sale de su router. Por lo tanto, el router tiene que saber que cualquier conexi\u00f3n ssh entrante a su IP externa necesita ser reenviada a su m\u00e1quina donde se ejecuta sshd.\n\nEncuentre su direcci\u00f3n de red interna.\n\n ip a\n\nEncuentre la interfaz de su dispositivo y busque el campo inet. Luego acceda a la interfaz web de configuraci\u00f3n del router, utilizando la IP del router (encontrar\u00e1 esto en la web). Informe a su router para re-dirigirlo a su IP inet. Vaya a [https://portforward.com/] para m\u00e1s instrucciones sobre c\u00f3mo hacerlo para su router en particular.\n\n==== \u00bfEst\u00e1 SSH corriendo y escuchando? ====\n\n $ ss -tnlp\n\nSi la orden anterior no muestra que el puerto SSH est\u00e1 abierto, SSH no se est\u00e1 ejecutando. Compruebe {{ic|/var/log/messages}} para conocer errores, etc.\n\n==== \u00bfExisten reglas de firewall que bloqueen la conexi\u00f3n? ====\n\n[[Iptables (Espa\u00f1ol)|Iptables]] puede bloquear conexiones en el puerto {{ic|22}}. Compruebe esto con:\n{{bc|# iptables -nvL}}\ny busque las posibles reglas que bloqueen paquetes en la cadena {{ic|INPUT}}. Entonces, si es necesario, desbloquee el puerto con una orden como:\n{{bc|\n# iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT\n}}\nPara obtener m\u00e1s ayuda sobre c\u00f3mo para configurar cortafuegos, consulte [[Firewalls (Espa\u00f1ol)]].\n\n==== \u00bfEst\u00e1 el tr\u00e1fico llegando a su ordenador? ====\n\nRealice un vuelco de la informaci\u00f3n del tr\u00e1fico sobre el equipo que est\u00e1 teniendo problemas con:\n\n # tcpdump -lnn -i any port ssh and tcp-syn\n\nEsto deber\u00eda mostrar alguna informaci\u00f3n b\u00e1sica, y luego espere a que todo el tr\u00e1fico que deber\u00eda producirse se muestre. Pruebe su conexi\u00f3n ahora. Si no ve ninguna salida cuando se intenta conectar, entonces algo fuera de su ordenador est\u00e1 bloqueando el tr\u00e1fico (por ejemplo, cortafuegos f\u00edsicos, NAT del router, etc.).\n\n==== \u00bfSu ISP o un tercero est\u00e1 bloqueando el puerto por defecto? ====\n\n{{Note (Espa\u00f1ol)|Pruebe este paso si '''sabe''' que no est\u00e1 ejecutando ning\u00fan cortafuegos y sabe que ha configurado el router para DMZ o ha redirigido el puerto a su equipo y a\u00fan no funciona. Aqu\u00ed encontrar\u00e1 los pasos de diagn\u00f3stico y una posible soluci\u00f3n.}}\n\nEn algunos casos, su proveedor de Internet podr\u00eda bloquear el puerto predeterminado (puerto 22 SSH), as\u00ed que lo que est\u00e1 intentando (apertura de puertos, endurecimiento del apilamiento, defensa contra ataques de saturaci\u00f3n, etc.) es est\u00e9ril. Para confirmar esto, cree un servidor en todas las interfaces (0.0.0.0) y con\u00e9ctelo de forma remota.\n\nSi recibe un mensaje de error similar a este:\n ssh: connect to host www.inet.hr port 22: Connection refused\n\nEso significa que el puerto '''no''' est\u00e1 bloqueado por el ISP, pero el servidor no ejecuta SSH en ese puerto (vea [[wikipedia:es:Seguridad_por_oscuridad|seguridad por oscuridad]]).\n\nSin embargo, si se recibe un mensaje de error similar a este:\n ssh: connect to host 111.222.333.444 port 22: Operation timed out \n\nEso significa que algo est\u00e1 rechazando el tr\u00e1fico TCP en el puerto 22. B\u00e1sicamente ese puerto est\u00e1 siendo vigilado, ya sea por el cortafuegos o por la intervenci\u00f3n de terceras partes (como un ISP que bloquea y/o rechaza el tr\u00e1fico entrante en el puerto 22). Si se sabe que no est\u00e1 ejecutando ning\u00fan cortafuegos en su ordenador, y est\u00e1 seguro que ning\u00fan Gremlins est\u00e1n creciendo en su router y switches, entonces, el ISP est\u00e1 bloqueando el tr\u00e1fico.\n\nPara hacer doble verificaci\u00f3n, puede ejecutar Wireshark en el servidor y escuchar el tr\u00e1fico en el puerto 22. Dado que Wireshark es una utilidad que esnifa paquetes de dos niveles, y TCP/UDP tiene 3 niveles y as\u00ed sucesivamente (ver [[wikipedia:es:Familia_de_protocolos_de_Internet|pila de red de IP]]), si no recibe nada mientras se conecta de forma remota, lo m\u00e1s probable es que un tercero est\u00e9 bloqueando el tr\u00e1fico en ese puerto para su servidor.\n\n===== Diagn\u00f3stico con Wireshark =====\n\n[[Help:Reading (Espa\u00f1ol)#Instalaci\u00f3n de paquetes|Instale]] Wireshark con el paquete {{Pkg|wireshark-cli}} disponible en los [[official repositories (Espa\u00f1ol)|repositorios oficiales]].\n\nY luego ejec\u00fatelo utilizando,\n tshark -f \"tcp port 22\" -i NET_IF\n\ndonde NET_IF es la interfaz de red para una conexi\u00f3n WAN (ver {{ic|ip a}} para comprobar). Si no se est\u00e1 recibiendo ning\u00fan paquete al intentar conectarse de forma remota, puede estar muy seguro de que su ISP est\u00e1 bloqueando el tr\u00e1fico entrante en el puerto 22.\n\n===== Posible soluci\u00f3n =====\n\nLa soluci\u00f3n es utilizar alg\u00fan otro puerto que el ISP no est\u00e9 bloqueando. Abra el archivo {{ic|/etc/ssh/sshd_config}} y config\u00farelo para utilizar diferentes puertos. Por ejemplo, a\u00f1ada:\n\n Port 22\n Port 1234\n\nAseg\u00farese tambi\u00e9n de que otras l\u00edneas de configuraci\u00f3n del \u00abpuerto\u00bb  en el archivo est\u00e1n comentadas. Solo comentar \u00abPort 22\u00bb y poner \u00abPort 1234\u00bb no va a resolver el problema, porque entonces sshd solo escuchar\u00e1 el puerto 1234. Utilice ambas l\u00edneas para ejecutar el servidor SSH en ambos puertos.\n\nReinicie el servidor {{ic|systemctl restart sshd.service}} y todo estar\u00e1 listo. Todav\u00eda tiene que configurar su cliente(s) para poder usar el otro puerto, en lugar del puerto predeterminado. Existen numerosas soluciones a ese problema, pero nosotros cubrimos dos de ellas aqu\u00ed.\n\n==== Leer del socket fallido: connection reset by peer ====\n\nLas versiones recientes de openssh a veces fallan con el mensaje de error anterior, debido a un error que implica la criptograf\u00eda de curva el\u00edptica. En este caso, a\u00f1ada la siguiente l\u00ednea a {{ic|~/.ssh/config}}:\n\n HostKeyAlgorithms ssh-rsa-cert-v01@openssh.com,ssh-dss-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-dss-cert-v00@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-rsa,ssh-dss\n\nCon openssh 5.9, la soluci\u00f3n anterior no funciona. En su lugar, ponga las siguientes l\u00edneas en {{ic|~/.ssh/config}}:\n\n Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc \n MACs hmac-md5,hmac-sha1,hmac-ripemd160\n\nVer tambi\u00e9n [https://www.gossamer-threads.com/lists/openssh/dev/51339 discussion] en el foro openssh bug.\n\n=== \u00ab[your shell]: No such file or directory\u00bb / ssh_exchange_identification problem ===\n\nUna posible causa de esto es la necesidad de ciertos clientes SSH de encontrar una ruta absoluta (una devuelta por {{Ic|whereis -b [your shell]}}, por instancia) en {{Ic|$SHELL}}, incluso si el binario de la shell se encuentra en una de las entradas {{Ic|$PATH}}.\n\n=== Mensaje de error \u00abTerminal unknown\u00bb o  \u00abError opening terminal\u00bb ===\n\nCon ssh es posible recibir errores como \u00abTerminal unknown\u00bb despu\u00e9s de iniciar sesi\u00f3n. Iniciar aplicaciones ncurses como nano fallan con el mensaje \u00abError opening terminal\u00bb. Hay dos m\u00e9todos para solucionar este problema, uno r\u00e1pido, mediante la variable $TERM, y otro m\u00e1s detallado usando el archivo terminfo.\n\n==== Soluci\u00f3n estableciendo la variable $TERM ====\n\nDespu\u00e9s de conectar con el servidor remoto establezca la variable $TERM para \u00abxterm\u00bb con la siguiente orden:\n\n{{ic|TERM&#61;xterm}}\n\nEste m\u00e9todo es una soluci\u00f3n provisional y debe ser utilizado en servidores ssh al que se conecta raramente, ya que puede tener efectos secundarios no deseados. Tambi\u00e9n tiene que repetir la orden despu\u00e9s de cada conexi\u00f3n, o bien configurando ~.bashrc .\n\n==== Soluci\u00f3n usando el archivo terminfo ====\n\nUna soluci\u00f3n con m\u00e1s dedicaci\u00f3n consiste en transferir el archivo terminfo del terminal en el equipo cliente al servidor ssh. En este ejemplo explicamos c\u00f3mo configurar el archivo terminfo para el terminal \u00abrxvt-unicode-256color\u00bb.\nCree el directorio que contendr\u00e1 los archivos terminfo en el servidor ssh, mientras se est\u00e1 conectado al servidor, con la orden:\n\n{{ic| mkdir -p ~/.terminfo/r/}}\n\nAhora copie el archivo terminfo de su terminal en el nuevo directorio. Reemplace {{ic|rxvt-unicode-256color}} con el terminal de su cliente en la siguiente orden y {{ic|ssh-server}} con el usuario y direcci\u00f3n del servidor correspondiente.\n\n{{ic|$ scp  /usr/share/terminfo/r/''rxvt-unicode-256color'' ssh-server:~/.terminfo/r/}}\n\nDespu\u00e9s de salir y entrar en el servidor ssh el problema debe haber sido corregido.\n\n== V\u00e9ase tambi\u00e9n ==\n\n*[http://www.soloport.com/iptables.html A Cure for the Common SSH Login Attack]{{Dead link (Espa\u00f1ol)|2023|05|06|status=404}}\n*[https://www.la-samhna.de/library/brutessh.html Defending against brute force ssh attacks]\n*[https://www.ibm.com/developerworks/library/l-keyc/index.html OpenSSH key management, Part 1] and [https://www.ibm.com/developerworks/library/l-keyc2 Part 2] on IBM developerWorks"
                    }
                ]
            },
            "9971": {
                "pageid": 9971,
                "ns": 0,
                "title": "Network Security Services",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Transport Layer Security]]\n[[Category:Mozilla]]\n[[ja:Network Security Services]]\n[[ru:Network Security Services]]\n[[zh-hans:Network Security Services]]\n[[Wikipedia:Network Security Services|Network Security Services]] ('''NSS''') is a set of libraries designed to support cross-platform development of security-enabled client and server applications.\n\nApplications built with NSS can support [[Wikipedia:SSL|SSL]] v2 and v3, [[TLS]], PKCS #5, [[Wikipedia:PKCS 7|PKCS #7]], [[Wikipedia:PKCS 11|PKCS #11]], [[Wikipedia:PKCS 12|PKCS #12]], [[Wikipedia:S/MIME|S/MIME]], [[Wikipedia:X.509|X.509]] v3 certificates, and other security standards.\n\nNSS is required by many packages, including, for example, [[Chromium]] and [[Firefox]].\n\n== Installation ==\n\n[[Install]] the {{Pkg|nss}} package.\n\n== Usage ==\n\nNSS is implemented in terms of operations on a dynamically configured list of [[Wikipedia:PKCS 11|PKCS #11]] modules. Each module provides access to tokens, which can execute cryptographic operations and store cryptographic objects. The configured list of modules is usually stored in an arbitrary directory, provided by a user at initialization of NSS, in the file {{ic|pkcs11.txt}}. The list always contains a built-in module \"NSS Internal PKCS #11 Module\" with tokens \"NSS Generic Crypto Services\" and \"NSS Certificate DB\". The first token provides cryptographic mechanisms such as RSA, SHA256, TLS etc. The second token stores certificates and private keys in the same user-provided directory in the files {{ic|cert9.db}} and {{ic|key4.db}}. The files {{ic|pkcs11.txt}}, {{ic|cert9.db}} and {{ic|key4.db}} are also called \"NSS databases\". Paths to NSS databases for some applications are listed in the table below. You should provide some path for each operation. Examples below will use {{ic|~/.pki/nssdb/}}.\n\n{| class=\"wikitable\"\n! Application !! Path to NSS databases\n|-\n| {{Pkg|chromium}}, {{Pkg|evolution}}\n| {{ic|~/.pki/nssdb/}}\n|-\n| {{Pkg|firefox}}\n| {{ic|~/.mozilla/firefox/<profile>/}}\n|-\n| {{Pkg|thunderbird}}\n| {{ic|~/.thunderbird/<profile>/}}\n|-\n| {{Pkg|libreoffice-fresh}}\n| configurable via Options [https://help.libreoffice.org/latest/en-US/text/shared/guide/digitalsign_send.html]\n|}\n\nFor managing [[Wikipedia:PKCS 11|PKCS #11]] modules NSS provides the {{man|1|modutil}} utility, for managing certificates and private keys \u2014 the {{man|1|certutil}} utility.\n\n{{Note|NSS can automatically add {{ic|/usr/lib/libnssckbi.so}} to the list of [[Wikipedia:PKCS 11|PKCS #11]] modules depending on initialization flags.}}\n\n=== List certificate DB ===\n\nTo get list of all certificates:\n\n $ certutil -d ~/.pki/nssdb/ -L\n\nTo get details about certificate:\n\n $ certutil -d ~/.pki/nssdb/ -L -n ''certificate_nickname''\n\n=== Generate an RSA private key ===\n\n $ certutil -d ~/.pki/nssdb/ -G -g ''keysize'' -n ''nickname''\n\n=== Generate a certificate signing request ===\n\n $ certutil -d ~/.pki/nssdb/ -R -k ''key-id'' -s ''subject'' -o ''file''\n\n=== Generate a self-signed certificate ===\n\n $ certutil -d ~/.pki/nssdb/ -S -s ''subject'' -n ''nickname'' -x -t C,C,C -o ''file''\n\n==== Generate a self-signed certificate with the assistance of OpenSSL ====\nUsing OpenSSL allows you to have an interactive prompt that's easier to format than using the ''certutil'' subject format. Instructions below were adapted from [https://serverfault.com/questions/831394/how-can-i-create-a-pkcs12-file-using-openssl-self-signed-certs] and [https://askubuntu.com/questions/1225262/how-do-i-generate-a-certificate-to-sign-pdf-electronically].\n\nCreate a key pair and a certificate (-noenc disables encryption of a private key with a password):\n $ openssl req -x509 -newkey rsa:4096 -keyout myKey.pem -out cert.pem -days 365 -noenc\nCreate a pkcs12 file:\n $ openssl pkcs12 -export -out keyStore.p12 -inkey myKey.pem -in cert.pem\nCreate NSS databases if they do not exist yet:\n $ certutil -d ~/.pki/nssdb -N --empty-password\nImport your key to the database:\n $ pk12util -d ~/.pki/nssdb -i keyStore.p12\n\n=== Import certificate ===\n\nTo add a certificate specify the {{ic|-A}} option:\n\n $ certutil -d ~/.pki/nssdb/ -A -t \"''TRUSTARGS''\" -n ''certificate_nickname'' -i ''/path/to/cert/filename''\n\nThe {{ic|TRUSTARGS}} are three strings of zero or more alphabetic characters, separated by commas, for example: {{ic|\"TCu,Cu,Tuw\"}}. They define how the certificate should be trusted for SSL, email, and object signing, and are explained in the [https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Tools/certutil certutil documentation]{{Dead link|2023|05|06|status=404}} or [https://meenavyas.medium.com/about-trust-flags-of-certificates-in-nss-database-that-can-be-modified-by-certutil-67e4f33a6d0f Meena's blog post] on trust flags.\n\nTo add a personal certificate and private key for SSL client authentication use the command:\n\n $ pk12util -d ~/.pki/nssdb/ -i ''/path/to/PKCS12/cert/filename.p12''\n\nThis will import a personal certificate and private key stored in a PKCS #12 file. The {{ic|TRUSTARGS}} of the personal certificate will be set to {{ic|\"u,u,u\"}}.\n\n=== Edit certificate ===\n\nCall ''certutil'' with {{ic|-M}} option to edit the certificate. For example, to edit the {{ic|TRUSTARGS}}:\n\n $ certutil -d ~/.pki/nssdb/ -M -t \"''TRUSTARGS''\" -n ''certificate_nickname''\n\n=== Delete certificate ===\n\nUse {{ic|-D}} option to remove the certificate:\n\n $ certutil -d ~/.pki/nssdb/ -D -n ''certificate_nickname''\n\n=== Adding a trusted CA certificate ===\n\nA system-wide trust store {{ic|/usr/lib/pkcs11/p11-kit-trust.so}} is usually automatically added to the list of [[Wikipedia:PKCS 11|PKCS #11]] modules. See [[Transport Layer Security#Trust management]] for system-wide configuration. For application-specific configuration use such a command to add a CA certificate:\n\n certutil -d ~/.pki/nssdb/ -A -i ''/path/to/certificate'' -n ''certificate nickname'' -t C,,\n\n== See also ==\n\n* [https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS Network Security Services - Mozilla]\n* [https://blogs.oracle.com/meena/about-trust-flags-of-certificates-in-nss-database-that-can-be-modified-by-certutil Managing Certificate Trust flags in NSS Database - Meena Vyas, Oracle]"
                    }
                ]
            },
            "10020": {
                "pageid": 10020,
                "ns": 0,
                "title": "ICC profiles",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Multimedia]]\n[[ja:ICC \u30d7\u30ed\u30d5\u30a1\u30a4\u30eb]]\n[[ru:ICC profiles]]\nAs it pertains to general desktop use, an [[Wikipedia:ICC profile|ICC profile]] is a binary file which contains precise data regarding the color attributes of an input, or output device. Single, or multiple profiles can be applied across a system and its devices to produce consistent and repeatable results for graphic and document editing and publishing. ICC profiles are typically calibrated with a [[Wikipedia:Tristimulus colorimeter|(tristimulus) colorimeter]], or a spectrophotometer when absolute color accuracy is required.\n\n{{Tip|1=This article begins quite technical. If clarification is needed, see an introductory article about [https://web.archive.org/web/20221226110150/https://encrypted.pcode.nl/blog/index.html%3Fp=853.html Color Management (On Linux)].}}\n== Utilities ==\n\n* {{App|ArgyllCMS|ICC compatible color management system. It supports accurate ICC profile creation for scanners, cameras and film recorders, and calibration and profiling of displays and RGB & CMYK printers.|https://argyllcms.com/|{{Pkg|argyllcms}}}}\n* {{App|ColorHug|The Hughski ColorHug Colorimeter is a low cost open-source hardware sensor used to calibrate screens. This package includes the client tools which allows the user to upgrade the firmware on the sensor or to query the sensor from command line scripts.|https://github.com/hughski/colorhug-client|{{Pkg|colorhug-client}}}}\n* {{App|dcamprof|A digital camera profiling tool.|https://www.ludd.ltu.se/~torger/dcamprof.html|{{Aur|dcamprof}}}}\n* {{App|DisplayCAL|Display calibration and profiling solution with a focus on accuracy and versatility. At its core it relies on ArgyllCMS color management system, to take measurements, create calibrations and profiles, and for a variety of other advanced color related tasks.|https://displaycal.net/|{{Pkg|displaycal}}}}\n* {{App|GNOME Color Manager|Set of graphical utilities for color management to be used in the GNOME desktop.|https://gitlab.gnome.org/GNOME/gnome-color-manager|{{Pkg|gnome-color-manager}}}}\n* {{App|xcalib|Lightweight monitor calibration loader which can load an ICC monitor profile to be shared across desktop applications.|https://github.com/OpenICC/xcalib|{{Pkg|xcalib}}}}\n\n== Profile generation ==\n\nColor management is a workflow of hardware calibration, software profiling and embedding the profile into the picture or video. It is all based on using an [[Wikipedia:ICC profile|ICC profile]].\n\n=== Colorimeter or spectrometer ===\n\nIt is highly recommended to use a colorimeter or spectrometer device for hardware-assisted display, printer and scanner calibration. For home use there are several affordable colorimeters available. Some are well- or even better-supported under Linux than on other operating systems. Frequently recommended devices are [https://www.xrite.com/colormunki-display X-Rite ColorMunki Display], [https://spyder.datacolor.com/portfolio-view/spyder5express/ DataColor Spyder5 Express] and the open source hardware [http://www.hughski.com/ ColorHug]. You can find more Linux-supported devices listed in the [https://www.argyllcms.com/doc/instruments.html AgyllCMS documentation].\n\n=== Argyll CMS ===\n\nThe [https://www.argyllcms.com/ Argyll Color Management System] is a complete suite of command-line profile creation and loading tools listed under {{Pkg|argyllcms}}. \n\nReview the official [https://www.argyllcms.com/doc/ArgyllDoc.html Argyll CMS documentation] for details on how to profile selected devices.\n\n=== Monitor calibration and profiling with additional calibration hardware ===\n\nThere is a GUI frontend for ArgyllCMS called [https://displaycal.net DisplayCal], available as {{Pkg|displaycal}}. In most common cases you will want to use its default settings. It is a common way to calibrate to a daylight color of 6500K and gamma 2,2. Read the DispalGui documentation for more. Many tutorials are available on the net.\n\n=== Scanner calibration ===\n\nFollow the scanner part of the [https://blog.simon-dreher.de/color-management.html scanner calibration] tutorial.\n\n=== Printer calibration ===\n\nSee {{man|8|cups-calibrate}}.\n\n=== File transfer ===\n\nProfile generation on a Windows or macOS system is one of the easiest and most widely recommended methods to obtain a ICC monitor profile. Since ICC color profiles are written to an open specification, they are compatible across operating systems. Transferring profiles from one OS to another can be used as a workaround for the lack of support for certain spectrophotometers or colorimeters under Linux: one can simply produce a profile on a different OS and then use it in a Linux workflow. Note that the system on which the profile is generated must host the exact same video card and monitor for which the profile is to be used. Once generation of an ICC profile, or a series of profiles is complete on a Windows system, copy the file(s) from the default path:\n\n C:\\WINDOWS\\System32\\spool\\drivers\\color\n\nmacOS generally stores ICC profiles in:\n\n* {{ic|/Library/ColorSync/Profiles/Displays/}}\n* {{ic|/System/Library/ColorSync/Profiles/Displays/}}\n* {{ic|/Users/USER_NAME/Library/ColorSync/Profile}}\n\nOnce the appropriate {{Ic|.icc/.icm}} files have been copied, install the device profiles to your desired system. Common installation device profiles directories on Linux include:\n\n* {{ic|/usr/share/color/icc}}\n* {{ic|/usr/local/share/color/icc}}\n* {{ic|/home/USER_NAME/.color/icc}}\n\n{{Note|Ensure that the calibrated contrast, brightness and RGB settings of the monitor do not change between the time of calibration and the loading of the ICC profile. Use this method only if you are absolutely certain that neither Linux nor the other OS does anything behind your back (in video drivers or vendor utilities) that alters the signal actually sent to the display, or the way the display interprets the signal. Watch out for \"Broadcast RGB\" or similar settings. One concrete example where profiling in Windows and Linux yields [https://bugzilla.kernel.org/show_bug.cgi?id&#61;70721 significantly different results] is the Lenovo Ideapad Yoga 2 Pro laptop, because these OSes program the flat panel controller in very different ways.|}}\n\n=== Gnome Color Manager ===\n\nOn Gnome, an ICC profile can easily be created by using {{Pkg|gnome-color-manager}}. Under Gnome, this is accessible via the Control Center and is pretty straightforward to use. You will need a colorimeter device to use this feature.\n\n=== LPROF ICC Profiler ===\n\n{{Out of date|The lprof package was dropped from AUR since it no longer built. According to Wikipedia, it's obsolete anyway and had not seen a release since 2006. Depending on purpose, another package from [[#Utilities]] may be used.|section=Remove section 2.8 about LPROF ICC Profiler?}}\n\n[http://lprof.sourceforge.net/ LPROF] is an ICC profiler with a graphical user interface listed under {{AUR|lprof}}{{Broken package link|package not found}} in the [[AUR]]. \n\n{{Note|The following walkthrough has been modified from the ArchWiki article [[Using LPROF to profile monitors]].}}\n\n==== Monitor calibration ====\n\n===== Contrast/Brightness =====\n\nAdjust the lighting in the room to what you will be using when working. Even if your screen is coated with an anti-reflective coating, you should avoid light falling directly on it. Let your monitor warm up for at least an hour for the image to get stabilized. If your calibration device has an ambient diffuser, adjust your room brightness to reach the recommended target lux point.\n\n# Set the monitor contrast to maximum, or 100%. \n# Next, display a pure black over entire screen by creating a small, black PNG image (all pixels have RGB = 0, 0, 0) and opening it up in a picture viewer that is capable of displaying an image in fullscreen mode without any controls.\n# Reduce the vertical size of the monitor screen (not the PNG image displayed by a picture viewer but the whole of what is displayed on the screen) to 60% to 70% of the full height. What is revealed above and below the picture is called a ''non-scanned area'', and since that area is not receiving any voltage, it is the blackest of black your monitor is capable of displaying. \n# Locate the brightness control (usually a sun, circle with rays projecting from its edges) and lower the value until the black ''image'' matches the non-scanned area.\n\n===== Color temperature =====\n\nAs we said in the introduction, setting color temperature must occur at noon. If you only have fixed factory default color temperature, you do not really need to wait for the sunny day to come. Just set it to 6500K.\n\nPlace your monitor so that you can see outside the window ''and'' your screen at the same time. For this step, you also need to create a white square image (RGB = 255, 255, 255), roughly 10 by 10 centimeters (4 by 3 inches). Using the same Gwenview technique as with brightness/contrast, display the white square on a pure black background.\n\n# First, prepare your eyes by staring at the outside world for a while. Let them adjust to the daylight viewing condition for a few minutes.\n# Glance at the monitor, and the white square for a few second (it has to be short, because eyes will readjust quickly).\n# If the square seems yellowish, you need higher color temperature, or if it has a blueish cast, the temperature needs to be lowered.\n# Keep glancing, looking out the window, and adjusting the white temperature, until the square looks pure white\n\nTake your time with the steps described above. It is essential to get it right.\n\n==== Monitor profiling without additional calibration hardware ====\n\nStart lprof. You will be presented by a fairly large window with multiple tabs on the right. \n\n# Click on the ''Monitor Profiler'' tab. Then click on the large ''Enter monitor values >>'' button.\n# White point should be set to ''6500K (daylight)''.\n# Primaries should be set to either ''SMPTE RP145-1994'', or ''EBU Tech.3213-E'' or ''P22'', or whatever appropriate values for your monitor. If you come across correct values for your monitor, enter those by selecting ''User Defined'' from the drop-down. If in doubt, you may use ''P22'' for all monitors with Trinitron CRTs (in this case, ''Trinitron'' is not related to Sony Trinitron mointors and TVs), and ''SMPTE RP145-1994'' for other CRTs.\n# Click the ''Set Gamma and Black Point'' button.\n# You will now see a full-screen view of two charts with some controls at the bottom.\n# Uncheck the ''Link channels'' check-box and adjust individual Red, Green, and Blue gamma by either moving the slider left or right, or by entering and changing values in the three boxes to the left. The goal is to make the chart on the left (the smaller square one) flat. When you are satisfied with how it looks, check the ''Link channels'' check-box and adjust the gamma again.\n# When you are done, click ''OK''. Click ''OK'' again.\n\nWhen you are finished entering monitor values, you might want to enter some information about the monitor. This is not mandatory, but it is always nice to know what profile is for what.\n\n# Click ''Profile identification'' button.\n# Fill in the data.\n# Click ''OK'' to finish.\n\nAfter you are all done, click on the '...' button next to ''Output Profile File'' box. Enter the name of your profile: ''somemonitor.icc''. Click ''Create Profile'' button, and you are done.\n\n=== ThinkPads ===\n\nSee [https://www.thinkwiki.org/wiki/Colour_profile color profiles] for IBM/Lenovo [[Wikipedia:ThinkPad|ThinkPad]] notebook [https://web.archive.org/web/20090130120007/http://www-307.ibm.com/pc/support/site.wss/migr-62923.html monitor profile] ([https://web.archive.org/web/20081219095340/http://www-307.ibm.com/pc/support/site.wss/migr-44320.html generic]) support.\n\nThe ThinkWiki instructions can be used to extract other ThinkPad driver executables from Lenovo, such as the [https://support.lenovo.com/us/en/downloads/ds555243 Monitor INF File for Windows 11 for X1 Carbon Gen 10, X1 Yoga Gen 7, Z13, Z16].\n\n== Loading ICC profiles ==\n\n{{Note|NVIDIA's proprietary driver is not compatible with {{Pkg|colord}} profile management. You will get inconsistent results when working with color managed applications. Either use [[Nouveau]] or [[mask]] {{ic|colord.service}} and load ICC profiles manually with {{ic|dispwin}}.}}\n\nICC profiles are loaded either by the session daemon or by a dedicated ICC loader. Both Gnome and KDE have daemons capable of loading ICC profiles from {{Pkg|colord}}. If you use colord in combination with either {{Pkg|gnome-settings-daemon}} or {{Pkg|colord-kde}}, the profile will be loaded automatically. If you are not using either Gnome or KDE, you may install an independent daemon, [https://github.com/agalakhov/xiccd xiccd], which does the same but does not depend on your desktop environment. Do not start two ICC-capable daemons (e.g. gnome-settings-daemon and {{AUR|xiccd}}) at the same time.\n\nIf you are not using any ICC-capable session daemon, make sure you use only one ICC loader - either xcalib, dispwin, dispcalGUI-apply-profiles or others. Otherwise, you can easily end up with an uncontrolled environment. (The most recently run loader sets the calibration, and the earlier loaded calibration is overwritten.)\n\nBefore using a particular ICC loader, you should understand that some tools set only the calibration curves (e.g. xcalib), some tools set only the display profile to X.org _ICC_PROFILE atom (e.g. xicc), and other tools do both tasks at once (e.g. dispwin, dispcalGUI-apply-profiles).\n\n{{Note|Running nvidia-settings or using the -load-config-only argument will override the ICC file when using the .xinitrc examples.}}\n\n=== xiccd ===\n\n{{AUR|xiccd}} is a simple bridge between colord and X. It allows non-GNOME and non-KDE desktop environment to load and apply icc profiles. \n\nMake sure {{Pkg|colord}} is installed, then install {{AUR|xiccd}}. \n\nCopy your icc profiles to the profile directory.\n\n # cp icc_profile /usr/share/color/icc/colord/\n\n[[Start/enable]] {{ic|colord.service}}. \n\nIf {{ic|colord}} was already running, you need to [[restart]] {{ic|colord.service}}, otherwise new profiles will not show up. \n\nExecute {{ic|xiccd}} in a terminal as a backend and ignore any verbose messages. Keep {{ic|xiccd}} running during the next steps.\n\n $ xiccd\n\nThis will enumerate displays and register them for colormgr(colord).\n\nOpen another terminal and execute {{ic|colormgr}}. Note the {{ic|Device ID}} of your screen.\n\n $ colormgr get-devices\n\nNote the {{ic|Profile ID}} which you added earlier and want to use.\n\n $ colormgr get-profiles\n\nAdd your profile to the display device.\n\n # colormgr device-add-profile device_id profile_id\n\nMake the profile as the default to the display device.\n\n # colormgr device-make-profile-default device_id profile_id\n\nDouble-check that {{AUR|xiccd}} installed {{ic|/etc/xdg/autostart/xiccd.desktop}} so that it [[Autostarting|autostarts]] at system startup.\n\n # cat /etc/xdg/autostart/xiccd.desktop\n\nClose all terminals, and reboot the system to check whether the icc profile is being applied.\nIf {{ic|colord}} was already running, you need to [[restart]] {{ic|colord.service}}.\n\n=== xcalib ===\n\n[http://xcalib.sourceforge.net/ xcalib] is a lightweight monitor calibration loader which can load an ICC monitor profile to be shared across desktop applications. Installation: install the package {{Pkg|xcalib}}.\n\n==== Xinitrc example ====\n\nLoad profile {{ic|P221W-sRGB.icc}} in {{Ic|/usr/share/color/icc}} on display host:0 when X server starts\n{{bc|#!/bin/bash\n\n/usr/bin/xcalib -d :0 /usr/share/color/icc/P221W-sRGB.icc}}\n\n==== JWM <StartupCommand> example ====\n\nLoad profile {{ic|P221W-Native.icc}} in {{Ic|/usr/local/share/color/icc}} on display host:0 when JWM starts\n  {{ic|<StartupCommand>}}xcalib -d :0 /usr/local/share/color/icc/P221W-Native.icc{{ic|</StartupCommand>}}\n\n=== dispwin ===\n\n[https://www.argyllcms.com/doc/dispwin.html dispwin] is a part of {{Pkg|argyllcms}}.\n\n==== Xinitrc example ====\n\nLoad profile {{ic|906w-6500K.icc}} in {{Ic|/home/arch/.color/icc}} on display 0 when X server starts\n{{bc|#!/bin/bash\n\n/usr/bin/dispwin -d0 /home/arch/.color/icc/906w-6500K.icc}}\n\n==== JWM <StartupCommand> example ====\n\nLoad Argyll calibration file {{ic|906w-7000K.cal}} in {{Ic|/usr/local/share/color/icc}} on display 1 when JWM starts\n  {{ic|<StartupCommand>}}dispwin -d1 /usr/local/share/color/icc/906w-7000K.cal{{ic|</StartupCommand>}}\n\nYou can easily use one of these loaders to apply the color profile in early boot stage when starting a display manager, e.g. using [https://wiki.ubuntu.com/LightDM#Adding_System_Hooks LightDM startup script]. This allows to load a single icc profile file. This will not work with loading several profile files when using a multi monitopr setup.\n\n=== Wayland ===\n\nWayland supports color management through color profiles, but the user interface for managing these profiles is currently not implemented properly. However, you can manually add a color profile through the following steps:\n\nFirstly, copy your ''.icc'' color profile file to the {{ic|/usr/share/color/icc/colord/}} directory.\n\nRun {{ic|colormgr get-profiles}} to obtain the available color profiles, and {{ic|colormgr get-devices}} to obtain the IDs of the attached devices.\n\nTo assign a color profile to a device, use the command {{ic|colormgr device-add-profile ''Device_ID Profile_ID''}}. The device ID is obtained from the output of {{ic|colormgr get-devices}} and the profile ID from {{ic|colormgr get-profiles}}.\n\nFor example, if your device ID is \"DP-3\" and the profile ID is \"icc-5fb87663ba378cadf463ba64d92dced3\", the command would look like:\n\n $ colormgr device-add-profile DP-3 icc-5fb87663ba378cadf463ba64d92dced3\n\nWith these steps, you can manually manage your color profiles in Wayland until the user interface is fully implemented. Once the ICC profile is added with this method, it will show up and work as expected in system settings like ''Color Manager'' in the KDE Plasma settings.\n\n== Applications that support ICC profiles ==\n\n* [https://fossies.org/linux/xsane/doc/sane-xsane-color-management-doc.html Xsane] can use ICC profiles for color-corrected scanning.\n* [[CUPS]] can use ICC profiles for color-corrected printing using [https://www.freedesktop.org/software/colord/faq.html#cups Colord], but the actual implementation and usability is [https://lists.cups.org/pipermail/cups/2016-December/056399.html unclear].\n* [[GIMP]] can use ICC profiles for display of the image being edited. The use of the installed ICC profile has to be explicitly enabled in the settings dialog, though.\n* [[mpv]] can take an ICC profile into account when playing a video. The command line argument is: {{ic|1=--icc-profile=/path/to/profile.icc}} or {{ic|--icc-profile-auto}}. Only {{ic|1=--vo=gpu}} and {{ic|1=--vo=gpu-next}} do color management; compatibility/fallback VO drivers will silently ignore the ICC profile options.\n* [[Firefox]], by default, uses the system-wide ICC profile only when displaying images that are already tagged with an ICC profile. To assume that untagged images use sRGB and apply color correction also to them, set the {{ic|gfx.color_management.mode}} preference to 1. Firefox can also use an ICC profile using the configuration option {{ic|gfx.color_management.display_profile}}.\n* Both Eye of Gnome ({{Pkg|eog}}) and Eye of MATE ({{Pkg|eom}}) automatically use the system-installed ICC profile.\n\n== See also ==\n\n* [[Using LPROF to profile monitors]] - Additional details on how to profile monitors\n* [[Wikipedia:Linux color management]]\n* [https://www.argyllcms.com/ Argyll Color Management System] - Official Site\n* [http://lprof.sourceforge.net/help/lprof-help.html LPROF Main Help Window] - Details on profiling printers and scanners\n* [https://displaycal.net/#concept DisplayCal: Basic concept of display calibration and profiling]\n* [https://web.archive.org/web/20221226110136/https://encrypted.pcode.nl/blog/2013/11/24/display-color-profiling-on-linux/ Display color profiling on Linux (XFCE)]\n* [https://linuxtidbits.wordpress.com/2013/04/20/handling-display-calibration/ Monitor Hardware Calibration]"
                    }
                ]
            },
            "12955": {
                "pageid": 12955,
                "ns": 0,
                "title": "Profile-sync-daemon",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Web browser]]\n[[ja:Profile-sync-daemon]]\n[[ru:Profile-sync-daemon]]\n{{Related articles start}}\n{{Related|Anything-sync-daemon}}\n{{Related|Firefox}}\n{{Related|Chromium}}\n{{Related|Pdnsd}}\n{{Related|SSD}}\n{{Related articles end}}\n\n{{pkg|profile-sync-daemon}} (psd) is a tiny pseudo-daemon designed to manage browser profile(s) in tmpfs and to periodically sync back to the physical disc (HDD/SSD). This is accomplished by an innovative use of [[rsync]] to maintain synchronization between a tmpfs copy and media-bound backup of the browser profile(s). Additionally, psd features several crash recovery features.\n\nThe design goals and benefits of psd are:\n\n# Transparent user experience\n# Reduced wear to physical drives\n# Speed\n\nSince the profile(s), browser cache, etc. are relocated into [[tmpfs]] (RAM disk), the corresponding I/O associated with using the browser is also redirected from the physical drive to RAM, thus reducing wear to the physical drive and also greatly improving browser speed and responsiveness.\n\n{{Note|\n* Some browsers such as Chrome/Chromium or Firefox (since v21) actually keep their cache directories '''separately''' from their profile directory. It is not within the scope of profile-sync-daemon to modify this behavior; users are encouraged to refer to the [[Chromium tweaks#Cache in tmpfs]] section for Chromium and to the [[Firefox on RAM]] article for several workarounds.\n* Occasionally, updates/changes are made to the default configuration file {{ic|/usr/share/psd/psd.conf}} upstream. The user copy {{ic|$XDG_CONFIG_HOME/psd/psd.conf}} will need to be diffed against it. On Arch Linux, pacman should notify the user to do this.\n* psd can slow down [https://www.reddit.com/r/archlinux/comments/4l7gvm/very_slow_when_login/d3lrx9y/ login], as that is when it copies your browser cache to RAM.}}\n\n== Installation ==\n\n[[Install]] the {{pkg|profile-sync-daemon}} package.\n\n== Configuration ==\n\nWhen you run psd for the first time, it will create {{ic|$XDG_CONFIG_HOME/psd/psd.conf}} (referred to hereafter as the configuration file) which contains all settings. You can run the {{ic|psd}} command before using {{ic|psd.service}} to create this file without starting synchronization.\n\n{{Note|Any edits made to this file while psd is active will be applied only after {{ic|psd.service}} has been [[restart]]ed.}}\n\n* Optionally enable the use of overlayfs to improve sync speed and to use a smaller memory footprint. Do this in the {{ic|USE_OVERLAYFS}} variable. The user will require sudo rights to {{ic|/usr/bin/psd-overlay-helper}} to use this option and the kernel must support overlayfs version 22 or higher. See [[#Overlayfs mode]] for additional details.\n* Optionally define which browsers are to be managed in the {{ic|BROWSERS}} array. If none are defined, the default is all detected browsers.\n* Optionally disable the use of crash-recovery snapshots (not recommended). Do this in the {{ic|USE_BACKUPS}} variable.\n* Optionally define the number of crash-recovery snapshots to keep. Do this in the {{ic|BACKUP_LIMIT}} variable.\n\nExample: Let us say that Chromium, Opera and Firefox are installed but only Chromium and Opera are to be sync'ed to tmpfs since the user keeps Firefox as a backup browser and it is seldom used:\n\n BROWSERS=(chromium opera)\n\nBeginning with version 5.54 of psd, native support for [[#Overlayfs mode|overlayfs]] is included. This feature requires at least a Linux kernel version of 3.18.0 or greater.\n\n=== Supported browsers ===\n\nCurrently, the following browsers are auto-detected and managed:\n\n* [[Chromium]]\n* {{AUR|chromium-dev}}\n* {{AUR|conkeror-git}}\n* [[Epiphany]]\n* {{Pkg|falkon}}\n* [[Firefox]] (all flavors including stable, beta, and nightly)\n* {{AUR|google-chrome}}\n* {{AUR|google-chrome-beta}}\n* {{AUR|google-chrome-dev}}\n* [https://bbs.archlinux.org/viewtopic.php?id=117157 heftig's version of Aurora]: An Arch Linux-only browser\n* {{AUR|icecat}}\n* [[Luakit]]\n* [[Opera]]\n* [[Otter Browser]]\n* {{AUR|palemoon}}\n* [[Qutebrowser]]\n* {{AUR|seamonkey}}\n* {{AUR|surf}}\n* {{Pkg|vivaldi}}\n\n== Usage ==\n\n[[Start/enable]] the {{ic|psd.service}} [[user unit]]. Additionally, a provided resync-timer will run an hourly resync from tmpfs back to the disk. The resync-timer is started automatically with {{ic|psd.service}} so there is no need to manually start the timer.\n\n=== Preview (parse) mode ===\n\nRun {{ic|psd parse}} to view what psd will do/is doing based on {{ic|$XDG_CONFIG_HOME/psd/psd.conf}}. It will also provide useful information such as profile size, paths, and if any recovery snapshots have been created.\n\n== Tips and tricks ==\n\n=== Sync at more frequent intervals ===\n\nThe package provided re-sync timer triggers once per hour. Users may optionally redefine this behavior simply by [[Systemd#Editing provided units|extending the systemd unit]]. The example below changes the timer to sync once every ten minutes (note that {{ic|OnUnitActiveSec}} needs to be cleared before being re-assigned [https://bugzilla.redhat.com/show_bug.cgi?id=756787#c9]):\n\n{{hc|~/.config/systemd/user/psd-resync.timer.d/frequency.conf|2=\n[Unit]\nDescription=Timer for Profile-sync-daemon - 10min\n\n[Timer]\nOnUnitActiveSec=\nOnUnitActiveSec=10min\n}}\n\nSee {{man|5|systemd.timer}} for additional options.\n\n=== Overlayfs mode ===\n\n{{Note|There are several versions of overlayfs available to the Linux kernel in production in various distributions. Versions 22 and lower have a module called 'overlayfs' while newer versions (23 and higher) have a module called 'overlay' -- note the lack of the 'fs' in the newer version. Psd will automatically detect the overlayfs available to your kernel if it is configured to use one of them.}}\n\nOverlayfs is a simple union file-system mainlined in the Linux kernel version 3.18.0. Starting with psd version 5.54, overlayfs can be used to reduce the memory footprint of psd's tmpfs space and to speed up sync and unsync operations. The magic is in how the overlay mount only writes out data that has changed rather than the entire profile. The same recovery features psd uses in its default mode are also active when running in overlayfs mode. Overlayfs mode is enabled by uncommenting the {{ic|1=USE_OVERLAYFS=\"yes\"}} line in {{ic|$XDG_CONFIG_HOME/psd/psd.conf}} followed by a [[restart]] of the daemon.\n\nSince version 6.05 of psd, users wanting to take advantage of this mode MUST have [[sudo]] rights (without password prompt) to {{ic|/usr/bin/psd-overlay-helper}} or global sudo rights. The following line in {{ic|/etc/sudoers}} will supply a [[user]] with these rights. Add it using [[visudo]]:\n\n ''username'' ALL=(ALL) NOPASSWD: /usr/bin/psd-overlay-helper\n\nSee the example in the PREVIEW MODE section above which shows a system using overlayfs to illustrate the memory savings that can be achieved. Note the \"overlayfs size\" report compared to the total \"profile size\" report for each profile. Be aware that these numbers will change depending on how much data is written to the profile, but in common use cases the overlayfs size will always be less than the profile size.\n\n{{Warning|Usage of psd in overlayfs mode (in particular, ''psd-overlay-helper'') may lead to privilege escalation. [https://github.com/graysky2/profile-sync-daemon/issues/235][https://github.com/graysky2/profile-sync-daemon/issues/286]}}\n\nThe way overlayfs works is to mount a read-only base copy (browser-back-ovfs) of the profile, and manage the new data on top of that. In order to avoid resyncing to the read-only file system, a copy is used instead. So using overlayfs is a trade off: faster initial sync times and less memory usage vs. disk space in the home dir.\n\n=== Allocate more memory to accommodate profiles in /run/user/xxxx ===\n\nThe standard way of controlling the size of {{ic|/run/user}} is the RuntimeDirectorySize directive in {{ic|/etc/systemd/logind.conf}} (see {{man|5|logind.conf}} for more). By default, 10% of physical memory is used but one can increase it safely. Remember that tmpfs only consumes what is actually used; the number specified here is just a maximum allowed.\n\n=== Snapshots ===\n\nOdds are the \"last good\" backup of your browser profiles is just fine still sitting happily on your filesystem. Upon restarting psd (on a reboot for example), a check is performed to see if the symlink to the tmpfs copy of your profile is valid. If it is invalid, psd will snapshot the \"last good\" backup before it rotates it back into place. This is more for a sanity check that psd did no harm and that any data loss was a function of something else.\n\n{{Note|Users can disable the snapshot/backup feature entirely by uncommenting and setting the {{ic|USE_BACKUPS}} variable to {{ic|\"no\"}} in {{ic|$XDG_CONFIG_HOME/psd/psd.conf}} if desired.}}\n\nYou will find the snapshot in the same directory as the browser profile and it will contain a date-time-stamp that corresponds to the time at which the recovery took place. For example, chromium will be {{ic|~/.config/chromium-backup-crashrecovery-20130912_153310}} -- of course, the date_time suffix will be different for you.\n\nTo restore your snapshots:\n\n* [[Stop]] the {{ic|psd.service}} [[user unit]].\n* Confirm that there is no symlink to the tmpfs browser profile directory. If there is, psd did not stop correctly for other reasons.\n* Move the \"bad\" copy of the profile to a backup (do not blindly delete anything).\n* Copy the snapshot directory to the name that browser expects.\n\nExample using Chromium:\n\n $ mv ~/.config/chromium ~/.config/chromium-bad\n $ cp -a ~/.config/chromium-backup-crashrecovery-20130912_153310 ~/.config/chromium\n\nAt this point you can launch chromium which will use the backup snapshot you just copied into place. If all is well, close the browser and restart psd. You may safely delete {{ic|~/.config/chromium-backup-crashrecovery-20130912_153310}} at this point.\n\n==== Clean all the snapshot with the clean mode ====\n\nRunning {{ic|psd clean}} will delete ALL recovery snapshots that have accumulated. Run this only if you are sure that you want to delete them.\n\n== Support ==\n\nPost in the [https://bbs.archlinux.org/viewtopic.php?pid=1026974 discussion thread] with comments or concerns.\n\n== See also ==\n\n* [http://www.webupd8.org/2013/02/keep-your-browser-profiles-in-tmpfs-ram.html Web Upd8 - Keep Your Browser Profiles In tmpfs (RAM) For Reduced Disk Writes And Increased Performance With Profile Sync Daemon]\n* [https://web.archive.org/web/20220516124034/http://www.bernaerts-nicolas.fr/linux/74-ubuntu/250-ubuntu-tweaks-ssd Nicolas Bernaerts - Tweaks for SSD drive]"
                    }
                ]
            },
            "13218": {
                "pageid": 13218,
                "ns": 0,
                "title": "List of applications/Internet",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Internet applications]]\n[[Category:Lists of software]]\n[[es:List of applications (Espa\u00f1ol)/Internet]]\n[[ja:\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u4e00\u89a7/\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8]]\n[[zh-hans:List of applications/Internet]]\n{{List of applications navigation}}\n\n== Network connection ==\n\n=== Network managers ===\n\nSee [[Network configuration#Network managers]].\n\n=== VPN clients ===\n\n* {{App|GlobalProtect-openconnect|A GlobalProtect VPN client (GUI) for Linux, based on OpenConnect and built with Qt5, supports SAML auth mode.|https://github.com/yuezk/GlobalProtect-openconnect/|{{AUR|globalprotect-openconnect-git}}}}\n* {{App|Libreswan|A free software implementation of the most widely supported and standarized VPN protocol based on (\"IPsec\") and the Internet Key Exchange (\"IKE\").|https://libreswan.org/|{{AUR|libreswan}}}}\n* {{App|[[Mullvad]]|A GUI client for the Mullvad VPN service |https://mullvad.net/|{{AUR|mullvad-vpn}}}}\n* {{App|[[Nebula]]|A mesh VPN network|https://nebula.defined.net/docs/|{{pkg|nebula}}}}\n* {{App|[[NetworkManager]]|Supports a variety of protocols (e.g. MS, Cisco, Fortinet) via a plugin system.|https://wiki.gnome.org/Projects/NetworkManager/VPN|{{pkg|networkmanager}}}}\n* {{App|[[OpenConnect]]|Supports Cisco and Juniper VPNs.|https://www.infradead.org/openconnect/|{{pkg|openconnect}}}}\n* {{App|[[Openswan]]|IPsec-based VPN Solution.|https://www.openswan.org/|{{AUR|openswan}}}}\n* {{App|[[OpenVPN]]|To connect to OpenVPN VPNs.|https://openvpn.net/|{{pkg|openvpn}}}}\n* {{App|[[PPTP Client]]|To connect to PPTP VPNs, like Microsoft VPNs (MPPE). (insecure)|https://pptpclient.sourceforge.net/|{{pkg|pptpclient}}}}\n* {{App|RiseupVPN|A GUI client for the Riseup VPN service from riseup.net.|https://riseup.net/en/vpn/ | {{AUR|riseup-vpn}} or {{AUR|riseup-vpn-configurator}} }}\n* {{App|[[strongSwan]]|IPsec-based VPN Solution.|https://www.strongswan.org/|{{pkg|strongswan}}}}\n* {{App|[[tinc]]|tinc is a free VPN daemon.|https://www.tinc-vpn.org/|{{pkg|tinc}}}}\n* {{App|vopono|OpenVPN and Wireguard wrapper to launch applications with VPN tunnels in network namespaces.|https://github.com/jamesmcm/vopono|{{AUR|vopono}}}}\n* {{App|vpnc|To connect to Cisco 3000 VPN Concentrators.|https://www.unix-ag.uni-kl.de/~massar/vpnc/|{{pkg|vpnc}}}}\n* {{App|[[WireGuard]]|Next generation secure network tunnel.|https://www.wireguard.com/|{{Pkg|wireguard-tools}}}}\n\n=== Proxy servers ===\n\n* {{App|Brook|Proxy focusing on strong encryption and being undetectable.|https://txthinking.github.io/brook/|{{Pkg|brook}}}}\n* {{App|Clash|A rule-based tunnel in Go.|https://github.com/Dreamacro/clash{{Dead link|2024|01|13|status=404}}|{{Pkg|clash}}}}\n* {{App|Dante|SOCKS server and SOCKS client, implementing [[RFC:1928]] and related standards.|https://www.inet.no/dante/|{{Pkg|dante}}}}\n* {{App|Geph|A modular Internet censorship circumvention system designed specifically to deal with national filtering.|https://geph.io/en/|{{AUR|geph4-client}}}}\n* {{App|[[Na\u00efveProxy]]|A Proxy using Chrome's network stack to camouflage traffic with strong censorship resistence and low detectablility.|https://github.com/klzgrad/naiveproxy|{{Aur|naiveproxy}}}}\n* {{App|[[Privoxy]]|Non-caching web proxy with advanced filtering capabilities for enhancing privacy, modifying web page data and HTTP headers, controlling access, and removing ads and other obnoxious Internet junk.|https://www.privoxy.org/|{{Pkg|privoxy}}}}\n* {{App|[[V2Ray]]|V2Ray is the core of Project V, which is a set of tools to help you build your own privacy network over the internet.|https://www.v2fly.org/en_US/|{{Pkg|v2ray}}}}\n* {{App|Nekoray|Qt based cross-platform GUI proxy configuration manager (backend: v2ray / sing-box)|https://github.com/MatsuriDayo/nekoray|{{AUR|nekoray-git}}}}\n* {{App|[[Shadowsocks]]|Secure socks5 proxy, designed to protect your Internet traffic.|https://shadowsocks.org/|Python: {{Pkg|shadowsocks}}, Rust: {{Pkg|shadowsocks-rust}}}}\n* {{App|[[Squid]]|Caching proxy for the Web supporting HTTP, HTTPS, FTP, and more.|http://www.squid-cache.org/|{{Pkg|squid}}}}\n* {{App|[[Stunnel]]|A server and client to add and remove TLS encryption to TCP data flow.|https://www.stunnel.org/|{{Pkg|stunnel}}}}\n* {{App|Tinyproxy|Lightweight HTTP/HTTPS proxy daemon.|https://tinyproxy.github.io/|{{Pkg|tinyproxy}}}}\n* {{App|[[Trojan]]|An unidentifiable mechanism that helps you bypass GFW.|https://trojan-gfw.github.io/trojan/|{{Pkg|trojan}}}}\n* {{App|[[Varnish]]|High-performance HTTP accelerator.|https://varnish-cache.org/|{{Pkg|varnish}}}}\n* {{App|XX-Net|Easy to use web proxy tool.|https://github.com/XX-net/XX-Net/|{{Aur|xx-net}}}}\n* {{App|Ziproxy|Forwarding (non-caching) compressing HTTP proxy server.|http://ziproxy.sourceforge.net/|{{Pkg|ziproxy}}}}\n\n=== Anonymizing networks ===\n\n* {{App|Arti|Rust implementation of the Tor anonymizing overlay network.|https://gitlab.torproject.org/tpo/core/arti|{{Pkg|arti}}}}\n* {{App|Freenet|An encrypted network without censorship.|https://freenetproject.org/|{{AUR|freenet}}}}\n* {{App|[[GNUnet]]|Framework for secure peer-to-peer networking.|https://gnunet.org/|CLI: {{AUR|gnunet}}, GUI: {{AUR|gnunet-gtk}}}}\n* {{App|[[I2P]]|Distributed anonymous network.|https://geti2p.net/|{{Pkg|i2pd}}, {{AUR|i2p}}}}\n* {{App|Lantern|Peer-to-peer internet censorship circumvention software.|https://getlantern.org/|{{AUR|lantern-bin}}}}\n* {{App|Lokinet|Anonymous, decentralized and IP based overlay network for the internet.|https://lokinet.org/|{{AUR|lokinet}}}}\n* {{App|[[Tor]]|Anonymizing overlay network.|https://www.torproject.org/|{{Pkg|tor}}}}\n\n=== Network tunnels ===\n\n* {{App|6tunnel|Tunnels IPv6 connections for IPv4-only applications.|https://github.com/wojtekka/6tunnel/|{{Pkg|6tunnel}}}}\n* {{App|iodine|Tunnel IPv4 data through a DNS server.|https://code.kryo.se/iodine/|{{Pkg|iodine}}}}\n* {{App|isatapd|Creates and maintains an ISATAP tunnel ([[RFC:5214]]).|http://www.saschahlusiak.de/linux/isatap.htm|{{Pkg|isatapd}}}}\n* {{App|Ping Tunnel|A tool for reliably tunneling TCP connections over ICMP echo request and reply packets.|https://www.cs.uit.no/~daniels/PingTunnel/|{{Pkg|ptunnel}}}}\n* {{App|Tuntox|Tunnel TCP connections over the Tox protocol.|https://github.com/gjedeer/tuntox/|{{Pkg|tuntox}}}}\n\n== Web browsers ==\n\nSee also [[Wikipedia:Comparison of web browsers]].\n\n=== Console ===\n\n* {{App|[[Wikipedia:Browsh|browsh]]|A fully-modern text-based browser. Runs as a frontend to headless Firefox.|https://www.brow.sh/|{{AUR|browsh}}}}\n* {{App|[[ELinks]]|Advanced and well-established feature-rich text mode web browser with mouse wheel scroll support, frames and tables, extensible with Lua & Guile (links fork).|http://elinks.or.cz/|{{Pkg|elinks}}}}\n* {{App|[[Wikipedia:Links (web browser)|Links]]|Graphics and text mode web browser. Includes a console version similar to Lynx.|http://links.twibright.com/|{{Pkg|links}}}}\n* {{App|[[Wikipedia:Lynx (web browser)|Lynx]]|Text browser for the World Wide Web.|https://lynx.invisible-island.net/|{{Pkg|lynx}}}}\n* {{App|[[w3m]]|Pager/text-based web browser. It has vim-like keybindings, and is able to display images.|https://salsa.debian.org/debian/w3m|{{Pkg|w3m}}}}\n\n=== Graphical ===\n\n==== Gecko-based ====\n\nSee also [[Wikipedia:Gecko (software)]].\n\n* {{App|[[Firefox]]|Extensible browser from Mozilla based on Gecko with fast rendering.|https://mozilla.com/firefox|{{Pkg|firefox}}}}\n* {{App|[[Wikipedia:SeaMonkey|SeaMonkey]]|Continuation of the Mozilla Internet Suite.|https://www.seamonkey-project.org/|{{AUR|seamonkey}}}}\n\n===== Firefox spin-offs =====\n\n* {{App|Dot|A fork of firefox focused on privacy and a sleeker UI.|https://www.dothq.co/|{{AUR|dot-bin}}}}\n* {{App|FireDragon|A fork of Floorp that includes KDE integration patches and custom branding for Garuda.|https://gitlab.com/garuda-linux/firedragon/settings|{{AUR|firedragon}}}}\n* {{App|Floorp|Firefox-based browser with excellent privacy protection, developed by a community of students in Japan.| https://floorp.ablaze.one|{{AUR|floorp}}}}\n* {{App|[[Wikipedia:GNU IceCat|GNU IceCat]]|A customized build of Firefox ESR distributed by the GNU Project, stripped of non-free components and with additional privacy extensions. Release cycle may be delayed compared to Mozilla Firefox.|https://www.gnu.org/software/gnuzilla/|{{AUR|icecat}}}}\n* {{App|LibreWolf|A fork of Firefox, focused on privacy, security and freedom.|https://librewolf.net/|{{AUR|librewolf}}}}\n* {{App|Mercury|Firefox fork with compiler optimizations and patches from Librewolf, Waterfox, and GNU IceCat.|https://thorium.rocks/mercury|{{AUR|mercury-browser-bin}}}}\n* {{App|Mullvad Browser|Privacy-focused web browser developed by Mullvad VPN and the Tor Project.|https://mullvad.net/en/browser|{{AUR|mullvad-browser-bin}}}}\n* {{App|Pulse Browser|An experimental Firefox fork that enhances focus and increases work productivity due to its Hyper minimalistic UI and built-in tools.| https://pulsebrowser.app/|{{AUR|pulse-browser-bin}}}}\n* {{App|[[Tor]] Browser Launcher|Securely and easily download, verify, install, and launch Tor Browser, a fork of Firefox ESR.|https://github.com/micahflee/torbrowser-launcher|{{Pkg|torbrowser-launcher}}}}\n* {{App|Waterfox Classic|Optimized fork of Firefox 56, without data collection and allowing unsigned extensions and NPAPI plugins.|https://www.waterfox.net/|{{AUR|waterfox-classic-bin}}}}\n\n==== Blink-based ====\n\nSee also [[Wikipedia:Blink (web engine)]].\n\n* {{App|[[Chromium]]|Web browser developed by Google, the open source project behind Google Chrome.|https://www.chromium.org/|{{Pkg|chromium}}}}\n\n===== Privacy-focused chromium spin-offs =====\n\n* {{App|[[Wikipedia:Brave (web browser)|Brave]]|Web browser with builtin ad- and tracker blocking.|https://www.brave.com/|{{AUR|brave}}}}\n* {{App|Iridium|A privacy-focused [https://git.iridiumbrowser.de/cgit.cgi/iridium-browser/tree/?h&#61;patchview patchset] for Chromium. See [https://github.com/iridium-browser/tracker/wiki/Differences-between-Iridium-and-Chromium differences from Chromium].|https://iridiumbrowser.de/|{{AUR|iridium-rpm}}}}\n* {{App|Ungoogled Chromium|Modifications to Google Chromium for removing Google integration and enhancing privacy, control, and transparency|https://github.com/ungoogled-software/ungoogled-chromium|{{AUR|ungoogled-chromium}}}}\n* {{App|Thorium|Thorium develops a periodically synchronized fork of the Chromium browser, expanded with additional patches to optimize performance, improve usability and enhance security. According to the developers' tests Thorium is 8-40% ahead of the regular Chromium, mainly due to the inclusion of additional optimizations during compilation.|https://thorium.rocks/|{{AUR|thorium-browser-bin}}}}\n\n===== Proprietary chromium spin-offs =====\n\n* {{App|[[Google Chrome]]|Proprietary web browser developed by Google.|https://www.google.com/chrome/|{{AUR|google-chrome}}}}\n* {{App|[[Wikipedia:Microsoft Edge|Microsoft Edge]]|Proprietary web browser developed by Microsoft.|https://www.microsoft.com/edge/|{{AUR|microsoft-edge-stable-bin}}}}\n* {{App|Opera|Proprietary browser developed by Opera Software.|https://opera.com|{{AUR|opera}}}}\n* {{App|[[Wikipedia:SlimBrowser|Slimjet]]|Fast, smart and powerful proprietary browser based on Chromium.|https://www.slimjet.com/|{{AUR|slimjet}}}}\n* {{App|[[Vivaldi]]|An advanced proprietary browser made with the power user in mind.|https://vivaldi.com/|{{Pkg|vivaldi}}}}\n* {{App|[[Wikipedia:Yandex Browser|Yandex Browser]]|Proprietary browser that combines a minimal design with sophisticated technology to make the web faster, safer, and easier.|https://browser.yandex.com/|{{AUR|yandex-browser-beta}}}}\n\n===== Browsers based on qt5-webengine =====\n\n* {{App|[[Wikipedia:Dooble|Dooble]]|Colorful Web browser.|https://textbrowser.github.io/dooble/|{{AUR|dooble}}}}\n* {{App|[[Wikipedia:Eric Python IDE|Eric]]|QtWebEngine-based HTML browser, part of the eric6 development toolset, can be launched with the {{ic|eric6_browser}} command.|https://eric-ide.python-projects.org/|{{AUR|eric}}}}\n* {{App|[[Wikipedia:Falkon|Falkon]]|Web browser based on QtWebEngine, written in Qt framework.|https://falkon.org/|{{pkg|falkon}}}}\n* {{App|[[Wikipedia:Konqueror|Konqueror]]|Web browser based on Qt toolkit and Qt WebEngine (or KHTML layout engine), part of {{Grp|kde-network}}. |https://apps.kde.org/konqueror/|{{Pkg|konqueror}}}}\n* {{App|Liri Browser|A minimalistic material design web browser written for Liri.|https://github.com/lirios/browser|{{AUR|liri-browser-git}}}}\n* {{App|Otter Browser|Browser aiming to recreate classic Opera (12.x) UI using Qt5.|https://otter-browser.org/|{{AUR|otter-browser}}}}\n* {{App|Qt WebBrowser|Browser for embedded devices developed using the capabilities of Qt and Qt WebEngine.|https://doc.qt.io/QtWebBrowser/|{{AUR|qtwebbrowser}}}}\n* {{App|[[qutebrowser]]|A keyboard-driven, [[vim]]-like browser based on PyQt5 and QtWebEngine.|https://qutebrowser.org/|{{Pkg|qutebrowser}}}}\n\n===== Browsers based on electron =====\n\n* {{App|Beaker|Peer-to-peer web browser with tools to create and host websites.|https://github.com/beakerbrowser/beaker|{{AUR|beaker-browser}}}}\n* {{App|Catalyst|A minimal FOSS web browser with no data collection.|https://getcatalyst.eu.org|{{AUR|catalyst-browser-bin}}}}\n* {{App|Franz|Messaging browser for WhatsApp, Facebook Messenger, Slack, Telegram and many other web services.|https://meetfranz.com/|{{AUR|franz}}}}\n* {{App|Hamsket|A GPL-licensed alternative to Franz, forked from the last open sources of Rambox.|https://github.com/TheGoddessInari/hamsket|{{AUR|hamsket}}}}\n* {{App|Min|A fast, minimal browser that protects your privacy. It includes an interface designed to minimize distractions.|https://minbrowser.org/|{{AUR|min}}}}\n* {{App|Vieb|Minimalist Electron-based browser with Vim-inspired keybindings and a built-in ad-blocker.|https://vieb.dev|{{AUR|vieb-bin}}}}\n\n==== WebKit-based ====\n\nSee also [[Wikipedia:WebKit]].\n\n{{Note|webkitgtk, webkitgtk2, qt5-webkit and qtwebkit-based browsers were removed from the list, because these are today considered insecure and outdated. More info [https://blogs.gnome.org/mcatanzaro/2016/02/01/on-webkit-security-updates/ here] and [https://blogs.gnome.org/mcatanzaro/2022/11/04/stop-using-qtwebkit/ here].}}\n\n===== Browsers based on webkit2gtk =====\n\nMost of these support ad-blocking via [https://github.com/jun7/wyebadblock wyebadblock].\n* {{App|[[Badwolf]]|A minimalist privacy-focused browser.|https://hacktivis.me/projects/badwolf|{{AUR|badwolf}}}}\n* {{App|Ephemeral|A private-by-default, always-incognito browser for elementary OS.|https://github.com/cassidyjames/ephemeral|{{AUR|ephemeral}}{{Broken package link|package not found}}}}\n* {{App|Eolie|Simple web browser for GNOME.|https://wiki.gnome.org/Apps/Eolie|{{Pkg|eolie}}}}\n* {{App|[[GNOME Web]]|Browser which uses the WebKitGTK rendering engine. Part of {{Grp|gnome}}.|https://wiki.gnome.org/Apps/Web|{{Pkg|epiphany}}}}\n* {{App|[[Luakit]]|Fast, small, webkit based browser framework extensible by Lua.|https://luakit.github.io/|{{Pkg|luakit}}}}\n* {{App|[[Wikipedia:Midori (web browser)|Midori]]|Lightweight web browser based on GTK and WebKit.|https://www.midori-browser.org/|{{AUR|midori}}}}\n* {{App|Nyxt|Keyboard-oriented, infinitely extensible browser designed for power users. It has familiar key-bindings (Emacs, VI, CUA) and features fuzzy searching between tabs, multiple selections, history as a tree and more.|https://nyxt.atlas.engineer/|{{Pkg|nyxt}}}}\n* {{App|[[surf]]|Lightweight WebKit-based browser, which follows the [https://suckless.org/philosophy suckless philosophy] (basically, the browser itself is a single C source file).|https://surf.suckless.org/|{{AUR|surf}}}}\n* {{App|Surfer|Simple keyboard based web browser, written in C. It supports custom JS-scripts.|https://github.com/nihilowy/surfer|{{AUR|surfer-git}}}}\n* {{App|Tangram|Integration of web applications into the desktop, specifically GNOME.|https://github.com/sonnyp/Tangram|{{AUR|tangram}}}}\n* {{App|Vimb|A Vim-like web browser written in C that is inspired by Pentadactyl and Vimprobable. It includes a manpage and a howto for common configurations. It supports custom JS-scripts, dark mode and handles geolocation requests.|https://fanglingsu.github.io/vimb/|{{Pkg|vimb}}}}\n* {{App|wyeb|A vim-like web browser inspired by dwb and luakit with Adblock.|https://github.com/jun7/wyeb|{{aur|wyeb-git}}}}\n\n==== Other ====\n\n* {{App|[[Dillo]]|Small, fast graphical web browser built on [[Wikipedia:Fltk|FLTK]]. Uses its own layout engine.|https://dillo-browser.github.io/|{{Pkg|dillo}}}}\n* {{App|Ladybird|Web browser built from scratch using the [[Wikipedia:SerenityOS|SerenityOS]] LibWeb engine.|https://ladybird.dev/|{{AUR|ladybird}}}}\n* {{App|[[Wikipedia:Links (web browser)|Links]]|Graphics and text mode web browser. Includes a graphical X-window/framebuffer version with CSS, image rendering, pull-down menus. It can be launched with the {{ic|xlinks -g}} command.|http://links.twibright.com/|{{Pkg|links}}}}\n* {{App|[[Wikipedia:NetSurf|NetSurf]]|Featherweight browser written in C, notable for its slowly developing JavaScript support and fast rendering through its own layout engine.|https://www.netsurf-browser.org/|{{Pkg|netsurf}}}}\n* {{App|[[Wikipedia:Pale Moon (web browser)|Pale Moon]]|A Firefox fork focussing on speed, with a pre-Firefox 29 interface. Uses [[Wikipedia:Goanna (software)|Goanna]] layout engine, a fork of Gecko. Firefox add-ons may not be compatible. Without support for newer Firefox features such as WebExtensions, cache2, e10s, and OTMC. Many of the old [https://github.com/JustOff/ca-archive 93,598 versions of 19,450 Firefox add-ons created by 14,274 developers over the past 15 years using XUL/XPCOM technology in the Classic Add-ons Archive] still work.|https://www.palemoon.org/|{{AUR|palemoon}}}}\n\n=== Gemini browsers ===\n\nSee also [[Wikipedia:Gemini (protocol)#Software]].\n\n* {{App|Amfora|Terminal browser for the Gemini protocol.|https://github.com/makeworld-the-better-one/amfora|{{Pkg|amfora}}}}\n* {{App|Bombabillo|Non-web client for the terminal, supporting Gopher, Gemini and much more.|https://bombadillo.colorfield.space/|{{AUR|bombadillo-git}}}}\n* {{App|Castor|Graphical client for the Gemini, Gopher, and Finger protocols, written in Rust with GTK.|https://git.sr.ht/~julienxx/castor|{{AUR|castor}}}}\n* {{App|Geopard|A graphical gemini client written in rust, using the gtk4 toolkit.|https://github.com/ranfdev/Geopard|{{AUR|geopard}}}}\n* {{App|Kristall|Qt-based Gemini browser.|https://github.com/MasterQ32/kristall|{{AUR|kristall}}}}\n* {{App|Lagrange|Desktop GUI client for browsing Gemini space, offering modern conveniences familiar from web browsers.|https://gmi.skyjake.fi/lagrange|{{AUR|lagrange}}}}\n* {{App|Telescope|w3m-like browser for Gemini.|https://telescope.omarpolo.com|{{AUR|telescope}}}}\n\n== Web servers ==\n\nA [[Wikipedia:Web server|web server]] serves HTML web pages and other files via HTTP to clients like [[:Category:Web browser|web browsers]].\nThe major web servers can be interfaced with programs to serve dynamic content ([[web applications]]).\n\nSee also [[:Category:Web server]] and [[Wikipedia:Comparison of web server software]].\n\n* {{App|[[Apache HTTP Server]]|A high performance Unix-based HTTP server.|https://httpd.apache.org/|{{Pkg|apache}}}}\n* {{App|[[Caddy]]|HTTP/2 web server with automatic HTTPS.|https://caddyserver.com/|{{Pkg|caddy}}}}\n* {{App|[[Hiawatha]]|Secure and advanced web server.|https://www.hiawatha-webserver.org/|{{AUR|hiawatha}}}}\n* {{App|[[Lighttpd]]|A secure, fast, compliant and very flexible web-server.|https://www.lighttpd.net/|{{Pkg|lighttpd}}}}\n* {{App|[[nginx]]|Lightweight HTTP server and IMAP/POP3 proxy server.|https://nginx.org/|{{Pkg|nginx}}}}\n* {{App|sthttpd|Supported fork of the thttpd web server.|https://github.com/blueness/sthttpd|{{AUR|sthttpd}}}}\n* {{App|Traefik|A modern reverse proxy and load balancer that makes deploying microservices easy.|https://traefik.io/traefik/|{{AUR|traefik-bin}}}}\n* {{App|yaws|Web server/framework written in Erlang.|http://yaws.hyber.org/{{Dead link|2023|06|17|status=domain name not resolved}}|{{AUR|yaws}}}}\n\n=== Static web servers ===\n\n* {{App|darkhttpd|A small and secure static web server, written in C, does not support HTTPS or Auth.|https://unix4lyfe.org/darkhttpd/|{{Pkg|darkhttpd}}}}\n* {{app|miniserve|Rust alternative to darkhttpd with UTF-8, optional HTTP authentication, file uploading, and more.|https://github.com/svenstaro/miniserve|{{pkg|miniserve}}}}\n* {{App|quark|An extremly small and simple http get-only web server. It only serves static pages on a single host.|https://tools.suckless.org/quark/|{{AUR|quark-git}}}}\n* {{App|serve|Static file serving and directory listing.|https://github.com/zeit/serve|{{AUR|nodejs-serve}}}}\n* {{App|Webfs|Simple and instant web server for mostly static content.|https://linux.bytesex.org/misc/webfs.html|{{AUR|webfs}}}}\n\nThe [[Python]] standard library module [https://docs.python.org/library/http.server.html http.server] can also be used from the command-line.\n\n=== Specialized web servers ===\n\n* {{App|chezdav|WebDAV server that allows to share a particular directory.|https://wiki.gnome.org/phodav|{{Pkg|phodav}}}}\n* {{App|Mongoose|Embedded web server library, supports WebSocket and MQTT.|https://github.com/cesanta/mongoose|{{AUR|mongoose}}}}\n* {{App|OnionShare|Lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you.|https://onionshare.org/|{{Pkg|onionshare}}}}\n* {{App|Transfer More|A minimalist open-source upload HTTP server to store and share files temporarily, written in Crystal, and based on Kemal.|https://up.sceptique.eu/|{{AUR|transfer-more}}}}\n* {{App|VServer|GTK application, which opens an http server in the selected folder and shares your files.|https://github.com/bcedu/ValaSimpleHTTPServer|{{AUR|vserver-git}}}}\n* {{App|webhook|Small server for creating HTTP endpoints (hooks)|https://github.com/adnanh/webhook|{{Pkg|webhook}}}}\n* {{App|Woof|An ad-hoc single file webserver; Web Offer One File.|http://www.home.unix-ag.org/simon/woof.html|{{AUR|woof}}}}\n\n=== WSGI servers ===\n\n* {{App|Gunicorn|A Python WSGI HTTP Server for UNIX.|https://gunicorn.org/|{{Pkg|gunicorn}}}}\n* {{App|[[uWSGI]]|A fast, self-healing and developer/sysadmin-friendly application container server written in C.|https://uwsgi-docs.readthedocs.io/|{{Pkg|uwsgi}}}}\n* {{App|Waitress|A WSGI server for Python 3.|https://github.com/Pylons/waitress|{{Pkg|python-waitress}}}}\n\nApache also supports WSGI with [[mod_wsgi]].\n\n=== Performance testing ===\n\n* {{App|http_load|A webserver performance testing tool, runs in a single process.|https://www.acme.com/software/http_load/|{{AUR|http_load}}}}\n* {{App|httperf|Can generate various HTTP workloads, written in C.|https://github.com/httperf/httperf|{{AUR|httperf-git}}}}\n* {{app|httping|A \"ping\"-like tool for HTTP requests|https://www.vanheusden.com/httping/|{{pkg|httping}}}}\n* {{App|siege|An HTTP regression testing and benchmarking utility.|https://www.joedog.org/siege-home/|{{Pkg|siege}}}}\n* {{App|vegeta|HTTP load testing tool, written in Go.|https://github.com/tsenart/vegeta|{{Pkg|vegeta}}}}\n* {{App|Web Bench|Benchmarking tool, uses fork() for simulating multiple clients.|http://home.tiscali.cz/~cz210552/webbench.html|{{AUR|webbench}}}}\n\n== File sharing ==\n\n=== Download managers ===\n\nSee also [[Wikipedia:Comparison of download managers]].\n\n==== Console ====\n\n* {{App|[[aria2]]|Lightweight download utility that supports HTTP/S, FTP, SFTP, BitTorrent and Metalink. It can run as a daemon controlled via a built-in JSON-RPC or XML-RPC interface.|https://aria2.github.io/|{{Pkg|aria2}}}}\n* {{App|Axel|Featherweight command line download accelerator sitting at under 250kB on disk. Supports HTTP/S and FTP.|https://github.com/eribertomota/axel|{{Pkg|axel}}}}\n* {{App|[[cURL]]|A URL retrieval utility and library. Supports HTTP, FTP and SFTP.|https://curl.haxx.se/|{{Pkg|curl}}}}\n* {{App|HTTPie|Human-friendly command-line HTTP client for the API era.|https://github.com/httpie/httpie|{{Pkg|httpie}}}}\n* {{App|[[Wikipedia:HTTrack|HTTrack]]|An easy-to-use offline browser utility. It allows you to download a World Wide Web site from the Internet to a local directory, building recursively all directories, getting HTML, images, and other files from the server to your computer.|https://www.httrack.com/|{{Pkg|httrack}}}}\n* {{App|[[Wikipedia:Lftp|LFTP]]|Sophisticated file transfer program. Supports HTTP, FTP, SFTP, FISH, and BitTorrent.|https://lftp.yar.ru/|{{Pkg|lftp}}}}\n* {{App|Plowshare|A set of command-line tools designed for managing file-sharing websites (aka Hosters).|https://github.com/mcrapet/plowshare|{{AUR|plowshare}}}}\n* {{App|[[Wikipedia:RTMPDump|RTMPDump]]|Download FLV videos through RTMP (Adobe's proprietary protocol for Flash video players)|http://rtmpdump.mplayerhq.hu/|{{Pkg|rtmpdump}}}}\n* {{App|snarf|Command-line URL retrieval tool. Supports HTTP and FTP.|https://www.xach.com/snarf/|{{AUR|snarf}}}}\n* {{App|[[Streamlink]]|Launch streams from various streaming services in a custom video player or save them to a file.|https://streamlink.github.io/|{{Pkg|streamlink}}}}\n* {{App|[[Wikipedia:Streamripper|Streamripper]]|Records and splits streaming mp3 into tracks.|https://streamripper.sourceforge.net/|{{AUR|streamripper}}}}\n* {{App|yewtube|Terminal-based YouTube player and downloader.|https://github.com/mps-youtube/yewtube|{{AUR|yewtube}}}}\n* {{App|You-Get|Download media contents (videos, audios, images) from the Web.|https://you-get.org/|{{AUR|you-get}}}}\n* {{App|youtube-dl|Download videos from YouTube and many other web sites.|https://rg3.github.io/youtube-dl/|{{AUR|youtube-dl}}}}\n* {{App|youtube-viewer|Command line utility for viewing YouTube videos.|https://github.com/trizen/youtube-viewer|{{AUR|youtube-viewer}}}}\n* {{App|ytfzf|A POSIX script to find and watch youtube videos from the terminal.|https://github.com/pystardust/ytfzf|{{Pkg|ytfzf}}}}\n* {{App|[[yt-dlp]]|A youtube-dl fork with additional features and fixes.|https://github.com/yt-dlp/yt-dlp|{{Pkg|yt-dlp}}}}\n* {{App|[[Wget]]|A network utility to retrieve files from the Web. Supports HTTP and FTP.|https://www.gnu.org/software/wget/|{{Pkg|wget}}}}\n\n==== Graphical ====\n\n* {{App|ClipGrab|Downloader and converter for YouTube, Vimeo and many other online video sites.|https://clipgrab.org/|{{Pkg|clipgrab}}}}\n* {{App|FatRat|Qt based download manager with support for HTTP, FTP, SFTP, BitTorrent and Metalink.|https://github.com/LubosD/fatrat|{{AUR|fatrat-git}}}}\n* {{App|Forklift|Simple GUI for youtube-dl using PyGObject.|https://github.com/Johnn3y/Forklift|{{AUR|forklift-git}}}}\n* {{App|gtk-youtube-viewer|GTK utility for viewing YouTube videos. See optional dependencies for the GUI.|https://github.com/trizen/youtube-viewer|{{AUR|youtube-viewer}}}}\n* {{App|[[Wikipedia:Wget#GWget|Gwget]]|Download manager for GNOME. Supports HTTP and FTP.|https://gitlab.gnome.org/Archive/gwget|{{Pkg|gwget}}}}\n* {{App|Gydl|GUI wrapper around the already existing youtube-dl program to download content from sites like YouTube.|https://github.com/JannikHv/gydl|{{AUR|gydl-git}}}}\n* {{App|Gyre|GTK3 downloader for videos from Coub.|https://github.com/HelpSeeker/Gyre|{{AUR|gyre}}}}\n* {{App|[[JDownloader]]|Java-based downloader for one-click hosting sites.|https://jdownloader.org/|{{AUR|jdownloader2}}}}\n* {{App|[[Wikipedia:KGet|KGet]]|Download manager for KDE. Supports HTTP, FTP, BitTorrent and Metalink. Part of {{Grp|kde-network}}.|https://apps.kde.org/kget/|{{Pkg|kget}}}}\n* {{App|MegaBasterd|Yet another unofficial MEGA downloader/uploader/streaming suite.|https://github.com/tonikelope/megabasterd|{{AUR|megabasterd-bin}}}}\n* {{App|Motrix|Full-featured download manager that supports downloading HTTP, FTP, BitTorrent, Magnet, etc. Based on the [https://electronjs.org/ Electron] platform.|https://motrix.app/|{{AUR|motrix}}}}\n* {{App|Persepolis|Graphical front-end for aria2 download manager with lots of features. Supports HTTP and FTP.|https://persepolisdm.github.io/|{{Pkg|persepolis}}}}\n* {{App|[[pyLoad]]|Downloader written in Python and designed to be extremely lightweight, easily extensible and fully manageable via web.|https://pyload.net/|{{AUR|pyload-ng}}}}\n* {{App|Steadyflow|Simple download manager for GNOME. Supports HTTP and FTP.|https://launchpad.net/steadyflow|{{Pkg|steadyflow}}}}\n* {{App|Streamtuner2|Internet radio station and video browser. It simply lists stations in categories from different directories and launches your preferred media apps for playback.|https://sourceforge.net/projects/streamtuner2/|{{AUR|streamtuner2}}}}\n* {{App|uGet|GTK download manager featuring download classification and HTML import. Supports HTTP, FTP, BitTorrent, Metalink, YouTube and Mega.|https://ugetdm.com/|{{Pkg|uget}}}}\n* {{App|Video Downloader|GTK application to download videos from websites like YouTube and many others (based on youtube-dl).|https://github.com/Unrud/video-downloader|{{AUR|video-downloader}}}}\n* {{App|Xtreme Download Manager|Powerful tool to increase download speed up-to 500%. Supports HTTP and FTP. Video grabber works in a general way and is not limited to certain websites.|https://subhra74.github.io/xdm/|{{AUR|xdman}}}}\n* {{App|youtubedl-gui|Simple-to-use graphical interface for youtube-dl.|https://github.com/JaGoLi/ytdl-gui|{{AUR|youtubedl-gui}}}}\n\n=== LAN file transfer ===\n\nSee also [[#LAN messengers]].\n\n* {{App|LAN Share|Cross platform local area network file transfer application, built using Qt GUI framework. It can be used to transfer a whole folder, one or more files, large or small immediately without any additional configuration.|https://github.com/abdularis/LAN-Share|{{AUR|lanshare}}}}\n* {{App|NitroShare|Cross-platform network file transfer application, built using Qt GUI framework. It is designed to make transferring files from one device to another on the local network extremely simple.|https://nitroshare.net/|{{Pkg|nitroshare}}}}\n* {{App|Teleport|Native GTK3 application to effortlessly share files on the local network.|https://gitlab.gnome.org/jsparber/teleport|{{AUR|teleport-share-git}}}}\n* {{App|Warpinator|GTK application to share files across the LAN.|https://github.com/linuxmint/warpinator|{{Pkg|warpinator}}}}\n\n=== Cloud storage servers ===\n\n* {{App|[[Cozy]]|A personal cloud you can hack, host and delete.|https://cozy.io/|{{Pkg|cozy-stack}}}}\n* {{App|[[Nextcloud]]|A cloud server to store your files centrally on a hardware controlled by you.|https://nextcloud.com|{{Pkg|nextcloud}}}}\n* {{App|[[Pydio]]|Mature open source web application for file sharing and synchronization.|https://pydio.com/|{{AUR|pydio}}}}\n* {{App|Seafile|An online file storage and collaboration tool with advanced support for file syncing, privacy protection and teamwork.|https://www.seafile.com/|{{AUR|seafile-server}}}}\n\n=== Cloud synchronization clients ===\n\n{{Tip|<nowiki></nowiki>\n* Some [[synchronization and backup programs]] provide direct support for some cloud-storage services.\n* Some [[FUSE#List of FUSE filesystems|FUSE filesystems]] provide a way to mount cloud-storage as a filesystem. Google Drive can be accessed also by {{Pkg|gvfs-google}} for GVFS-based applications (like [[Nautilus]]), and by {{Pkg|kio-gdrive}} for KIO-based applications (like [[Dolphin]]).\n* See [[Data-at-rest encryption#Cloud-storage optimized]] to achieve zero-knowledge (client-side transparent encryption) storage on any third-party cloud service.\n}}\n\n==== Multi-protocol clients ====\n\n* {{App|CloudCross|Synchronize local files and folders with many cloud providers. Mail.ru Cloud, Yandex Disk, Google Drive, OneDrive and Dropbox support is available.|https://cloudcross.mastersoft24.ru/{{Dead link|2022|09|20|status=SSL error}}|{{AUR|cloudcross}}}}\n* {{App|Rclone|Multi-provider sync, copy, and mount client.|https://rclone.org/|{{Pkg|rclone}}}}\n* {{App|Rclone Browser|GUI client for Rclone.|https://github.com/kapitainsky/RcloneBrowser|{{AUR|rclone-browser}}}}\n\n==== Google Drive clients ====\n\n* {{App|drive|Tiny program to pull or push Google Drive files.|https://github.com/odeke-em/drive|{{AUR|drive}}}}\n* {{App|DriveSync|Command line utility that synchronizes your Google Drive files with a local folder on your machine.|https://github.com/MStadlmeier/drivesync|{{AUR|drivesync}}}}\n* {{App|gdrive|Command line utility for interacting with Google Drive.|https://github.com/prasmussen/gdrive|{{AUR|gdrive}}}}\n* {{App|Grive|Google Drive client with support for new Drive REST API and partial sync.|https://github.com/vitalif/grive2|{{AUR|grive}}}}\n* {{App|[[Insync]]|Unofficial proprietary Google Drive desktop client.|https://www.insynchq.com/|{{AUR|insync}}}}\n* {{App|VGrive|GTK-based GUI client (back-end and front-end) for Google Drive made in Vala.|https://github.com/bcedu/VGrive|{{AUR|vgrive}}}}\n\n==== Other synchronization clients ====\n\n* {{App|aws-cli|CLI for Amazon Web Services, including efficient file transfers to and from Amazon S3.|https://aws.amazon.com/cli/|{{Pkg|aws-cli}}}}\n* {{App|Backblaze B2|Backblaze B2 open-source command-line client.|https://www.backblaze.com/b2/cloud-storage.html|{{AUR|backblaze-b2}}}}\n* {{App|Baidu Netdisk|Proprietary client for cloud storage service launched by Baidu (formerly Baidu Cloud).|https://pan.baidu.com|{{AUR|baidunetdisk-bin}}}}\n* {{App|[[Cozy]] Drive|Desktop client for Cozy.|https://cozy-labs.github.io/cozy-desktop/|{{Pkg|cozy-desktop}}}}\n* {{App|[[Dropbox]]|Proprietary desktop client for Dropbox.|https://www.dropbox.com/|{{AUR|dropbox}}}}\n* {{App|[[Wikipedia:Mega (service)|Mega]] Sync Client|Proprietary desktop client to sync files with Mega.|https://mega.nz/|{{AUR|megasync}}}}\n* {{App|Megatools|Unofficial CLI for Mega.|https://megatools.megous.com/|{{Pkg|megatools}}}}\n* {{App|[[Nextcloud]] Client|Desktop client for Nextcloud.|https://nextcloud.com/|{{Pkg|nextcloud-client}}}}\n* {{App|Nutstore|Proprietary desktop client for Nutstore.|https://www.jianguoyun.com/|{{AUR|nutstore}}}}\n* {{App|OneDrive|Unofficial CLI for [https://onedrive.live.com/about/ OneDrive].|https://github.com/skilion/onedrive|{{AUR|onedrive}}}}\n* {{App|OneDrive|Fork of the unofficial CLI for [https://onedrive.live.com/about/ OneDrive].|https://github.com/abraunegg/onedrive|{{AUR|onedrive-abraunegg}}}}\n* {{App|[[Wikipedia:ownCloud|ownCloud]] Desktop Client|Desktop syncing client for ownCloud.|https://owncloud.com/client/|{{Pkg|owncloud-client}}}}\n* {{App|pCloud Drive|Proprietary desktop syncing client for pCloud. Based on the [https://electronjs.org/ Electron] platform.|https://www.pcloud.com/download-free-online-cloud-file-storage.html|{{AUR|pcloud-drive}}}}\n* {{App|[[Pydio]]Sync|Desktop client for Pydio.|https://pydio.com/|{{AUR|pydio-sync}}}}\n* {{App|S3cmd|Unofficial CLI for Amazon S3.|https://s3tools.org/s3cmd|{{Pkg|s3cmd}}}}\n* {{App|[[Seafile]] Client|GUI client for Seafile.|https://www.seafile.com/|{{AUR|seafile-client}}}}\n* {{App|Versiobit|Desktop file sync client with versioning and end-to-end encryption.|https://versiobit.com|{{AUR|versiobit}}}}\n* {{App|[[Wikipedia:SpiderOak|SpiderOak]] One|Proprietary client for SpiderOak One.|https://spideroak.com/|{{AUR|spideroak-one}}}}\n* {{App|[[Wikipedia:Synology|Synology]] Drive|Proprietary GUI client to sync and share files between a centralized Synology NAS and multiple client computers.|https://www.synology.com/|{{AUR|synology-drive}}}}\n* {{App|[[Wikipedia:Tresorit|Tresorit]]|Proprietary desktop syncing client for Tresorit.|https://tresorit.com/download|{{AUR|tresorit}}}}\n* {{App|[[Yandex Disk]]|Proprietary CLI for Yandex Disk.|https://disk.yandex.ru/|{{AUR|yandex-disk}}}}\n\n=== FTP ===\n\n==== FTP clients ====\n\nSee also [[Wikipedia:Comparison of FTP client software]].\n\n* {{App|[[CurlFtpFS]]|is a filesystem for accessing FTP hosts based on FUSE and libcurl.|https://curlftpfs.sourceforge.net/|{{Pkg|curlftpfs}}}}\n* {{App|[[Wikipedia:FileZilla|FileZilla]]|Fast and reliable FTP, FTPS and SFTP client.|https://filezilla-project.org/|{{Pkg|filezilla}}}}\n* {{App|ftp|Simple ftp client provided by GNU Inetutils|https://www.gnu.org/software/inetutils/manual/inetutils.html#ftp-invocation|{{Pkg|inetutils}}}}\n* {{App|lftp|Sophisticated command line based FTP client|https://lftp.yar.ru/|{{Pkg|lftp}}}}\n* {{App|ncftp|A set of free application programs implementing FTP.|https://www.ncftp.com/|{{Pkg|ncftp}}}}\n* {{App|[[Wikipedia:tnftp|tnftp]]|FTP client with several advanced features for [[Wikipedia:NetBSD|NetBSD]].|https://freshmeat.sourceforge.net/projects/tnftp|{{Pkg|tnftp}}}}\n\nSome file managers like [[Dolphin]], [[GNOME Files]] and [[Thunar]] also provide FTP functionality.\n\n==== FTP servers ====\n\nSee also [[Wikipedia:List of FTP server software]].\n\n* {{App|bftpd|Small, easy-to-configure FTP server|https://bftpd.sourceforge.net/|{{Pkg|bftpd}}}}\n* {{App|ftpd|Simple ftp server provided by GNU Inetutils|https://www.gnu.org/software/inetutils/manual/inetutils.html#ftpd-invocation|{{Pkg|inetutils}}}}\n* {{App|[[ProFTPD|proFTPd]]|A secure and configurable FTP server|http://www.proftpd.org/|{{AUR|proftpd}}}}\n* {{App|[[Pure-FTPd]]|Free (BSD-licensed), secure, production-quality and standard-compliant FTP server.|https://www.pureftpd.org/project/pure-ftpd/|{{AUR|pure-ftpd}}}}\n* {{App|[[SSH]]|SFTP is a network protocol that provides file access, file transfer, and file management over any reliable data stream.|https://www.openssh.com|{{Pkg|openssh}}}}\n* {{App|[[vsftpd]]|Lightweight, stable and secure FTP server for UNIX-like systems.|https://security.appspot.com/vsftpd.html|{{Pkg|vsftpd}}}}\n\n=== BitTorrent clients ===\n\nSome [[#Download managers|download managers]] are also able to connect to the BitTorrent network: [[Aria2]], [[Wikipedia:Lftp|LFTP]], FatRat, [[Wikipedia:KGet|KGet]], [[Wikipedia:MLDonkey|MLDonkey]], uGet.\n\nSee also [[Wikipedia:Comparison of BitTorrent clients]].\n\n==== Console ====\n\n* {{App|Ctorrent|CTorrent is a BitTorrent client implemented in C++ to be lightweight and quick.|http://www.rahul.net/dholmes/ctorrent/|{{AUR|enhanced-ctorrent}}}}\n* {{App|[[Deluge]]|BitTorrent client with multiple user interfaces in a client/server model. This package includes a console client.|https://deluge-torrent.org/|{{Pkg|deluge}}}}\n* {{App|peerflix|Streaming torrent client for node.js.|https://github.com/mafintosh/peerflix|{{AUR|peerflix}}}}\n* {{App|[[rTorrent]]|Simple and lightweight ncurses BitTorrent client.|https://rakshasa.github.io/rtorrent/|{{Pkg|rtorrent}}}}\n* {{App|[[Transmission]] CLI|Simple and easy-to-use BitTorrent client with a daemon version and multiple front-ends. This package includes backend, daemon, command-line interface, and a Web UI interface.|https://transmissionbt.com/|{{Pkg|transmission-cli}}}}\n\n==== Graphical ====\n\n* {{App|[[Deluge]] (GTK interface)|User-friendly BitTorrent client written in Python using GTK.|https://deluge-torrent.org/|{{Pkg|deluge-gtk}}}}\n* {{App|Fragments|Easy to use BitTorrent client for the GNOME desktop environment.|https://gitlab.gnome.org/World/Fragments|{{Pkg|fragments}}}}\n* {{App|[[Wikipedia:FrostWire|FrostWire]]|Easy to use cloud downloader, BitTorrent client and media player.|https://www.frostwire.com/|{{AUR|frostwire}}}}\n* {{App|[[Ktorrent]]|Feature-rich BitTorrent client for KDE.|https://apps.kde.org/ktorrent/|{{Pkg|ktorrent}}}}\n* {{App|Powder Player|Hybrid between a streaming BitTorrent client and a player. Based on the [https://electronjs.org/ Electron] platform.|https://powder.media/|{{AUR|powder-player-bin}}}}\n* {{App|[[qBittorrent]]|Open source (GPLv2) BitTorrent client with an integrated torrent search engine that strongly resembles \u00b5Torrent.|https://www.qbittorrent.org/|{{Pkg|qbittorrent}}}}\n* {{App|[[Wikipedia:Tixati|Tixati]]|Proprietary peer-to-peer file sharing program that uses the popular BitTorrent protocol.|https://tixati.com/|{{AUR|tixati}}}}\n* {{App|Torrential|Simple torrent client for elementary OS.|https://github.com/davidmhewitt/torrential|{{Pkg|torrential}}}}\n* {{App|[[Transmission]]|Simple and easy-to-use BitTorrent client with a daemon version and multiple front-ends.|https://transmissionbt.com/|GTK: {{Pkg|transmission-gtk}}, Qt: {{Pkg|transmission-qt}}}}\n* {{App|[[Transmission]] Remote|GTK client for remote management of the Transmission BitTorrent client, using its HTTP RPC protocol.|https://github.com/transmission-remote-gtk/transmission-remote-gtk|{{Pkg|transmission-remote-gtk}}}}\n* {{App|Tremotesf|Qt client for remote management of the Transmission BitTorrent client, using its HTTP RPC protocol.|https://github.com/equeim/tremotesf2|{{AUR|tremotesf}}}}\n* {{App|[[Wikipedia:Tribler|Tribler]]|4th generation file sharing system BitTorrent client.|https://www.tribler.org|{{AUR|tribler}}}}\n* {{App|[[Wikipedia:Vuze|Vuze]]|Feature-rich BitTorrent client written in Java (formerly Azureus).|https://www.vuze.com/|{{AUR|vuze}}}}\n* {{App|WebTorrent Desktop|Streaming BitTorrent application. Based on the [https://electronjs.org/ Electron] platform.|https://webtorrent.io/desktop/|{{AUR|webtorrent-desktop}}}}\n\n=== Other P2P networks ===\n\nSee also [[Wikipedia:Comparison of file-sharing applications]].\n\n* {{App|[[aMule]]|Well-known eDonkey/Kad client with a daemon version and GTK, web, and CLI front-ends.|https://www.amule.org/|{{Pkg|amule}}}}\n* {{App|EiskaltDC++|Direct Connect and ADC client.|https://github.com/eiskaltdcpp/eiskaltdcpp|GTK: {{AUR|eiskaltdcpp-gtk}}, Qt: {{AUR|eiskaltdcpp-qt}}}}\n* {{App|[[Wikipedia:gtk-gnutella|gtk-gnutella]]|GTK server/client for the Gnutella peer-to-peer network.|http://gtk-gnutella.sourceforge.net/|{{AUR|gtk-gnutella}}}}\n* {{App|KaMule|KDE graphical front-end for aMule.|https://github.com/nihui/kamule/|{{AUR|kamule}}}}\n* {{App|LBRY|Browser and wallet for LBRY, the decentralized, user-controlled content marketplace. Based on the [https://electronjs.org/ Electron] platform.|https://lbry.io/|{{AUR|lbry-desktop}}}}\n* {{App|lbt|Small set of command-line tools for LBRY.|https://gitlab.com/gardenappl/lbt|{{AUR|lbt}}}}\n* {{App|[[Wikipedia:MLDonkey|MLDonkey]]|Multi-protocol P2P client that supports HTTP, FTP, BitTorrent, Direct Connect, eDonkey and FastTrack.|https://mldonkey.sourceforge.net/|{{AUR|mldonkey}}}}\n* {{App|ncdc|Modern and lightweight Direct Connect and ADC client with a friendly ncurses interface.|https://dev.yorhel.nl/ncdc|{{AUR|ncdc}}}}\n* {{App|Nicotine+|A graphical client for the Soulseek P2P network.|https://github.com/Nicotine-Plus/nicotine-plus|{{Pkg|nicotine+}}}}\n* {{App|Send Anywhere|Proprietary file sharing service where users can directly share digital content in real time. Based on the [https://electronjs.org/ Electron] platform.|https://send-anywhere.com/|{{AUR|sendanywhere}}}}\n* {{App|[[IPFS]]|IPFS is a P2P Network capable of sharing and receiving files.|https://ipfs.io/|{{Pkg|kubo}}}}\n\n=== Pastebin services ===\n\nSee also [[Wikipedia:Pastebin]].\n\nPastebin services are often used to quote text or images while collaborating and troubleshooting. Pastebin clients provide a convenient way to post from the command line.\n{{Note|An acceptable pastebin service does not require enabling JavaScript for viewing, does not display adverts, manipulate the pasted content or require a login.\n\n[https://pastebin.com/ pastebin.com] is blocked for some people because of malware found on the site and has a history of annoying issues (requires JavaScript, displays adverts, inserts CRLF line-endings and displaying CAPTCHAs at random). Do '''not''' use it.}}\n\n==== Without a dedicated client ====\n\nSome services can be used with more general command line tool, such as [[cURL]]. For extensions, such as line numbers, one can use more command line tools. Such as {{ic|cat -n}}.\n\n* [https://0x0.st/ 0x0.st] is a file hosting service. Usage examples are:\n:{{bc|''command'' <nowiki>| curl -F 'file=@-' 0x0.st </nowiki>}} or upload a file: {{bc|<nowiki>curl -F 'file=@-' 0x0.st < </nowiki>''file''}} \n:{{Note|Read the instructions on the website for further options such as file removal tokens, expiration, and private URLs.}}\n* [http://ix.io/ ix.io] Usage examples are:\n:{{bc|''command'' <nowiki>| curl -F 'f:1=<-' ix.io </nowiki>}} or upload a file: {{bc|<nowiki>curl -F 'f:1=<-' ix.io < </nowiki>''file''}}\n*[https://termbin.com termbin.com] works with [[nc]].\n\n==== Dedicated clients ====\n\n* {{App|Fb-client|Client for the [https://paste.xinu.at/ paste.xinu.at] pastebin.|https://paste.xinu.at|{{Pkg|fb-client}}}}\n* {{App|Gist|Command-line interface for the [https://gist.github.com/ gist.github.com] pastebin service.|https://github.com/defunkt/gist|{{Pkg|gist}}}}\n* {{App|imgur|A CLI client which can upload image to [https://imgur.com imgur.com] image sharing service.|https://github.com/tremby/imgur.sh|{{AUR|imgur.sh}}}}\n* {{App|ix|Client for the ix.io pastebin.|http://ix.io/client{{Dead link|2024|01|13|status=404}}|{{AUR|ix}}}}\n* {{App|Pastebinit|Really small Python script that acts as a Pastebin client (see {{ic|pastebinit -l}} for the list of servers).|https://launchpad.net/pastebinit|{{Pkg|pastebinit}}}}\n* {{App|ruby-haste|Client for [https://hastebin.com/ hastebin.com].|https://github.com/seejohnrun/haste-client|{{AUR|ruby-haste}}}}\n* {{App|Wgetpaste|Bash script that automates pasting to a number of pastebin services.|http://wgetpaste.zlin.dk/|{{Pkg|wgetpaste}}}}\n\n== Communication ==\n\n=== Email clients ===\n\nSee also [[Wikipedia:Comparison of email clients]]\n\n==== Console ====\n\n* {{App|[[aerc]]|Work in progress asynchronous email client.|https://sr.ht/~rjarry/aerc|{{Pkg|aerc}}}}\n* {{App|alot|An experimental terminal MUA based on [https://notmuchmail.org/ notmuch mail]. It is written in python using the [https://urwid.org/ urwid] toolkit.|https://github.com/pazz/alot|{{Pkg|alot}}}}\n* {{App|[[Alpine]]|Fast, easy-to-use and Apache-licensed email client based on [[Wikipedia:Pine (email client)|Pine]].|https://alpineapp.email/|{{AUR|alpine-git}}}}\n* {{App|[[S-nail]]|a mail processing system with a command syntax reminiscent of ''ed'' with lines replaced by messages. Provides the functionality of [[Wikipedia:mailx|mailx]].|https://www.sdaoden.eu/code.html#s-mailx|{{Pkg|s-nail}}}}\n* {{App|mu/mu4e|Email indexer (mu) and client for emacs (mu4e). Xapian based for fast searches.|https://www.djcbsoftware.nl/code/mu/mu4e.html|{{AUR|mu}}}}\n* {{App|[[Mutt]]|Small but very powerful text-based mail client.|http://www.mutt.org/|{{Pkg|mutt}}}}\n* {{App|[[Mutt#NeoMutt|NeoMutt]]|Command line mail reader (or MUA). It is a fork of Mutt with added features.|https://neomutt.org/|{{Pkg|neomutt}}}}\n* {{App|[[nmh]]|A modular mail handling system.|https://www.nongnu.org/nmh/|{{AUR|nmh}}}}\n* {{App|[[notmuch]]|A fast mail indexer built on top of ''xapian''.|https://notmuchmail.org/|{{Pkg|notmuch}}}}\n* {{App|sendemail|A lightweight command line SMTP email client written in Perl.|http://caspian.dotconf.net/menu/Software/SendEmail/|{{AUR|sendemail}}}}\n* {{App|[[Sup]]|CLI mail client with very fast searching, tagging, threading and GMail like operation.|https://sup-heliotrope.github.io/|{{AUR|sup}}}}\n* {{App|swaks|Swiss Army Knife SMTP; Command line SMTP testing, including TLS and AUTH, can be used to send emails.|https://jetmore.org/john/code/swaks/|{{Pkg|swaks}}}}\n* {{App|Wanderlust|Email client and news reader for Emacs.|https://github.com/wanderlust/wanderlust/|{{Pkg|wanderlust}}}}\n\n==== Graphical ====\n\n* {{App|Balsa|Simple and light email client for GNOME.|https://pawsa.fedorapeople.org/balsa/|{{Pkg|balsa}}}}\n* {{App|Betterbird|Fork of thunderbird.|https://www.betterbird.eu/|{{AUR|betterbird-bin}}}}\n* {{App|[[Wikipedia:Claws Mail|Claws Mail]]|Lightweight GTK-based email client and news reader.|https://www.claws-mail.org/|{{Pkg|claws-mail}}}}\n* {{App|ElectronMail|Unofficial desktop application for several end-to-end encrypted email providers (like ProtonMail, Tutanota). Based on the [https://electronjs.org/ Electron] platform.|https://github.com/vladimiry/ElectronMail|{{AUR|electronmail-bin}}}}\n* {{App|[[Evolution]]|Mature and feature-rich e-mail client that is part of the GNOME project. Part of {{Grp|gnome-extra}}.|https://wiki.gnome.org/Apps/Evolution|{{Pkg|evolution}}}}\n* {{App|Geary|Simple desktop mail client built in [[Wikipedia:Vala (programming language)|Vala]]. Part of {{Grp|gnome-extra}}.|https://wiki.gnome.org/Apps/Geary|{{Pkg|geary}}}}\n* {{App|[[Wikipedia:Kmail|Kmail]]|Mature and feature-rich email client. Part of {{Grp|kde-pim}}.|https://kontact.kde.org/components/kmail/|{{Pkg|kmail}}}}\n* {{App|Kube|Modern communication and collaboration client built with QtQuick.|https://kube-project.com/|{{AUR|kube}}}}\n* {{App|Mailspring|Fork of [[Wikipedia:Nylas Mail|Nylas Mail]] by one of the original authors. The paid \"Pro\" version requires a Mailspring ID and has extra features like snooze, send later. Based on the [https://electronjs.org/ Electron] platform.|https://getmailspring.com/|{{AUR|mailspring}}}}\n* {{App|[[Wikipedia:SeaMonkey#Mail|SeaMonkey Mail & Newsgroups]]|Email client included in the SeaMonkey suite.|https://www.seamonkey-project.org/|{{AUR|seamonkey}}}}\n* {{App|[[Wikipedia:Sylpheed|Sylpheed]]|Lightweight and user-friendly GTK email client.|https://sylpheed.sraoss.jp/en/|{{AUR|sylpheed}}}}\n* {{App|[[Thunderbird]]|Feature-rich email client from Mozilla written in GTK.|https://www.thunderbird.net/|{{Pkg|thunderbird}}}}\n* {{App|Trojit\u00e1|2=Qt IMAP email client. Only supports [https://bugs.kde.org/show_bug.cgi?id=321374 one IMAP account].|3=http://trojita.flaska.net/|4={{AUR|trojita}}}}\n* {{App|Tutanota|Email client for Tutanota mail service. Based on the [https://electronjs.org/ Electron] platform.|https://tutanota.com/|{{AUR|tutanota-desktop}}}}\n* {{App|Viagee|It allows desktop mail actions, such as 'Send File as Email' or web 'mailto' links, to be handled by the Gmail web client.|https://davesteele.github.io/viagee/|{{AUR|viagee}}}}\n\n==== Web-based ====\n\n* {{App|[[Nextcloud]] Mail|An email webapp for NextCloud.|https://github.com/nextcloud/mail|{{Pkg|nextcloud-app-mail}}}}\n* {{App|[[Roundcube]]|Browser-based multilingual IMAP client webapp with a native application-like user interface.|https://roundcube.net/|{{Pkg|roundcubemail}}}}\n* {{App|SquirrelMail|Webmail for Nuts!|https://squirrelmail.org/|{{AUR|squirrelmail}}}}\n\n=== Mail notifiers ===\n\n* {{App|Ayatana Webmail|Webmail notifications and actions for any desktop.|https://tari.in/www/software/ayatana-webmail/|{{AUR|ayatana-webmail}}}}\n* {{App|Bubblemail|New and Unread mail notification service for local mailboxes, pop, imap, and gnome online accounts. A fork of Mailnag.|http://bubblemail.free.fr/|{{AUR|bubblemail}}}}\n* {{App|Gnubiff|Mail notification program that checks for mail and displays headers when new mail has arrived.|http://gnubiff.sourceforge.net/|{{Pkg|gnubiff}}}}\n* {{App|Mailnag|Extensible mail notification daemon.|https://github.com/pulb/mailnag|{{Pkg|mailnag}}}}\n\n=== Mail servers ===\n\nSee [[Mail server]].\n\n* {{App|DavMail|POP/IMAP/SMTP/Caldav/Carddav/LDAP exchange gateway allowing users to use any mail/calendar client with an Exchange server.|https://davmail.sourceforge.net/|{{AUR|davmail}}}}\n* {{App|Modoboa|A modular mail hosting and management platform, written in Python.|https://modoboa.org/|{{AUR|modoboa}}}}\n\n=== Mail retrieval agents ===\n\nSee also [[Wikipedia:Mail retrieval agent]].\n\n* {{App|[[fdm]]|Program to fetch and deliver mail.|https://github.com/nicm/fdm|{{Pkg|fdm}}}}\n* {{App|[[Wikipedia:Fetchmail|Fetchmail]]|A remote-mail retrieval utility.|https://www.fetchmail.info/|{{Pkg|fetchmail}}}}\n* {{App|[[getmail]]|A POP3/IMAP4 mail retriever with reliable Maildir and command delivery.|http://pyropus.ca/software/getmail/|{{AUR|getmail}}}}\n* {{App|hydroxide|A third-party, open-source ProtonMail CardDAV, IMAP and SMTP bridge|https://github.com/emersion/hydroxide|{{AUR|hydroxide}}}}\n* {{App|imapsync|IMAP synchronisation, sync, copy or migration tool|https://imapsync.lamiral.info/|{{Pkg|imapsync}}}}\n* {{App|[[isync]]|IMAP and MailDir mailbox synchronizer|http://isync.sourceforge.net/|{{Pkg|isync}}}}\n* {{App|mpop|A small, fast POP3 client suitable as a fetchmail replacement|https://marlam.de/mpop/|{{Pkg|mpop}}}}\n* {{app|vomit|Rust utility to sync between Maildir mailbox and IMAP mailbox|https://git.sr.ht/~bitfehler/vomit-sync/tree/master/item/cli/README.md|{{aur|vsync}} (sync-only part of {{aur|vomit}} mail tookit)}}\n* {{App|[[OfflineIMAP]]|Synchronizes emails between two repositories.|https://www.offlineimap.org/|{{Pkg|offlineimap}}}}\n\n=== Instant messaging clients ===\n\nSee also [[Wikipedia:Comparison of instant messaging clients]] and [[Wikipedia:Comparison of VoIP software]].\n\nThis section lists all client software with [[Wikipedia:Instant messaging|instant messaging]] support.\n\n==== Multi-protocol clients ====\n\n{{Note|All messengers that support several networks by means of direct connections to them belong to this section.}}\n\nThe number of networks supported by these clients is very large but they (like any multi-protocol clients) usually have very limited or no support for network-specific features.\n\n===== Console =====\n\n* {{App|BarnOwl|Ncurses-based chat client with support for the Zephyr, XMPP and IRC protocols.|https://barnowl.mit.edu/|{{AUR|barnowl}}}}\n* {{App|[[Bitlbee|BitlBee]]|IRC gateway to popular chat networks (XMPP and ICQ).|https://bitlbee.org/|{{AUR|bitlbee}}}}\n* {{App|EKG2|Ncurses based XMPP, Gadu-Gadu, ICQ and IRC client.|https://github.com/ekg2/ekg2|{{AUR|ekg2}}}}\n* {{App|Finch|Ncurses-based chat client that uses libpurple and supports all its protocols (Bonjour, Gadu-Gadu, Groupwise, ICQ, IRC, SIMPLE, XMPP, Zephyr).|https://developer.pidgin.im/wiki/Using%20Finch|{{Pkg|finch}}}}\n* {{App|[[WeeChat]]|Modular, lightweight ncurses-based IRC client. A variety of other protocols are supported through plugins.|https://weechat.org/|{{Pkg|weechat}}}}\n\n===== Graphical =====\n\n* {{App|[[Wikipedia:Jitsi|Jitsi]]|Audio/video VoIP phone and instant messenger written in Java that supports protocols such as SIP, XMPP, ICQ, IRC and many other useful features.|https://jitsi.org/|{{AUR|jitsi}}}}\n* {{App|Lith|WeeChat Relay client, allowing to connect to a running WeeChat instance from anywhere.|https://lith.app/|{{AUR|lith-git}}}}\n* {{App|[[Pidgin]]|Multi-protocol instant messaging client with audio support that uses libpurple and supports all its protocols (Bonjour, Gadu-Gadu, Groupwise, ICQ, IRC, SIMPLE, XMPP, Zephyr).|https://pidgin.im/|{{Pkg|pidgin}}}}\n* {{App|[[Wikipedia:Smuxi|Smuxi]]|Cross-platform IRC client that also supports XMPP.|https://smuxi.im/|{{AUR|smuxi}}}}\n* {{App|[[Thunderbird]]|Feature-rich email client supports instant messaging and chat using IRC and XMPP.|https://www.thunderbird.net/|{{Pkg|thunderbird}}}}\n* {{App|Volt|Proprietary native desktop client for Skype, Telegram, Slack, XMPP, Discord, IRC and more.|https://volt-app.com/|{{AUR|volt}}}}\n\n==== IRC clients ====\n\nSee also [[Wikipedia:Comparison of Internet Relay Chat clients]].\n\n===== Console =====\n\n* {{App|[[Wikipedia:BitchX|BitchX]]|Console-based IRC client developed from the popular [[Wikipedia:ircII|ircII]].|https://bitchx.sourceforge.net/|{{AUR|bitchx-git}}}}\n* {{App|catgirl|TLS-only terminal IRC client.|https://git.causal.agency/catgirl|{{AUR|catgirl}}}}\n* {{App|ERC|Powerful, modular and extensible IRC client for [[Emacs]].|https://savannah.gnu.org/projects/erc/|included with {{Pkg|emacs}}}}\n* {{App|[[ii]]|Featherweight IRC client, literally {{ic|tail -f}} the conversation and {{ic|echo}} back your replies to a file.|https://tools.suckless.org/ii/|{{AUR|ii}}}}\n* {{App|ircii|Oldest maintained IRC client which lays claim to being small and fast owing to its reduced feature set.|http://www.eterna23.net/ircii/|{{AUR|ircii}}}}\n* {{App|[[Irssi]]|Highly-configurable ncurses-based IRC client.|https://irssi.org/|{{Pkg|irssi}}}}\n* {{App|pork|Programmable, ncurses-based IRC client that mostly looks and feels like ircII.|http://dev.ojnk.net/|{{Pkg|pork}}}}\n* {{App|ScrollZ|Advanced IRC client based on [[Wikipedia:ircII|ircII]].|https://www.scrollz.info/|{{AUR|scrollz}}}}\n* {{App|senpai|An IRC client that works best with bouncers (e.g. {{AUR|soju-git}}): no logs are kept, history is fetched from the server via [https://ircv3.net/specs/extensions/chathistory CHATHISTORY], networks are fetched from the server via [https://git.sr.ht/~emersion/soju/tree/master/item/doc/ext/bouncer-networks.md bouncer-networks].\n|https://sr.ht/~taiite/senpai/|{{Pkg|senpai}}}}\n* {{App|sic|Extremely simple IRC client, similar to [[Wikipedia:Ii (IRC client)|ii]].|https://tools.suckless.org/sic/|{{AUR|sic}}}}\n* {{App|tiny|an IRC client written in Rust with a clutter-free interface|https://github.com/osa1/tiny|{{AUR|tiny}}}}\n\n===== Graphical =====\n\n* {{App|[[Wikipedia:ChatZilla|ChatZilla]]|Clean, easy to use and highly extensible Internet Relay Chat (IRC) client, built on the Mozilla platform using [[Wikipedia:XULRunner|XULRunner]]. Included in the [[Wikipedia:SeaMonkey|SeaMonkey]] suite.|http://chatzilla.hacksrus.com/|{{AUR|seamonkey}}}}\n* {{App|Halloy|An open-source IRC client written in Rust, with the iced GUI library.|https://halloy.squidowl.org/|{{AUR|halloy}}}}\n* {{App|[[HexChat]]|Fork of XChat for Linux and Windows.|https://hexchat.github.io/|{{Pkg|hexchat}}}}\n* {{App|[[Wikipedia:Konversation|Konversation]]|Qt-based IRC client for the KDE desktop.|https://konversation.kde.org/|{{Pkg|konversation}}}}\n* {{App|[[Wikipedia:KVIrc|KVIrc]]|Qt-based IRC client featuring extensive themes support.|http://kvirc.net/|{{Pkg|kvirc}}}}\n* {{App|Loqui|GTK IRC client.|https://loqui.sunnyone.org/|{{AUR|loqui}}}}\n* {{App|LostIRC|Simple GTK IRC client with tab-autocompletion, multiple server support, logging and others.|http://lostirc.sourceforge.net|{{AUR|lostirc}}}}\n* {{App|Polari|Simple IRC client by the GNOME project. Part of {{Grp|gnome-extra}}.|https://wiki.gnome.org/Apps/Polari|{{Pkg|polari}}}}\n* {{App|[[Quassel]]|Modern, cross-platform, distributed IRC client.|https://quassel-irc.org/|KDE: {{Pkg|quassel-monolithic}}, Qt: {{Pkg|quassel-monolithic-qt}}}}\n* {{App|Srain|Modern, beautiful IRC client written in GTK 3.|https://srain.silverrainz.me|{{AUR|srain}}}}\n\n==== XMPP clients ====\n\nSee also [[Wikipedia:XMPP]] and [[Wikipedia:Comparison of XMPP clients]].\n\n===== Console =====\n\n* {{App|Freetalk|Console-based XMPP client.|https://www.gnu.org/software/freetalk/|{{AUR|freetalk}}}}\n* {{App|jabber.el|Minimal XMPP client for [[Emacs]].|http://emacs-jabber.sourceforge.net/|{{AUR|emacs-jabber}}}}\n* {{App|[[Wikipedia:MCabber|MCabber]]|Small XMPP console client, includes features: SSL, PGP, MUC, OTR and UTF8.|https://mcabber.com/|{{Pkg|mcabber}}}}\n* {{App|Poezio|XMPP client with IRC feeling|https://poez.io/|{{AUR|poezio}}}}\n* {{App|Profanity|A console based XMPP client inspired by Irssi.|https://profanity-im.github.io/|{{Pkg|profanity}}}}\n\n===== Graphical =====\n\n* {{App|Converse.js|Web-based XMPP chat client written in JavaScript.|https://conversejs.org/|{{AUR|conversejs-git}}}}\n* {{App|Dino|A modern, easy to use XMPP client, with PGP and OMEMO support.|https://dino.im/|{{Pkg|dino}}}}\n* {{App|[[Gajim]]|XMPP client with audio support written in Python using GTK.|https://gajim.org/|{{Pkg|gajim}}}}\n* {{App|Kaidan|A simple, user-friendly Jabber/XMPP client providing a modern user interface using Kirigami and QtQuick.|https://www.kaidan.im/|{{Pkg|kaidan}}}}\n* {{App|[[Wikipedia:Kadu (software)|Kadu]]|Qt-based XMPP and Gadu-Gadu client.|http://www.kadu.im/|{{AUR|kadu}}}}\n* {{App|Libervia (Salut \u00e0 Toi)|Web frontend for Salut \u00e0 Toi, multi-purpose XMPP client|https://libervia.org/|{{AUR|libervia-web-hg}}}}\n* {{App|Nextcloud JavaScript XMPP Client|Chat app for Nextcloud with XMPP, end-to-end encryption, video calls, file transfer & group chat.|https://github.com/nextcloud/jsxc.nextcloud|{{AUR|nextcloud-app-jsxc}}}}\n* {{App|[[Wikipedia:Psi (instant messaging client)|Psi]]|Qt-based XMPP client.|https://psi-im.org/|{{Pkg|psi}} or {{Pkg|psi-nowebengine}}}}\n* {{App|[[Wikipedia:Spark (XMPP client)|Spark]]|Cross-platform real-time XMPP collaboration client optimized for business and organizations.|https://www.igniterealtime.org/projects/spark/|{{AUR|spark}}}}\n* {{App|Swift|XMPP client written in C++ with Qt and Swiften.|https://swift.im/|{{AUR|swift-im}}}}\n* {{App|[[Wikipedia:Tkabber|Tkabber]]|Easy to hack feature-rich XMPP client by the author of the ejabberd XMPP server.|http://tkabber.jabber.ru/|{{AUR|tkabber}}}}\n* {{App|Vacuum IM|Full-featured crossplatform XMPP client.|https://github.com/Vacuum-IM/vacuum-im|{{AUR|vacuum-im}}}}\n\n==== SIP clients ====\n\nSee also [[Wikipedia:List of SIP software#Clients]].\n\n* {{App|[[Wikipedia:Blink (SIP client)|Blink]]|State of the art, easy to use SIP client.|https://icanblink.com/|{{AUR|blink}}}}\n* {{App|baresip|portable and modular SIP User-Agent with audio and video support|https://github.com/baresip/baresip|{{Pkg|baresip}}}}\n* {{App|Jami|SIP-compatible softphone and instant messenger for the decentralized Jami network. Formerly known as Ring and SFLphone.|https://jami.net/|{{Pkg|jami-qt}}}}\n* {{App|[[Wikipedia:Linphone|Linphone]]|VoIP phone application (SIP client) for communicating freely with people over the internet, with voice, video, and text instant messaging.|https://www.linphone.org/|{{AUR|linphone-desktop}}}}\n* {{App|[[Wikipedia:Twinkle (software)|Twinkle]]|Qt softphone for VoIP and IM communication using SIP.|http://twinkle.dolezel.info/|{{AUR|twinkle}}}}\n* {{App|Zoiper|Proprietary SIP and IAX2 VoIP softphone|https://zoiper.com|{{AUR|zoiper-bin}}}}\n\n==== Matrix clients ====\n\nSee also [[Matrix]] and [https://matrix.org/clients/ Matrix Clients].\n\n* {{App|Cinny|Cinny is a matrix client focusing primarily on simple, elegant and secure interface. The desktop app is made with [https://github.com/tauri-apps/tauri Tauri].|https://github.com/cinnyapp/cinny-desktop|{{AUR|cinny-desktop}}}}\n* {{App|Element|Glossy Matrix client with an emphasis on performance and usability. Web application and desktop application based on the [https://electronjs.org/ Electron] platform.|https://element.io/|{{Pkg|element-web}}, {{Pkg|element-desktop}}}}\n* {{App|FluffyChat|Multi-platform Matrix client with a simple and clean UI written in Dart/Flutter.|https://fluffychat.im/|{{AUR|fluffychat}}}}\n* {{App|Fractal|Matrix client for GNOME written in Rust.|https://wiki.gnome.org/Apps/Fractal|{{Pkg|fractal}}}}\n* {{App|Gomuks|Terminal Matrix client written in Go using [https://github.com/tulir/mautrix-go mautrix] and [https://github.com/tulir/mauview mauview].|https://maunium.net/go/gomuks|{{Pkg|gomuks}}}}\n* {{App|Moment|A fancy, customizable, keyboard-operable Matrix chat client for encrypted and decentralized communication. Written in Qt/QML + Python with nio, fork of the now-abandoned Mirage.|{{AUR|moment}}|{{AUR|moment}}}}\n* {{App|Neochat|KDE client for the Matrix protocol.|https://apps.kde.org/neochat/|{{Pkg|neochat}}}}\n* {{App|nheko|Desktop client for the Matrix protocol.|https://github.com/Nheko-Reborn/nheko|{{Pkg|nheko}}}}\n* {{App|Quaternion|Qt5-based IM client for the Matrix protocol.|https://github.com/QMatrixClient/Quaternion|{{AUR|quaternion}}}}\n* {{App|QuickMedia|A rofi inspired native client for web services. Supports Matrix and several other sites.|https://git.dec05eba.com/QuickMedia/about/|{{AUR|quickmedia-git}}}}\n* {{App|SchildiChat|Matrix client based on Element with a more traditional instant messaging experience. Based on the [https://electronjs.org/ Electron] platform.|https://schildi.chat/|{{AUR|schildichat-desktop}}}}\n* {{App|Spectral|Qt5-based Glossy cross-platform client for Matrix.|https://gitlab.com/spectral-im/spectral|{{AUR|spectral-matrix}}}}\n* {{App|Syphon|Privacy-centric cross-platform Matrix client with E2EE support, currently in alpha.|https://github.com/syphon-org/syphon|{{AUR|syphon-bin}}}}\n\n==== Tox clients ====\n\nSee also [[Tox]] and [https://wiki.tox.chat/clients comparison clients]\n\n* {{App|qTox|Powerful Tox client written in C++/Qt that follows the Tox design guidelines.|https://qtox.github.io/|{{Pkg|qtox}}}}\n* {{App|ratox|FIFO based tox client.|https://git.z3bra.org/ratox/file/README.html|{{AUR|ratox-git}}}}\n* {{App|Toxic|ncurses-based Tox client|https://github.com/Jfreegman/toxic|{{Pkg|toxic}}}}\n* {{App|Toxygen|Tox client written in pure Python3.|https://github.com/toxygen-project/toxygen|{{AUR|toxygen-git}}}}\n* {{App|Venom|a modern Tox client for the GNU/Linux desktop|https://github.com/naxuroqa/Venom|{{AUR|venom}}}}\n* {{App|\u00b5Tox|Lightweight Tox client.|https://github.com/uTox/uTox|{{Pkg|utox}}}}\n\n==== LAN messengers ====\n\nSee also [[Avahi#Link-Local (Bonjour/Zeroconf) chat]] and [[Wikipedia:Comparison of LAN messengers]].\n\n* {{App|BeeBEEP|Secure LAN Messenger.|https://www.beebeep.net/|{{Pkg|beebeep}}}}\n* {{App|iptux|LAN communication software, compatible with IP Messenger.|https://github.com/iptux-src/iptux|{{Pkg|iptux}}}}\n\n==== P2P messaging clients ====\n\nSee also [[Ring]] and [[Tox]].\n\n* {{App|[[Wikipedia:Briar (software)|Briar]]|Briar is a messaging application designed for activists, journalists, and anyone else who needs a safe, easy and robust way to communicate.|https://briarproject.org/|{{AUR|briar-desktop}}, {{AUR|briar-headless}}}}\n* {{App|Patchwork|Decentralized messaging and sharing application built on top of Secure Scuttlebutt (SSB). Based on the [https://electronjs.org/ Electron] platform.|https://github.com/ssbc/patchwork|{{AUR|ssb-patchwork}}}}\n* {{App|RetroShare|Serverless encrypted instant messenger with filesharing, chatgroups, mail.|https://retroshare.cc/|{{AUR|retroshare}}}}\n* {{App|[[Wikipedia:Ricochet (software)|Ricochet]]|Anonymous peer-to-peer instant messaging system built on [[Tor]] hidden services.|https://www.ricochetrefresh.net/|{{AUR|ricochet-refresh}}}}\n\n==== Other IM clients ====\n\n* {{App|BlueJeans|Proprietary desktop application for BlueJeans video calls. Based on the [https://electronjs.org/ Electron] platform.|https://www.bluejeans.com/|{{AUR|bluejeans}}}}\n* {{App|Caprine|Unofficial Facebook Messenger app. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/sindresorhus/caprine|{{Pkg|caprine}}}}\n* {{App|Chatterino|Chat client for Twitch chat.|https://chatterino.com/|{{AUR|chatterino2-git}}}}\n* {{App|Delta Chat|A privacy oriented chat application built on e-mail. Based on the [https://electronjs.org/ Electron] platform.|https://delta.chat/|{{AUR|deltachat-desktop-git}}}}\n* {{App|[[Discord]]|Proprietary all-in-one voice and text chat application for gamers that\u2019s free and works on both your desktop and phone. Based on the [https://electronjs.org/ Electron] platform.|https://discordapp.com/|{{Pkg|discord}}}}\n* {{App|Flare|Unofficial Signal client based on GTK.|https://gitlab.com/schmiddi-on-mobile/flare|{{AUR|flare}}}}\n* {{App|[[Wikipedia:Gitter|Gitter]]|Communication product for communities and teams on GitLab and GitHub.|https://gitter.im/|{{AUR|gitter-bin}}}}\n* {{App|[[ICQ]]|Official ICQ client for Linux.|https://icq.com/linux/|{{AUR|icq-bin}}}}\n* {{App|IRCCloud|Desktop client for a modern, always-connected IRC client service. Based on the [https://electronjs.org/ Electron] platform.|https://www.irccloud.com/|{{AUR|irccloud}}}}\n* {{App|[[Wikipedia:Jitsi|Jitsi]] Meet|Desktop application for Jitsi Meet. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/jitsi/jitsi-meet-electron|{{AUR|jitsi-meet-desktop}}}}\n* {{App|Kotatogram Desktop|Experimental fork of Telegram Desktop.|https://kotatogram.github.io/|{{AUR|kotatogram-desktop}}}}\n* {{App|Matterhorn|Console client for the Mattermost chat system.|https://github.com/matterhorn-chat/matterhorn|{{AUR|matterhorn}}}}\n* {{App|[[Mattermost]] Desktop|Desktop application for Mattermost. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/mattermost/desktop|{{Pkg|mattermost-desktop}}}}\n* {{App|[[Wikipedia:Microsoft Teams|Microsoft Teams]]|Official proprietary client for Microsoft Teams. Based on the [https://electronjs.org/ Electron] platform.|https://teams.microsoft.com/downloads|{{AUR|teams}}}}\n* {{App|[[Mumble]]|Voice chat application similar to TeamSpeak.|https://www.mumble.info/|{{Pkg|mumble}}}}\n* {{App|Paper Plane|Chat over Telegram on a modern and elegant client.|https://github.com/paper-plane-developers/paper-plane|{{AUR|paper-plane-git}}}}\n* {{App|[[QQ]]|Proprietary instant messaging software developed by Tencent (imitating ICQ).|https://im.qq.com/|{{AUR|linuxqq}}}}\n* {{App|Rocket.Chat Desktop|Desktop application for Rocket.Chat. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/RocketChat/Rocket.Chat.Electron|{{AUR|rocketchat-desktop}}}}\n* {{App|Session Desktop|Onion routing based messenger. Based on the [https://electronjs.org/ Electron] platform.|https://getsession.org/|{{AUR|session-desktop}}}}\n* {{App|[[Wikipedia:Signal (software)|Signal]] Desktop|Desktop application for Signal private messenger. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/signalapp/Signal-Desktop|{{Pkg|signal-desktop}}}}\n* {{App|[[Wikipedia:Skype|Skype]]|Popular but proprietary application for voice and video communication. Based on the [https://electronjs.org/ Electron] platform.|https://www.skype.com/|{{AUR|skypeforlinux-bin}}}}\n* {{App|[[Wikipedia:Slack (software)|Slack]]|Proprietary Slack client for desktop. Based on the [https://electronjs.org/ Electron] platform.|https://slack.com/|{{AUR|slack-desktop}}}}\n* {{App|teams-for-linux|Unofficial Microsoft Teams for Linux client. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/IsmaelMartinez/teams-for-linux|{{AUR|teams-for-linux}}}}\n* {{App|[[TeamSpeak]]|Proprietary VoIP application with gamers as its target audience.|https://www.teamspeak.com/|{{Pkg|teamspeak3}}}}\n* {{App|[[TeamTalk]]|Proprietary VoIP application with video chat, file and desktop sharing.  Desktop sharing does not appear to be working in Linux though.  AUR package is server only, but client is built in the make process.|https://bearware.dk|{{AUR|teamtalk}}}}\n* {{App|[[Telegram]] Desktop|Official Telegram desktop client.|https://desktop.telegram.org/|{{Pkg|telegram-desktop}}}}\n* {{App|[[Wikipedia:Viber|Viber]]|Proprietary cross-platform IM and VoIP software.|https://www.viber.com/products/linux/|{{AUR|viber}}}}\n* {{App|[[Wikipedia:Wire (software)|Wire]]|Modern, private messenger. Based on the [https://electronjs.org/ Electron] platform.|https://wire.com/|{{Pkg|wire-desktop}}}}\n* {{App|YakYak|Unofficial desktop client for Google Hangouts. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/yakyak/yakyak|{{AUR|yakyak-git}}{{Broken package link|package not found}}}}\n* {{App|[[Zoom Meetings|Zoom]]|Proprietary video conferencing, online meetings and group messaging application.|https://zoom.us/|{{AUR|zoom}}}}\n* {{App|[[Wikipedia:Zulip|Zulip]]|Desktop client for Zulip group chat. Based on the [https://electronjs.org/ Electron] platform.|https://zulipchat.com/apps/linux|{{AUR|zulip-desktop}}}}\n\n=== Instant messaging servers ===\n\nSee also [[Wikipedia:Comparison of instant messaging protocols]].\n\n==== IRC servers ====\n\n* {{App|[[InspIRCd]]|A stable, modern and lightweight IRC daemon.|https://www.inspircd.org/|{{AUR|inspircd}}}}\n* {{App|IRCD-Hybrid|A lightweight, high-performance internet relay chat daemon.|https://www.ircd-hybrid.org/|{{AUR|ircd-hybrid}}}}\n* {{App|miniircd|A small and configuration free IRC server, suitable for private use.|https://github.com/jrosdahl/miniircd|{{AUR|miniircd-git}}}}\n* {{App|ngIRCd|A free, portable and lightweight Internet Relay Chat server for small or private networks.|https://ngircd.barton.de/|{{AUR|ngircd}}}}\n* {{App|Ergo|A modern and simple to set up IRC server written in Go. Combines the features of an IRCd, a services framework, and a bouncer.|https://ergo.chat/|{{AUR|ergochat}}}}\n* {{App|[[UnrealIRCd]]|Open Source IRC Server.|https://www.unrealircd.org/|{{Pkg|unrealircd}}}}\n\n==== XMPP servers ====\n\nSee also [[Wikipedia:Comparison of XMPP server software]].\n\n* {{App|[[Prosody]]|An XMPP server written in the [https://www.lua.org/ Lua] programming language. Prosody is designed to be lightweight and highly extensible. It is licensed under a permissive [https://prosody.im/source/mit MIT license].|https://prosody.im/|{{Pkg|prosody}}}}\n* {{App|Ejabberd|Robust, scalable and extensible XMPP Server written in Erlang|https://www.ejabberd.im/|{{Pkg|ejabberd}}}}\n* {{App|Jabberd2|An XMPP server written in the C language and licensed under the GNU General Public License. It was inspired by jabberd14.|https://jabberd2.org/|{{AUR|jabberd2}}}}\n* {{App|[[Openfire]]|An XMPP IM multiplatform server written in Java|https://www.igniterealtime.org/projects/openfire/|{{Pkg|openfire}}}}\n\n==== SIP servers ====\n\nSee also [[Wikipedia:List of SIP software#Servers]].\n\n* {{App|[[Asterisk]]|A complete PBX solution.|https://www.asterisk.org/|{{AUR|asterisk}}}}\n* {{App|Kamailio|Rock solid SIP server.|https://www.kamailio.org/|{{AUR|kamailio}}}}\n* {{App|openSIPS|SIP proxy/server for voice, video, IM, presence and any other SIP extensions.|https://opensips.org/|{{Pkg|opensips}}}}\n* {{App|Repro|An open-source, free SIP server.|https://www.resiprocate.org/About_Repro|{{AUR|repro}}}}\n* {{App|[[Wikipedia:Yate (telephony engine)|Yate]]|Advanced, mature, flexible telephony server that is used for VoIP and fixed networks, and for traditional mobile operators and MVNOs.|https://yate.ro/|{{Pkg|yate}}}}\n\n==== Other IM servers ====\n\n* {{App|[[Mattermost]]|Open source private cloud server, Slack-alternative.|https://github.com/mattermost/mattermost-server|{{Pkg|mattermost}}}}\n* {{App|[[Murmur]]|The voice chat application server for Mumble.|https://www.mumble.info/|{{Pkg|mumble-server}}}}\n* {{App|Nextcloud Talk|Video- and audio-conferencing app for Nextcloud.|https://github.com/nextcloud/spreed|{{Pkg|nextcloud-app-spreed}}}}\n* {{App|Rocket.Chat|Web chat server, developed in JavaScript, using the Meteor fullstack framework.|https://github.com/RocketChat/Rocket.Chat|{{AUR|rocketchat-server}}}}\n* {{App|[[Matrix|Synapse]]|Reference homeserver for the Matrix protocol.|https://github.com/matrix-org/synapse|{{Pkg|matrix-synapse}}}}\n* {{App|[[TeamSpeak]] Server|Proprietary VoIP conference server.|https://teamspeak.com/|{{Pkg|teamspeak3-server}}}}\n* {{App|uMurmur|Minimalistic Mumble server.|https://umurmur.net/|{{Pkg|umurmur}}}}\n\n=== Collaborative software ===\n\nSee also [[Wikipedia:Collaborative software]].\n\n* {{App|[[Wikipedia:Citadel/UX|Citadel/UX]]|Includes an email & mailing list server, instant messaging, address books, calendar/scheduling, bulletin boards, and wiki and blog engines.|https://www.citadel.org/|{{AUR|webcit}}}}\n* {{App|[[SOGo]]|Groupware server built around OpenGroupware.org (OGo) and the SOPE application server.|https://sogo.nu/|{{AUR|sogo}}}}\n\n=== Forum software ===\n\n* {{App|[[Wikipedia:Discourse|Discourse]]|A simple, flat forum, where replies flow down the page in a line.|https://www.discourse.org/|{{AUR|discourse}}}}\n\n=== Link shortening servers ===\n\n* {{App|microbin|A tiny, self-contained, configurable paste bin and URL shortener written in Rust.|https://github.com/szabodanika/microbin|{{AUR|microbin}}}}\n* {{App|shlink|Self-proclaimed definitive self-hosted URL shortener.|https://shlink.io/|{{AUR|shlink}}}}\n* {{App|YOURLS|A self-hosted link shortening service written in PHP.|https://yourls.org/|{{AUR|yourls}}}}\n\n== News, RSS, and blogs ==\n\n=== News aggregators ===\n\n[[Web feed]]s aggregators. Some [[#Email clients|email clients]] are also able to act as news aggregator: [[Wikipedia:Claws Mail|Claws Mail]] RSSyl plugin, [[Evolution]], [[Wikipedia:SeaMonkey#Mail|SeaMonkey Mail & Newsgroups]], [[Thunderbird]].\n\nSee also [[Wikipedia:Comparison of feed aggregators]].\n\n==== Console ====\n\n* {{App|[[Wikipedia:Canto (news aggregator)|Canto]]|Ncurses RSS aggregator.|https://github.com/themoken/canto-curses|{{Pkg|canto-curses}}}}\n* {{App|Ditch The Bell|A highly configurable Linux-based desktop notifier for RSS/Atom feeds.|https://github.com/eschermoore/ditchthebell|{{AUR|dtbell-git}}}}\n* {{App|[[Wikipedia:Gnus|Gnus]]|Email, NNTP and RSS client for Emacs.|https://www.gnus.org/|{{Pkg|emacs}}}}\n* {{App|feed2imap-go|[https://github.com/feed2imap/feed2imap feed2imap] reimplemented in Go that aggregating RSS/Atom/jsonfeed into folders of your IMAP mailbox.|https://github.com/Necoro/feed2imap-go|{{aur|feed2imap-go}}}}\n* {{App|[[Newsboat]]|Ncurses RSS aggregator with layout and keybinding similar to the [[Mutt]] email client.|https://newsboat.org/|{{Pkg|newsboat}}}}\n* {{App|[[Newsraft]]|Feed reader with ncurses user interface.  It is greatly inspired by [[Newsboat]] and tries to be its lightweight counterpart. |https://codeberg.org/grisha/newsraft/|{{AUR|newsraft}}}}\n* {{App|Rawdog|\"RSS Aggregator Without Delusions Of Grandeur\" that parses RSS/CDF/Atom feeds into a static HTML page of articles in chronological order.|https://offog.org/code/rawdog/|{{AUR|rawdog}}}}\n* {{App|rss2email|Aggregating your RSS/Atom feed into your IMAP/Maildir mailbox as a cronjob.|https://github.com/rss2email/rss2email|{{pkg|rss2email}}}}\n* {{App|sfeed|Crontab oriented shell-scriptable feed aggregator setup with a RSS/Atom parser utility plus a simple ncurses reader.|https://codemadness.org/sfeed-simple-feed-parser.html|{{AUR|sfeed}}}}\n* {{App|Snownews|Text mode RSS news reader.|https://sourceforge.net/projects/snownews/|{{AUR|snownews}}}}\n\n==== Graphical ====\n\n* {{App|[[Wikipedia:Kontact#News feed aggregator|Akregator]]|News aggregator for KDE, part of {{Grp|kde-pim}}.|https://apps.kde.org/akregator/|{{Pkg|akregator}}}}\n* {{App|Alligator|Kirigami-based RSS/Atom feed reader for mobile devices.|https://apps.kde.org/alligator/|{{Pkg|alligator}}}}\n* {{App|Feeds|An RSS/Atom feed reader for GNOME.|https://gabmus.gitlab.io/gnome-feeds/|{{Pkg|gfeeds}}}}\n* {{App|Fluent Reader|Modern desktop RSS reader built with React and Fluent UI. Based on the [https://electronjs.org/ Electron] platform.|https://hyliu.me/fluent-reader/|{{AUR|fluent-reader}}}}\n* {{App|HackUp|Read Hacker News from the desktop.|https://github.com/mdh34/hackup|{{AUR|hackup-git}}}}\n* {{App|[[Wikipedia:Liferea|Liferea]]|GTK news aggregator for online news feeds and weblogs.|https://lzone.de/liferea/|{{Pkg|liferea}}}}\n* {{App|NewsFlash|Modern feed reader designed for the GNOME desktop. The spiritual successor to FeedReader.|https://gitlab.com/news-flash/news_flash_gtk|{{Pkg|newsflash}}}}\n* {{App|[[Nextcloud]] News|RSS/Atom feed reader for Nextcloud.|https://github.com/nextcloud/news|{{Pkg|nextcloud-app-news}}}}\n* {{App|Raven|Simple desktop RSS reader made using VueJS. Based on the [https://electronjs.org/ Electron] platform.|https://ravenreader.app/|{{AUR|raven-reader}}}}\n* {{App|RSS Guard|Very tiny RSS and ATOM news reader developed using Qt framework.|https://github.com/martinrotter/rssguard|{{Pkg|rssguard}} or {{Pkg|rssguard-lite}}}}\n* {{App|selfoss|The new multipurpose RSS reader, live stream, mashup, aggregation web application.|https://selfoss.aditu.de/|{{AUR|selfoss}}}}\n* {{App|Tickr|GTK-based RSS Reader that displays feeds as a smooth scrolling line on your desktop, as known from TV stations.|https://www.open-tickr.net/|{{AUR|tickr}}}}\n* {{App|[[Tiny Tiny RSS]]|Web-based news feed (RSS/Atom) aggregator.|https://tt-rss.org/|{{Pkg|tt-rss}}}}\n\n=== Podcast clients ===\n\nSome media players are also able to act as podcast client: [[Amarok]], Cantata, [[Wikipedia:Clementine_(software)|Clementine]], Goggles Music Manager, [[Wikipedia:Rhythmbox|Rhythmbox]], [[VLC media player]]. [[Wikipedia:git-annex|git-annex]] can also [https://git-annex.branchable.com/tips/downloading_podcasts/ function as podcatcher].\n\nSee also [[Wikipedia:List of podcatchers]].\n\n==== Console ====\n\n* {{App|castero|A TUI podcast client for the terminal.|https://github.com/xgi/castero|{{AUR|castero-git}}}}\n* {{App|castget|Simple, command-line RSS enclosure downloader, primarily intended for automatic, unattended downloading of podcasts.|https://castget.johndal.com/|{{Pkg|castget}}}}\n* {{App|gpo|Text mode interface of gPodder.|https://gpodder.github.io/|{{Pkg|gpodder}}}}\n* {{App|Greg|A command-line podcast aggregator.|https://github.com/manolomartinez/greg|{{AUR|greg-git}}}}\n* {{App|pcd|A minimal podcast client written in go|https://github.com/kvannotten/pcd|{{AUR|pcd}}}}\n\n==== Graphical ====\n\n* {{App|CPod|Simple, beautiful podcast app. Based on the [https://electronjs.org/ Electron] platform.|https://github.com/z-------------/CPod|{{AUR|cpod}}}}\n* {{App|GNOME Podcasts|Podcast client for the GNOME Desktop written in Rust.|https://gitlab.gnome.org/World/podcasts|{{Pkg|gnome-podcasts}}}}\n* {{App|gPodder|Podcast client and media aggregator (GTK interface).|https://gpodder.github.io/|{{Pkg|gpodder}}}}\n* {{App|Vocal|Simple podcast client for the Modern Desktop (GTK).|https://vocalproject.net/|{{AUR|vocal}}}}\n* {{App|Kasts|Kasts is a convergent podcast application that looks good on desktop and mobile.|https://apps.kde.org/kasts/|{{Pkg|kasts}}}}\n* {{App|Pocket Casts|Electron wrapper around the Pocket Casts web app with support for MPRIS (media controls).|https://pocketcasts.com/|{{AUR|pocket-casts-linux}}}}\n\n=== Usenet newsreaders ===\n\nSome [[#Email clients|email clients]] are also able to act as Usenet newsreader: [[Wikipedia:Claws Mail|Claws Mail]], [[Evolution]], [[Mutt#NeoMutt|NeoMutt]], [[Wikipedia:SeaMonkey#Mail|SeaMonkey Mail & Newsgroups]], [[Wikipedia:Sylpheed|Sylpheed]], [[Thunderbird]].\n\nSee also: [[Wikipedia:List of Usenet newsreaders]], [[Wikipedia:Comparison of Usenet newsreaders]].\n\n==== Console ====\n\n* {{app|nn|Alternative more user-friendly (curses-based) Usenet newsreader for UNIX.|http://www.nndev.org/|{{AUR|nn}}}}\n* {{app|[[Wikipedia:slrn|slrn]]|Text-based news client.|https://www.slrn.org/|{{AUR|slrn}}}}\n* {{app|[[Wikipedia:Tin_(newsreader)|tin]]|A cross-platform threaded NNTP and spool based UseNet newsreader.|http://tin.org/|{{AUR|tin}}}}\n* {{app|trn|A text-based Threaded Usenet newsreader.|http://trn.sourceforge.net/|{{AUR|trn}}}}\n\n==== Graphical ====\n\n* {{app|[[NZBGet]]|Usenet binary downloader for .nzb files with web and CLI interface.|https://nzbget.net/|{{Pkg|nzbget}}}}\n* {{app|[[Wikipedia:Pan (newsreader)|Pan]]|GTK Usenet newsreader that's good at both text and binaries.|https://pan.rebelbase.com/|{{AUR|pan}}}}\n* {{app|[[SABnzbd]]|An open-source binary newsreader webapp written in Python.|https://sabnzbd.org/|{{AUR|sabnzbd}}}}\n* {{app|XRN|Usenet newsreader for X Window System.|http://www.mit.edu/people/jik/software/xrn.html|{{AUR|xrn}}}}\n\n=== Microblogging clients ===\n\n* {{App|Choqok|Microblogging client for KDE that supports Mastodon, Pump.io and GNU social.|https://choqok.kde.org/|{{AUR|choqok-git}}}}\n* {{App|Dianara|Pump.io client written in Qt.|https://jancoding.wordpress.com/dianara/|{{AUR|dianara}}}}\n* {{App|Giara|Reddit app, built with Python, GTK and Handy.|https://gitlab.gnome.org/World/giara|{{AUR|giara}}}}\n* {{App|Lemmy-UI|Official web app for lemmy.|https://github.com/LemmyNet/lemmy-ui|{{AUR|lemmy-ui}}}}\n* {{App|Lemoa|Native Gtk client for Lemmy.|https://github.com/lemmygtk/lemoa|{{AUR|lemoa-git}}}}\n* {{App|Mikutter|Simple, powerful Mastodon client using GTK and Ruby.|https://mikutter.hachune.net/|{{AUR|mikutter}}}}\n* {{App|Pumpa|Pump.io client written in C++ and Qt.|https://pumpa.branchable.com/|{{AUR|pumpa-git}}}}\n* {{App|Tokodon|Mastodon client for KDE.|https://apps.kde.org/tokodon/|{{Pkg|tokodon}}}}\n* {{App|toot|CLI and TUI tool for interacting with Mastodon instances.|https://github.com/ihabunek/toot|{{Pkg|toot}}}}\n* {{App|tuba|GTK4 client for Mastodon.|https://tuba.geopjr.dev/|{{Pkg|tuba}}}}\n* {{App|Whalebird|Mastodon client application. Based on the [https://electronjs.org/ Electron] platform.|https://whalebird.social/|{{AUR|whalebird}}}}\n\n=== Blog engines ===\n\nSee also [[Wikipedia:Blog software]] and [[Wikipedia:List of content management systems]].\n{{note|Content managers, social networks, and blog publishers overlap in many functions.}}\n* {{App|[[Diaspora]]|A distributed privacy aware social network.|https://diasporafoundation.org|{{AUR|diaspora-mysql}} or {{AUR|diaspora-postgresql}}}}\n* {{App|[[Drupal]]|A PHP-based content management platform.|https://www.drupal.org/|{{Pkg|drupal}}}}\n* {{App|[[Joomla]]|A php Content Management System (CMS) which enables you to build websites and powerful online applications.|https://www.joomla.org/|{{AUR|joomla}}}}\n* {{App|[[Wordpress]]|Blog tool and publishing platform.|https://wordpress.org/|{{Pkg|wordpress}}}}\n\n=== Static site generators ===\n\n* {{App|Hexo|Fast, simple and powerful blog framework.|https://hexo.io/|{{AUR|hexo-cli}}}}\n* {{App|Hugo|Hugo is a static HTML and CSS website generator written in Go. It is optimized for speed, ease of use, and configurability.|https://gohugo.io/|{{Pkg|hugo}}}}\n* {{App|Jekyll|Static blog engine, written in Ruby, which supports Markdown, textile and other formats.|https://jekyllrb.com/|{{AUR|jekyll}}}}\n* {{App|Nikola|Static site generator written in Python, with incremental rebuilds and multiple markup formats.|https://getnikola.com/|{{Pkg|nikola}}}}\n* {{App|Pelican|Static site generator, powered by Python.|https://docs.getpelican.com/|{{Pkg|pelican}}}}\n* {{App|Zola|An opinionated static site generator, written in Rust.|https://www.getzola.org/|{{Pkg|zola}}}}\n\n=== Gallery software ===\n\n* {{App|Bizou|A very simple image gallery written in PHP following the KISS principle.|http://positon.org/bizou/|{{AUR|bizou}}}}\n* {{App|fgallery|A static photo gallery generator with no frills that has a stylish, minimalist look.|https://www.thregr.org/wavexx/software/fgallery/|{{AUR|fgallery}}}}\n* {{App|jAlbum|A freeware cross-platform software for managing and creating digital photo albums or galleries.|https://jalbum.net/en/|{{AUR|jalbum}}}}\n* {{App|jolly|A tool for statically generating galleries from images.|https://gitlab.com/prior99/jolly|{{AUR|jolly}}}}\n* {{App|llgal|An easy and fast on-line gallery generator based on iGal.|http://bgoglin.free.fr/llgal/|{{AUR|llgal}}}}\n* {{App|thumbsup|A static web galleries for all your photos and videos.|https://thumbsup.github.io/|{{AUR|nodejs-thumbsup}}}}\n* {{App|Photoview|A photo gallery for self-hosted personal servers.|https://photoview.github.io/|{{AUR|photoview}}}}\n* {{App|Piwigo|A web application to manage your collection of photos, and other medias..|https://piwigo.org/|{{AUR|piwigo}}}}\n* {{App|revela|A static web image gallery generator..|https://sr.ht/~yaroslav/revela/|{{AUR|revela}}}}\n* {{App|Sigal|A simple static gallery generator.|http://sigal.saimon.org/en/latest/|{{Pkg|sigal}}}}\n* {{App|ZenphotoCMS|A CMS for selfhosted, gallery focused websites.|https://www.zenphoto.org/|{{AUR|zenphoto}}}}\n\n== Remote desktop ==\n\nSee also [[Wikipedia:Remote desktop software]] and [[Wikipedia:Comparison of remote desktop software]].\n\nSee also [https://remotedesktop.google.com Chrome Remote Desktop] for a web browser based solution.\n\n=== Remote desktop clients ===\n\n* {{App|[[Wikipedia:AnyDesk|AnyDesk]]|Proprietary remote desktop software.|https://anydesk.com/|{{AUR|anydesk-bin}}}}\n* {{App|GNOME Connections|Remote desktop client for GNOME. Supports RDP and VNC. Part of {{Grp|gnome}}.|https://gitlab.gnome.org/GNOME/connections|{{Pkg|gnome-connections}}}}\n* {{App|GVncViewer|Simple VNC Client on Gtk-VNC. Run with {{ic|gvncviewer}}.|https://wiki.gnome.org/Projects/gtk-vnc|{{Pkg|gtk-vnc}}}}\n* {{App|[[Wikipedia:KRDC|KRDC]]|Remote Desktop Client for KDE. Supports RDP and VNC. Part of {{Grp|kde-network}}.|https://apps.kde.org/krdc/|{{Pkg|krdc}}}}\n* {{App|[[Remmina]]|Remote desktop client written in GTK. Supports RDP, VNC, NX, XDMCP and SSH.|https://remmina.org/|{{Pkg|remmina}}}}\n* {{App|Remote Viewer|Simple remote display client. Supports SPICE and VNC.|https://virt-manager.org/|{{Pkg|virt-viewer}}}}\n* {{App|Remotely|Simple VNC viewer for GNOME. Discontinued.|https://gitlab.gnome.org/World/Remotely|{{AUR|remotely}}}}\n* {{App|RustDesk|A remote desktop software, open source, written in Rust.|https://rustdesk.com|{{AUR|rustdesk}}}}\n* {{App|Sunlogin Remote Control|Proprietary software that supports remote control of mobile devices, Windows, Mac, Linux and other systems. It uses its own proprietary protocol.|https://sunlogin.oray.com/en/about/about|{{AUR|sunloginclient}}}}\n* {{App|ToDesk|Proprietary remote desktop client that suits for remote teamwork. It uses its own proprietary protocol.|https://www.todesk.com/|{{AUR|todesk-bin}}}}\n* {{App|[[Wikipedia:TeamViewer|TeamViewer]]|Proprietary remote desktop client. It uses its own proprietary protocol.|https://www.teamviewer.com/|{{AUR|teamviewer}}}}\n* {{App|[[TigerVNC|vncviewer (TigerVNC)]]|VNC viewer for X.|https://tigervnc.org/|{{Pkg|tigervnc}}}}\n* {{App|[[Wikipedia:Vinagre|Vinagre]]|Remote desktop viewer for GNOME. Supports RDP, VNC, SPICE and SSH.|https://wiki.gnome.org/Apps/Vinagre|{{Pkg|vinagre}}}}\n* {{App|xfreerdp|FreeRDP X11 client. Run with {{ic|xfreerdp}}.|https://www.freerdp.com/|{{Pkg|freerdp}}}}\n* {{App|[[X2Go]] Client|A graphical client (Qt5) for the X2Go system that uses the [[w:NX technology|NX technology]] protocol.|https://wiki.x2go.org/doku.php|{{AUR|x2goclient}}}}\n\n=== Remote desktop servers ===\n\n* {{App|freerdp-shadow-cli|A utility for sharing a X display via RDP.|https://www.freerdp.com/|{{Pkg|freerdp}}}}\n* {{App|kmsvnc|A VNC server for DRM/KMS capable GNU/Linux devices.|https://github.com/isjerryxiao/kmsvnc|{{AUR|kmsvnc}}}}\n* {{App|Krfb|VNC server for KDE. Part of {{Grp|kde-network}}.|https://apps.kde.org/krfb/|{{Pkg|krfb}}}}\n* {{App|[[NoMachine]]|Proprietary remote desktop server and client based on [[w:NX technology|NX technology]].|https://nomachine.com/|{{AUR|nomachine}}}}\n* {{App|wayvnc|VNC server for wlroots based wayland compositors (such as {{Pkg|sway}}).|https://github.com/any1/wayvnc|{{Pkg|wayvnc}}}}\n* {{App|[[TigerVNC|x0vncserver (TigerVNC)]]|VNC Server for X displays.|https://tigervnc.org/|{{Pkg|tigervnc}}}}\n* {{App|[[x11vnc]]|VNC server for real X displays.|http://www.karlrunge.com/x11vnc/|{{Pkg|x11vnc}}}}\n* {{App|[[X2Go]] Server|An open source remote desktop software that uses the [[w:NX technology|NX technology]] protocol.|https://wiki.x2go.org/doku.php|{{AUR|x2goserver}}}}\n* {{App|[[Xpra]]|A multi-platform screen and application forwarding system.|https://xpra.org/|{{Pkg|xpra}}}}\n* {{App|[[Xrdp]]|A daemon that supports RDP. It uses Xvnc, X11rdp or xorgxrdp as a backend.|https://www.xrdp.org/|{{AUR|xrdp}}}}"
                    }
                ]
            },
            "13512": {
                "pageid": 13512,
                "ns": 0,
                "title": "Firefox (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Web browser (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)]]\n[[Category:Mozilla (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)]]\n[[de:Firefox]]\n[[en:Firefox]]\n[[es:Firefox]]\n[[ja:Firefox]]\n[[zh-hans:Firefox]]\n[[zh-hant:Firefox]]\n{{TranslationStatus (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|Firefox|29 \u043d\u043e\u044f\u0431\u0440\u044f 2022|758068}}\n{{Related articles start (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)}}\n{{Related|\u041f\u043b\u0430\u0433\u0438\u043d\u044b \u0434\u043b\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432}}\n{{Related|Firefox/Tweaks}}\n{{Related2|Firefox (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)/Profile on RAM (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|\u041f\u0440\u043e\u0444\u0438\u043b\u044c Firefox \u0432 \u041e\u0417\u0423}}\n{{Related|Firefox/Privacy}}\n{{Related|Chromium (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)}}\n{{Related articles end}}\n\n[https://www.mozilla.org/ru/firefox/ Firefox] \u2014 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u0435\u0431-\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0439 [https://www.mozilla.org/ru/ Mozilla].\n\n== \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 ==\n\n[[\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435]] \u043f\u0430\u043a\u0435\u0442 {{Pkg|firefox}}.\n\n\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b:\n\n* {{App|Firefox Developer Edition|\u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432|https://www.mozilla.org/ru/firefox/developer/|{{Pkg|firefox-developer-edition}}}}\n* {{App|Firefox Extended Support Release|\u0432\u0435\u0440\u0441\u0438\u044f \u0441 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0440\u043e\u043a\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438|https://www.mozilla.org/ru/firefox/enterprise/|{{AUR|firefox-esr}}}}\n* {{App|Firefox Beta|\u0431\u0435\u0442\u0430-\u0432\u0435\u0440\u0441\u0438\u044f|https://www.mozilla.org/ru/firefox/channel/desktop/#beta|{{AUR|firefox-beta-bin}}}}\n* {{App|Firefox Nightly|\u043d\u043e\u0447\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f [https://developer.mozilla.org/Firefox/Experimental_features \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439]|https://www.mozilla.org/ru/firefox/channel/desktop/#nightly|{{AUR|firefox-nightly}}}}\n* {{App|Firefox KDE|\u0432\u0435\u0440\u0441\u0438\u044f \u0441 \u043f\u0430\u0442\u0447\u0435\u043c \u043e\u0442 OpenSUSE \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 [[#\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 KDE|\u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 KDE]], \u0447\u0435\u043c \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439 \u0434\u043b\u044f Firefox.|https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox|{{AUR|firefox-kde-opensuse}}, {{AUR|firefox-kde}}{{Broken package link (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|package not found}} \u0438\u043b\u0438 {{AUR|firefox-developer-edition-kde}}{{Broken package link (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|package not found}}}}\n* \u041a\u0440\u043e\u043c\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f Mozilla, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u0430\u043a\u0436\u0435 \u0444\u043e\u0440\u043a\u0438 \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438. \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 [[List of applications/Internet#Gecko-based]].\n\n\u041a\u0440\u043e\u043c\u0435 \u044f\u0437\u044b\u043a\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0433\u043e, \u0434\u043b\u044f Firefox \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0440\u044f\u0434 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u041e\u0431\u044b\u0447\u043d\u043e \u043e\u043d\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f {{ic|firefox-i18n-''languagecode''}} (\u0433\u0434\u0435 {{ic|''languagecode''}} \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u044f\u0437\u044b\u043a\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, '''ru''', '''de''', '''ja''', '''fr''' \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435). \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 [https://archlinux.org/packages/extra/any/firefox-i18n/ firefox-i18n] \u0434\u043b\u044f {{Pkg|firefox}}, [https://archlinux.org/packages/extra/any/firefox-developer-edition-i18n/ firefox-developer-edition-i18n] \u0434\u043b\u044f {{Pkg|firefox-developer-edition}} \u0438 [https://aur.archlinux.org/packages/?K=firefox-nightly- firefox-nightly-] \u0434\u043b\u044f {{AUR|firefox-nightly}}.\n\n{{Note (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|1=\u042f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043d\u0430 ''-nightly'' \u0438 ''-developer-edition'' \u0438\u0437-\u0437\u0430 \u0447\u0430\u0441\u0442\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u0442\u0440\u043e\u043a, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0441\u0431\u043e\u044f\u043c. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044f\u0437\u044b\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c {{ic|intl.locale.requested}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}} [https://www.reddit.com/r/firefox/comments/lx3dp9/how_to_change_interface_language/gpovlsp/?context=8&depth=9].}}\n\n== \u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f ==\n\nFirefox \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445. \u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435, \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \"\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\" \u0432 Firefox.\n\n\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439 \u0435\u0441\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 [[\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432]].\n\n=== \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 ===\n\n\u041f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438:\n\n* \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u0437\u043d\u0430\u0447\u043e\u043a \u0437\u0432\u0451\u0437\u0434\u043e\u0447\u043a\u0438 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438\u043b\u0438 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448 {{ic|Ctrl+d}}, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0443.\n* \u041d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0430\u043c\u0438 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0435 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u043c\u044b\u0448\u0438 \u0438 \u0432 \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u043c\u0435\u043d\u044e \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 ''\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0443...''\n* \u0412 \u043f\u043e\u043b\u0435 ''\u0410\u0434\u0440\u0435\u0441'' \u0432\u043f\u0438\u0448\u0438\u0442\u0435 {{ic|%s}} \u0432 \u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043a\u0443\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435 ''\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e'', \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u043c \u0434\u0432\u0438\u0436\u043a\u0435 \u043f\u0440\u044f\u043c\u043e \u0438\u0437 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\n\n \u0410\u0434\u0440\u0435\u0441:\n https://duckduckgo.com/html/?q=%s\n \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e:\n d\n\n\u0414\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u0430\u0434\u0440\u0435\u0441\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043d\u0435\u0451 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0438 \u0437\u0430\u0442\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0431\u0435\u043b \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441.\n\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 {{ic|d archwiki}} \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u043f\u043e\u0438\u0441\u043a\u0443 \u0441\u043b\u043e\u0432\u0430 {{ic|archwiki}} \u0432 DuckDuckGo.\n\n\u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439. \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 [https://addons.mozilla.org/firefox/search-tools/ \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443] \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0438 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432.\n\n\u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 [https://mycroftproject.com/ Mycroft Project] (\u0430\u043d\u0433\u043b.).\n\n==== firefox-extension-arch-search ====\n\n[[\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435]] \u043f\u0430\u043a\u0435\u0442 {{AUR|firefox-extension-arch-search}}, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f Arch \u0434\u0432\u0438\u0436\u043a\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 (AUR, wiki, \u0444\u043e\u0440\u0443\u043c \u0438 \u0442.\u0434.).\n\n== \u041f\u043b\u0430\u0433\u0438\u043d\u044b ==\n\n\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 Flash Player, \u0431\u044b\u043b\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0430 \u0432 Firefox 85.[https://support.mozilla.org/kb/npapi-plugins][https://support.mozilla.org/kb/end-support-adobe-flash]\n\n== \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 ==\n\n\u0412 Firefox \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0445, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443:\n\n about:config\n\n\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0432 \u0441\u0438\u043b\u0443 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e [https://www.mozilla.org/ru/firefox/sync/ Firefox Sync]. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0430\u0441\u0442\u044c \u0432\u0441\u0435\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 {{ic|about:config}}; \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u0432\u0432\u0435\u0434\u044f \u0432 \u043f\u043e\u0438\u0441\u043a {{ic|services.sync.prefs}}. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439) \u043c\u043e\u0436\u043d\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e, \u0441\u043e\u0437\u0434\u0430\u0432 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0442\u0438\u043f\u0430 boolean \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u0441 [https://support.mozilla.org/ru/kb/sinhronizaciya-polzovatelskih-nastroek services.sync.prefs.sync]. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0435\u043b\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f [https://addons.mozilla.org/firefox/addon/noscript/ NoScript], \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440:\n\n services.sync.prefs.sync.capability.policy.maonoscript.sites\n\n\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 {{ic|noscript.sync.enabled}} \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|true}} \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a NoScript \u0447\u0435\u0440\u0435\u0437 Firefox Sync.\n\n=== \u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a ===\n\nFirefox \u0445\u0440\u0430\u043d\u0438\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 {{ic|prefs.js}} \u0432 \u043f\u0430\u043f\u043a\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u044f, \u043e\u0431\u044b\u0447\u043d\u043e {{ic|~/.mozilla/firefox/''xxxxxxxx''.default/}}.\n\n\u0422\u0430\u043a\u0436\u0435 Firefox \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 {{ic|user.js}}: [http://kb.mozillazine.org/User.js_file user.js] \u0432 \u043f\u0430\u043f\u043a\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u044f. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 {{ic|user.js}} \u0438\u043c\u0435\u044e\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043d\u0430\u0434 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 {{ic|prefs.js}}. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f {{ic|user.js}} \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 {{ic|about:config}} \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c {{ic|user.js}} \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u041f\u0440\u0438\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 [https://github.com/pyllyukko/user.js \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438].\n\n\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u0434\u043b\u044f \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0435\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0430\u043f\u043a\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c ''firefox'' \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f, \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0435\u0433\u043e \u0438 [https://support.mozilla.org/ru/kb/rezervirovanie-vashih-dannyh#w_vosstanovlenie-profilia-iz-rezervnoi-kopii \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435] \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0432 \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443.\n\n\u0418\u043d\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Firefox \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0448\u0430\u0433\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 [https://support.mozilla.org/ru/kb/modifikaciya-firefox-s-pomoshyu-autoconfig \u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f Firefox \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e AutoConfig]:\n\n1. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 {{ic|/usr/lib/firefox/defaults/pref/autoconfig.js}}:\n\n pref(\"general.config.filename\", \"firefox.cfg\");\n pref(\"general.config.obscure_value\", 0);\n\n2. \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 {{ic|/usr/lib/firefox/firefox.cfg}} (\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f):\n\n //\n //...\u0432\u0430\u0448\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438...\n // \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0438\u0436\u0435 \u0434\u043b\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f Pocket\n // lockPref(\"extensions.pocket.enabled\", false);\n // lockPref(\"browser.newtabpage.activity-stream.feeds.section.topstories\", false);\n\n\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e {{ic|//}}. \u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 {{ic|user.js}}.\n\n=== \u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u0435\u0434\u0438\u0430\u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 ===\n\n\u0412 Firefox \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f [[FFmpeg]] \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u0435\u0434\u0438\u0430\u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0432 HTML5-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445 {{ic|<audio>}} \u0438 {{ic|<video>}}. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 [https://cconcolato.github.io/media-mime-support/ \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u0438\u0434\u0435\u043e-\u0442\u0435\u0441\u0442\u0430] \u0438\u043b\u0438 [https://hpr.dogphilosophy.net/test/ \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0430\u0443\u0434\u0438\u043e-\u0442\u0435\u0441\u0442\u0430]{{Dead link (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|2024|03|03|status=SSL error}} (\u0430\u043d\u0433\u043b.) \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432.\n\n\u0412 Firefox \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f [[PulseAudio (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|PulseAudio]] \u043f\u0440\u0438 \u0437\u0430\u0445\u0432\u0430\u0442\u0435 \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u0430\u0443\u0434\u0438\u043e. \u0415\u0441\u043b\u0438 PulseAudio \u043d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f [[Advanced Linux Sound Architecture (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|ALSA]].\n\n{{Tip (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|Firefox \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e, \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0437\u0432\u0443\u043a. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c [[PipeWire (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|PipeWire]] \u0438 [[WirePlumber (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|WirePlumber]], \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.}}\n\n==== HTML5 DRM/Widevine ====\n\nWidevine \u2014 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 Netflix, Amazon Prime Video \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 ''\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 > \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 > \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0437\u0430\u0449\u0438\u0442\u044b \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432 (DRM)''. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 Widevine-\u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430, Firefox \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 DRM \u043f\u043e\u0434 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439. \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u0435\u0433\u043e, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u043e\u0436\u0434\u0438\u0442\u0435\u0441\u044c \u0438\u0441\u0447\u0435\u0437\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430\"; \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0441 \u0441\u0430\u0439\u0442\u043e\u0432, \u0437\u0430\u0449\u0438\u0449\u0451\u043d\u043d\u044b\u0445 Widevine.\n\nFirefox \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0435\u043e 720p (\u0438\u043b\u0438 \u043d\u0438\u0436\u0435) \u0441 Widevine, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 [https://bugzilla.mozilla.org/show_bug.cgi?id=1700815 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 DRM]. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0431\u044b\u043b \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d, \u043a\u0430\u043a \u0432 \u043e\u043a\u043d\u0435, \u0442\u0430\u043a \u0438 \u0432 \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445.\n\n==== \u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \"Open With\" ====\n\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 [https://addons.mozilla.org/firefox/addon/open-with/ Open With].\n# \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 ''\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f > Open With > Preferences''.\n# \u0421\u043b\u0435\u0434\u0443\u0439\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u0444\u0430\u0439\u043b\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c.\n# \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ''Add browser''.\n# \u0412 \u0434\u0438\u0430\u043b\u043e\u0433\u0435 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043c\u0435\u043d\u044e \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u0438\u0434\u0435\u043e\u043f\u043b\u0435\u0435\u0440\u0430 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0432\u0435\u0449\u0430\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, {{ic|/usr/bin/mpv}}).\n## \u041f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u043b\u0435\u0435\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, {{ic|--force-window --ytdl}} \u0434\u043b\u044f ''mpv'')\n# \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0435 \u0441 \u0432\u0438\u0434\u0435\u043e \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u0435\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u043c\u0435\u043d\u044e Open With \u0438 \u0435\u0441\u043b\u0438 \u0441\u0430\u0439\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043f\u043b\u0435\u0435\u0440 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0432\u0438\u0434\u0435\u043e.\n\n\u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0441 ''youtube-dl'' \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u0438\u0434\u0435\u043e.\n\n==== \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e ====\n\n[[\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e]] \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c VA-API \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043a\u0430\u043a \u0432 [[Xorg (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)]] [https://bugzilla.mozilla.org/show_bug.cgi?id=1619523] [https://www.phoronix.com/scan.php?page=news_item&px=Firefox-80-VA-API-X11], \u0442\u0430\u043a \u0438 \u0432 [[Wayland (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|Wayland]] [https://mastransky.wordpress.com/2020/06/03/firefox-on-fedora-finally-gets-va-api-on-wayland/].\n\n\u041f\u0435\u0440\u0435\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 VA-API \u0432 Firefox \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f:\n\n# \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 VA-API \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u0430 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c; \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 [[\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e]].\n# WebRender \u0432\u043a\u043b\u044e\u0447\u0435\u043d. \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 {{ic|about:support}} \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 ''\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u0438\u043d\u0433''. \u041e\u043d \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 GNOME \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0440\u0435\u0434\u0430\u0445 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 [https://mastransky.wordpress.com/2021/01/10/firefox-were-finally-getting-hw-acceleration-on-linux/].\n#* \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 WebRender, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u043d\u0430 2021 \u0433\u043e\u0434 \u0441 \u043d\u0438\u043c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e [https://bugzilla.mozilla.org/show_bug.cgi?id=1723540#c1].\n#* \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u044b\u0439 WebRender \u043f\u0443\u0442\u0451\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 {{ic|gfx.webrender.all}} \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|true}}.\n# \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|media.ffmpeg.vaapi.enabled}} \u0437\u0430\u0434\u0430\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|true}} \u0432 {{ic|about:config}}.\n# \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 [[Wayland (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|Wayland]] Firefox \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u0432 [[#Wayland|\u0440\u0435\u0436\u0438\u043c\u0435 Wayland]].\n\n{{Note (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|1=<nowiki/>\n* \u0425\u043e\u0442\u044f \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 NVIDIA \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 VA-API, \u043d\u043e\u0432\u044b\u0435 \u0435\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 DMA-BUF. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 {{Pkg|libva-nvidia-driver}} \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u043d\u0430 NVIDIA \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e [[GPGPU (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)#CUDA|CUDA]]. \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0435\u0441\u0442\u044c \u0432 [https://github.com/elFarto/nvidia-vaapi-driver/#firefox \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 GitHub].\n* \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 DMA-BUF \u0434\u043b\u044f [[Hardware video acceleration (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|VDPAU]] \u0438 {{Pkg|libva-vdpau-driver}}, \u044d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0432 Firefox. \u0412\u043e\u043e\u0431\u0449\u0435, \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 Firefox 102, \u0435\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442 \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 {{ic|media.ffmpeg.vaapi.enabled}}, \u0442\u043e Firefox \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u0434\u0430\u0442\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435.\n* \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f VA-API \u0432 Firefox \u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c H.264/AVC, VP8 \u0438 VP9, AV1. \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 AV1 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f FireFox 98 \u0438\u043b\u0438 \u043d\u043e\u0432\u0435\u0435 [https://bugzilla.mozilla.org/show_bug.cgi?id=1745225].\n* \u041a\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 [https://bugzilla.mozilla.org/show_bug.cgi?id=1588904#c36 \u044d\u0442\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438], \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 GPU \u0434\u043b\u044f VA-API \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.\n* \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c [[AMDGPU (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|AMDGPU]] \u043f\u043e\u0434 {{Pkg|linux-hardened}} \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0440\u0430\u0442\u044c ''linux-hardened'' \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c {{ic|1=CONFIG_CHECKPOINT_RESTORE=y}} \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e {{Pkg|mesa}} [https://gitweb.gentoo.org/repo/gentoo.git/tree/media-libs/mesa/mesa-9999.ebuild \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 kcmp]. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 [https://bugzilla.mozilla.org/show_bug.cgi?id=1624743 \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438].\n}}\n\n\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441 VA-API \u043c\u043e\u0436\u043d\u043e, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 Firefox \u0441 [[Environment variables (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f]] {{ic|1=MOZ_LOG=\"PlatformDecoderModule:5\"}} \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0432 \u043b\u043e\u0433, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 VA-API. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\u043c \"VA-API\" \u043f\u0440\u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0438 \u0432\u0438\u0434\u0435\u043e \u043d\u0430 YouTube.\n\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u0438 \u043b\u043e\u0433\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043d\u0438\u0445 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e-\u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u0438\u043d\u0433\u0430 (WebRender \u0438\u043b\u0438 OpenGL) \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e VA-API \u0432 \u0432\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.\n\n{{Tip (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|\u0427\u0442\u043e\u0431\u044b \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043d\u0430 YouTube, \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u0434\u0435\u043a, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u0432\u0430\u0448\u0438\u043c \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u041f\u0440\u043e\u0444\u0438\u043b\u0438, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u0430\u0448\u0435\u0439 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u043e\u0439, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u0430\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 [[\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e#\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 VA-API]], \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043d\u0430 YouTube \u043a\u043e\u0434\u0435\u043a\u0438 ''\u0438\u043d\u043e\u0433\u0434\u0430'' (\u0435\u0441\u043b\u0438 YouTube \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b!) \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 [https://addons.mozilla.org/firefox/addon/h264ify/ h264ify] \u0438\u043b\u0438 [https://addons.mozilla.org/firefox/addon/enhanced-h264ify/ enhanced-h264ify]. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c {{AUR|firefox-h264ify}}{{Broken package link (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|package not found}}.}}\n\n=== \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 ===\n\nFirefox \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439 [[Hunspell]], \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439.\n\n\u0427\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435 \u0438 \u043e\u0442\u043c\u0435\u0442\u044c\u0442\u0435 \u0433\u0430\u043b\u043e\u0447\u043a\u043e\u0439 \u043f\u0443\u043d\u043a\u0442 ''\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438''. \u0414\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u044f\u0437\u044b\u043a\u0430, \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u041f\u041a\u041c \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u044f\u0437\u044b\u043a \u0438\u0437 \u043f\u043e\u0434\u043c\u0435\u043d\u044e ''\u042f\u0437\u044b\u043a\u0438''.\n\n\u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u043e\u0440 \u044f\u0437\u044b\u043a\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f, \u0441\u043c. \u0440\u0430\u0437\u0434\u0435\u043b [[#Firefox \u043d\u0435 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e]].\n\n==== \u041e\u0431\u0449\u0435\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u0438 Hunspell ====\n\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 [[Hunspell]] \u0438 \u0441\u043b\u043e\u0432\u0430\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432.\n\n==== \u0421\u043b\u043e\u0432\u0430\u0440\u0438-\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f ====\n\n\u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u044f\u0437\u044b\u043a\u043e\u0432, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 ''\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u043e\u0432\u0430\u0440\u0438...'' \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u0438 \u0441\u043e [https://addons.mozilla.org/firefox/language-tools/ \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u0439 \u0438 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432].\n\n{{Tip (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0443\u0441\u0441\u043a\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 {{Pkg|firefox-spell-ru}}.}}\n\n=== \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 KDE ===\n\n* \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 [[KDE (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|KDE]] GTK-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 Firefox), \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 {{Pkg|breeze-gtk}} \u0438 {{Pkg|kde-gtk-config}}. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 ''\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b > \u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 > \u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 > \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 GNOME/GTK'' \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0435\u043c\u0443 'Breeze'.\n* \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433\u0438 \u0432\u044b\u0431\u043e\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043f\u0435\u0447\u0430\u0442\u0438 KDE \u0432 Firefox 64 \u0438 \u043d\u043e\u0432\u0435\u0435, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0430\u043a\u0435\u0442\u044b {{Pkg|xdg-desktop-portal}} \u0438 {{Pkg|xdg-desktop-portal-kde}}, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u044d\u0442\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432:\n** \u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}} \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|widget.use-xdg-desktop-portal.mime-handler}} \u0432 {{ic|1}}. \u0422\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c {{ic|widget.use-xdg-desktop-portal.file-picker}} \u0441 {{ic|2}} \u043d\u0430 {{ic|1}}.\n** \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Firefox \u0441 [[Environment variables (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f]] {{ic|1=GTK_USE_PORTAL=1}}.\n* \u0414\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 MIME-\u0442\u0438\u043f\u043e\u0432 [[KDE (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|KDE]] \u0438 \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u043c \u0432\u044b\u0431\u043e\u0440\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f {{AUR|firefox-kde-opensuse}}, \u0441\u0431\u043e\u0440\u043a\u043e\u0439 Firefox \u0441 \u043f\u0430\u0442\u0447\u0430\u043c\u0438 \u043e\u0442 OpenSUSE. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 MIME {{ic|~/.config/mimeapps.list}} \u0438\u0437 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 {{ic|~/.local/share/applications/mimeapps.list}}, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 Firefox. \u0421\u043c. [[XDG MIME Applications (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)#mimeapps.list]].\n* \u0422\u0430\u043a\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:\n** \u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0441 [[Plasma (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|Plasma]]. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c {{Pkg|plasma-browser-integration}} \u0438 [https://addons.mozilla.org/firefox/addon/plasma-integration/ \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 Plasma Integration].\n::{{Tip (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0432\u0438\u0434\u0436\u0435\u0442\u0435 \u043f\u043b\u0435\u0435\u0440\u0430 \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u043a\u0435 \u0432 \u0442\u0440\u0435\u0435, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 {{ic|media.hardwaremediakeys.enabled}} \u0432 {{ic|false}}. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0438\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f Plasma.}}\n\n=== \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u0440\u0435\u0447\u044c ===\n\nFirefox \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 \u0440\u0435\u0447\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f [https://github.com/brailcom/speechd Speech Dispatcher], \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 [[\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435]] \u043f\u0430\u043a\u0435\u0442 {{Pkg|speech-dispatcher}}. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, Speech Dispatcher \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0434\u0432\u0438\u0436\u043a\u0430 \u0441\u0438\u043d\u0442\u0435\u0437\u0430 \u0440\u0435\u0447\u0438. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0434\u0432\u0438\u0436\u043e\u043a \u2014 [[Festival (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|Festival]]; \u0434\u043b\u044f \u0435\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043b\u0435\u0434\u0443\u0439\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 [[Festival (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)#\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430]].\n\n\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 [[Festival (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)#\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430|\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0439\u0442\u0435 Festival]]. \u0417\u0430\u0442\u0435\u043c [https://htmlpreview.github.io/?https://github.com/brailcom/speechd/blob/master/doc/speech-dispatcher.html#Recommended-installation-procedure \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0439\u0442\u0435 Speech Dispatcher].\n\n\u0412 Firefox \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0412\u0438\u0434 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u041f\u0440\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0441\u043b\u0435\u0432\u0430.\n\n\u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0412\u0438\u0434 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u0412\u0438\u0434 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u043d\u0430\u0447\u043e\u043a.\n\n\u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b [[#Web Speech API \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0433\u043e\u043b\u043e\u0441\u043e\u0432]].\n\n== \u0421\u043e\u0432\u0435\u0442\u044b \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 ==\n\n\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u043e\u0431\u0449\u0438\u0445 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f\u0445 \u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f\u0445 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 [[Firefox/Tweaks]] \u0438 [[Firefox/Privacy]] \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.\n\n=== \u0422\u0451\u043c\u043d\u044b\u0435 \u0442\u0435\u043c\u044b ===\n\nFirefox \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0435\u043c\u044b GTK \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0451\u043c\u043d\u043e\u0439 \u0442\u0435\u043c\u044b, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (\u043a\u0430\u043a \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \"\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434\" \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a GNOME \u0438\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a KDE). \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u0430\u043a\u0435\u0442 {{Pkg|xdg-desktop-portal}}.\n\n\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Firefox 68, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 Firefox \u0438 \u0434\u0430\u0436\u0435 \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u0430\u0439\u0442\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0451\u043c\u043d\u043e\u0439 \u0442\u0435\u043c\u044b \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u0435\u043c\u044b Firefox \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u0442\u0435\u043c\u044b GTK. \u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|ui.systemUsesDarkTheme}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|1}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}} [https://bugzilla.mozilla.org/show_bug.cgi?id=1488384#c23].\n\n\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Firefox 100, \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0435\u043c\u043e\u0439 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 [https://developer.mozilla.org/ru/docs/Web/CSS/@media/prefers-color-scheme prefers-color-scheme], \u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 Firefox \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 {{ic|layout.css.prefers-color-scheme.content-override}}. \u041f\u0440\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 {{ic|3}} \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043c\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043f\u0440\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 {{ic|2}} \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u043c\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (\u0435\u0441\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 {{ic|ui.systemUsesDarkTheme}}, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435), \u0430 {{ic|1}} \u0438 {{ic|0}} \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0441\u0432\u0435\u0442\u043b\u0443\u044e \u0438 \u0442\u0451\u043c\u043d\u0443\u044e \u0442\u0435\u043c\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0447\u0435\u0440\u0435\u0437 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Firefox \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 ''\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 > \u042f\u0437\u044b\u043a \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 > \u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0441\u0430\u0439\u0442\u043e\u0432''.\n\n=== \u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u0441\u043c\u0435\u043d\u044b \u043a\u0430\u0434\u0440\u043e\u0432 ===\n\n\u0415\u0441\u043b\u0438 Firefox \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0442\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0441\u043c\u0435\u043d\u044b \u043a\u0430\u0434\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u044f\u0442\u044c\u0441\u044f 60. \u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|layout.frame_rate}} \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0441\u043c\u0435\u043d\u044b \u043a\u0430\u0434\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 144 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 144 \u0413\u0446), \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e.\n\n=== \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 ===\n\n\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c [[Firejail]] \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c {{ic|rlimit-as}}, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 (\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e [[Wikipedia:Out of memory|\u043d\u0435\u0445\u0432\u0430\u0442\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438]]).\n\n=== \u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0432\u043a\u043b\u0430\u0434\u043e\u043a ===\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b {{ic|browser.tabs.insertAfterCurrent}} \u0438 {{ic|browser.tabs.insertRelatedAfterCurrent}}, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0432\u043a\u043b\u0430\u0434\u043e\u043a (\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0438\u043b\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435). \u0421\u043c. [https://support.mozilla.org/en/questions/1229062] \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.\n\n=== \u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b ===\n\n''\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442'' \u043c\u043e\u0436\u043d\u043e \u043a\u043d\u043e\u043f\u043a\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (\u043c\u0435\u043d\u044e ''\u0414\u0440\u0443\u0433\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b > \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432''), \u043d\u0430\u0436\u0430\u0442\u0438\u0435\u043c {{ic|Ctrl+Shift+s}} \u0438\u043b\u0438 \u0449\u0451\u043b\u043a\u043d\u0443\u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0438 \u0432\u044b\u0431\u0440\u0430\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e. \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 [https://support.mozilla.org/ru/kb/skrinshoty-firefox] \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.\n\n\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430 \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430. \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0443\u043d\u043a\u0442 ''\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b'' \u0432 \u043c\u0435\u043d\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 (\u043a\u043d\u043e\u043f\u043a\u0430 \u0441 \u0442\u0440\u0435\u043c\u044f \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438) \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0433\u0430\u043b\u043e\u0447\u043a\u0443 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 ''\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432''.\n\n=== Wayland ===\n\n\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 Firefox \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 [[Wayland (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|Wayland]] \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e [[Environment variables (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f]].\n\n $ MOZ_ENABLE_WAYLAND=1 firefox\n\n\u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c, \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 [[\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f#\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f]] \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 Firefox \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044f\u0440\u043b\u044b\u043a\u0430 (\u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e).\n\n\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u0443 ''\u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u043a\u043d\u0430\u043c\u0438'' \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:support}} \u2014 \u0442\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e {{ic|wayland}}. \u0415\u0441\u043b\u0438 \u0442\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e {{ic|x11}} \u2014 \u0437\u043d\u0430\u0447\u0438\u0442 Firefox \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 [[Xorg (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|Xorg]], \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|xwayland}} \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Wayland, \u043d\u043e Firefox \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f \u043a\u0430\u043a legacy X11 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.\n\n\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 Wayland \u0438 X.org, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432 [[Command-line shell (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)#\u0424\u0430\u0439\u043b\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a|\u0441\u043a\u0440\u0438\u043f\u0442, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0439 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430]], \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 {{ic|~/.bash_profile}} \u0434\u043b\u044f [[Bash (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|Bash]]:\n\n{{bc|1=\nif [ \"$XDG_SESSION_TYPE\" == \"wayland\" ]; then\n    export MOZ_ENABLE_WAYLAND=1\nfi\n}}\n\n=== \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u043a\u043e\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 ===\n\n\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 WM_CLASS \u043d\u0430 \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 {{ic|--class}} \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043a \u043e\u043a\u043d\u0430\u043c Firefox.\n\n=== \u041f\u0440\u043e\u0444\u0438\u043b\u0438 ===\n\n\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043f\u0438\u0439 Firefox \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u0439:\n\n $ firefox [--new-instance] -P\n\n\u041a\u043b\u0430\u0441\u0441 \u043e\u043a\u043d\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 Firefox \u0441 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c:\n\n $ firefox [--new-instance] -P ''profile_name'' --class=''class_name''\n\n\u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c [https://ffprofile.com/ Firefox Profilemaker] \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u044f Firefox \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f.\n\n=== \u0421\u0435\u043d\u0441\u043e\u0440\u043d\u044b\u0435 \u0436\u0435\u0441\u0442\u044b \u0438 \u0442\u043e\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u043d\u0430 \u0442\u0430\u0447\u043f\u0430\u0434\u0435 ===\n\n\u0417\u0430\u0434\u0430\u0439\u0442\u0435 [[Environment variables (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f]] {{ic|1=MOZ_USE_XINPUT2=1}} \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c Firefox \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u043d\u0441\u043e\u0440\u043d\u044b\u0445 \u0436\u0435\u0441\u0442\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f) \u0438 (\"\u043e\u0434\u0438\u043d \u0432 \u043e\u0434\u0438\u043d\") \u0442\u043e\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u043d\u0430 \u0442\u0430\u0447\u043f\u0430\u0434\u0435 (\u0447\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0432 GTK3-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Nautilus).\n\u0412 Wayland \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c {{ic|1=MOZ_ENABLE_WAYLAND=1}}.\n\n\u041a\u0438\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0430 \u043e\u0449\u0443\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0447\u0451\u0442\u043a\u043e \u043d\u0430 Wayland \u0438\u0437-\u0437\u0430 https://bugzilla.mozilla.org/show_bug.cgi?id=1568722, \u0438 \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0437\u0430\u0439\u0434\u044f \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 {{ic|about:config}} \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0432 {{ic|apz.gtk.kinetic_scroll.enabled}}. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0438\u0442 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0443 \u043a \u043d\u0430\u0447\u0430\u043b\u0443 \u0438 \u043a\u043e\u043d\u0446\u0443 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446.\n\n=== \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 ===\n\n\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 Firefox \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043a\u043b\u0430\u0434\u043e\u043a, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043d\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0441\u0430\u0439\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u043c\u0435\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u00ab\u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0445 \u0432\u043a\u043b\u0430\u0434\u043e\u043a\u00bb.\n\n\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 ''\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 > \u041d\u0430\u0447\u0430\u043b\u043e'', \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 ''\u0414\u043e\u043c\u0430\u0448\u043d\u044f\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0438 \u043d\u043e\u0432\u044b\u0435 \u043e\u043a\u043d\u0430'' \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0443\u043d\u043a\u0442 ''\u041c\u043e\u0439 URL...'' \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 ''\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b''.\n\n\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432 \u0442\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435:\n\n <nowiki>https://url1.com|https://url2.com|https://url3.com</nowiki>\n\n=== \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0431\u043e\u043a \u043e \u0431\u043e\u043a \u0432 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a\u0435 PDF ===\n\n\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0449\u0438\u043a PDF \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b \u043f\u043e \u0434\u0432\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0439, \u0437\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|pdfjs.spreadModeOnLoad}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|1}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}}.\n\n=== \u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043e\u0441\u043a\u0430 ===\n\nFirefox \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u043a\u0438\u043e\u0441\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0431\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0445 \u043c\u0435\u043d\u044e \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u043b\u044f \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u0441\u0442\u043e\u043b\u0435. \u0422\u0430\u043a\u043e\u0439 \u0440\u0435\u0436\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430 \u0431\u0430\u043d\u043a\u043e\u043c\u0430\u0442\u0430\u0445 \u0438\u043b\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0430\u043d\u0435\u043b\u044f\u0445, \u0433\u0434\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u044b.\n\n\u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043a\u0438\u043e\u0441\u043a\u0430, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Firefox \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438:\n\n $ firefox --kiosk ''url''\n\n\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u043d\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438.\n\n\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043f\u0435\u0447\u0430\u0442\u044c, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c Firefox \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0435 \u043e\u043a\u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0431\u0443\u043c\u0430\u0433\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430:\n\n $ firefox --kiosk --kiosk-printing ''url''\n\n=== \u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c ===\n\n\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Firefox 89, \u043e\u043f\u0446\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u0431\u044b\u043b\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0430 \u0438\u0437 \u043f\u0430\u043d\u0435\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 [https://support.mozilla.org/en-US/kb/compact-mode-workaround-firefox], \u043d\u043e \u0432\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 {{ic|browser.uidensity}} \u043d\u0430 {{ic|1}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}}.\n\n== \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c ==\n\n=== \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c ===\n\n\u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 {{ic|-safe-mode}} \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 Firefox \u0432 [https://support.mozilla.org/ru/kb/diagnostika-problem-firefox-s-pomoshyu-bezopasnogo \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435], \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u0442\u0435\u043c\u044b, \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435, JIT \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0435\u0430\u043d\u0441\u0430.\n\n\u042d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u043c Firefox, \u043d\u0430\u0436\u0430\u0432 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e, \u0432\u044b\u0431\u0440\u0430\u0432 ''\u0421\u043f\u0440\u0430\u0432\u043a\u0430 > \u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c'' \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0432 \u044d\u0442\u043e \u0432 \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u043c \u0434\u0438\u0430\u043b\u043e\u0433\u0435. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.\n\n=== \u041e\u0447\u0438\u0441\u0442\u043a\u0430 Firefox ===\n\n\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 Firefox, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d\u044b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0441 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0433\u043e \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435\u043c.\n\n\u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c Firefox \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0446\u0435\u043b\u044f\u0445, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c, \u0440\u0435\u0448\u0438\u0442 \u043b\u0438 \u044d\u0442\u043e \u0432\u0430\u0448\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c\u0438, \u0435\u0441\u0442\u044c \u043d\u0430 [https://support.mozilla.org/ru/kb/menedzher-profilej-sozdanie-udalenie-i-pereklyuche \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 Firefox].\n\n\u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0440\u0435\u0448\u0438\u0442 \u0432\u0430\u0448\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u0442\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0444\u0438\u043b\u044e \u0438 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e.\n\n\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0441\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a, \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438, \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0435\u0431-\u0444\u043e\u0440\u043c, \u0444\u0430\u0439\u043b\u044b cookie, \u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0438 \u043f\u0430\u0440\u043e\u043b\u0438 \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u0442 \u0438\u0445 \u0432 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439, \u0442\u0435\u043c, \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0420\u0435\u0437\u0435\u0440\u0432\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430.\n\n\u0427\u0442\u043e\u0431\u044b \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 {{ic|about:support}}, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 ''\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c Firefox'' \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u044d\u0442\u043e \u0432 \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0435\u043c\u0441\u044f \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u043c \u0434\u0438\u0430\u043b\u043e\u0433\u0435. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c {{ic|about:support}} \u0447\u0435\u0440\u0435\u0437 \u043a\u043d\u043e\u043f\u043a\u0443 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e, \u0432\u044b\u0431\u0440\u0430\u0432 \u043f\u0443\u043d\u043a\u0442 ''\u0421\u043f\u0440\u0430\u0432\u043a\u0430 > \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c''.\n\n\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u043e\u0447\u0438\u0441\u0442\u043a\u0435 Firefox, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0432 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c, \u0435\u0441\u0442\u044c \u043d\u0430 [https://support.mozilla.org/ru/kb/sbros-firefox-lyogkoe-reshenie-bolshinstva-problem \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 Firefox].\n\n=== \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435\u043c \u0432\u0438\u0434\u0435\u043e ===\n\n\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435\u043c \u0432\u0438\u0434\u0435\u043e \u0432 Firefox, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u043b\u0438 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Firefox \u0432 [[#\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c|\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435]] \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u043c. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0440\u0435\u0448\u0438\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 {{ic|media.ffmpeg.vaapi.enabled}} \u0432 {{ic|false}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}}, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0435\u043e, \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Firefox.\n\n=== \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u043e\u043c\u0435\u043d\u0430\u0445 Mozilla ===\n\n\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u044e\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c {{ic|extensions.webextensions.restrictedDomains}}. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043e\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u0443\u0441\u0442\u044b\u043c (\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, {{ic|about:*}}, \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b).\n\u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 {{ic|privacy.resistFingerprinting.block_mozAddonManager}} \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c {{ic|true}}.\n\n=== \u0417\u0430\u043f\u0443\u0441\u043a Firefox \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 ===\n\nFirefox \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b, \u0435\u0441\u043b\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 {{ic|/etc/hosts}} \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 localhost. \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b [[\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0441\u0435\u0442\u0438#\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u043c\u0451\u043d \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438]] \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435.\n\n\u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f Firefox \u0438\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432 [[#\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c|\u0411\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435]], \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f.\n\n\u0415\u0449\u0451 \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043f\u0440\u043e\u0444\u0438\u043b\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0433\u043e \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c [[#\u041e\u0447\u0438\u0441\u0442\u043a\u0430 Firefox]].\n\n=== \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 ===\n\n\u0421\u043c. [[\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0448\u0440\u0438\u0444\u0442\u043e\u0432]].\n\nFirefox \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043c\u0435\u043d \u0438\u0437 fontconfig. \u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|gfx.font_rendering.fontconfig.max_generic_substitutions}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|127}} (\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e), \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0437\u0430\u043c\u0435\u043d\u044b.\n\nFirefox \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e \u0448\u0440\u0438\u0444\u0442\u043e\u043c ''Twemoji Mozilla''. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 emoji, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|font.name-list.emoji}} \u043d\u0430 {{ic|emoji}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}}. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0448\u0440\u0438\u0444\u0442 Mozilla \u043d\u0435 \u043c\u0435\u0448\u0430\u043b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0448\u0440\u0438\u0444\u0442\u0443 emoji, \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 {{ic|gfx.font_rendering.opentype_svg.enabled}} \u043d\u0430 {{ic|false}} \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u0435 {{ic|/usr/lib/firefox/fonts/TwemojiMozilla.ttf}} (\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 [[pacman (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)#\u0417\u0430\u043f\u0440\u0435\u0442 \u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0444\u0430\u0439\u043b\u043e\u0432]]).\n\n=== \u0412\u044b\u0431\u043e\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b ===\n\n\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e Firefox \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 {{ic|mailto}} \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0442\u0430\u043a\u0438\u043c \u043a\u0430\u043a Gmail \u0438\u043b\u0438 Yahoo Mail. \u0427\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043b\u0438\u0435\u043d\u0442, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 ''\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 > \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 > \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f'' \u0438 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 ''\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435'' \u0434\u043b\u044f {{ic|mailto}} \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, {{ic|/usr/bin/kmail}} \u0434\u043b\u044f KMail).\n\n\u0412\u043d\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0441\u0441\u044b\u043b\u043a\u0438 {{ic|mailto}} \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f MIME-\u0442\u0438\u043f\u043e\u043c {{ic|x-scheme-handler/mailto}}, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e [[XDG MIME Applications (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|xdg-mime]]. \u0421\u043c. \u0441\u0442\u0430\u0442\u044c\u044e [[\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e]] \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.\n\n=== \u0410\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 ===\n\n\u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 [[\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e]].\n\n=== Firefox \u0441\u0430\u043c\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e ~/Desktop ===\n\nFirefox \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e {{ic|~/Desktop}} \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 {{ic|XDG_DESKTOP_DIR}}, \u043a\u0430\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 [[XDG user directories (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)]], \u0447\u0442\u043e\u0431\u044b \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e.\n\n=== \u041d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 userChrome.css \u0438 userContent.css ===\n\n\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|toolkit.legacyUserProfileCustomizations.stylesheets}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|true}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}}\n\n=== \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u043c\u044b\u0448\u0438 ===\n\n\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|middlemouse.contentLoadURL}} \u0438\u043b\u0438 {{ic|middlemouse.paste}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|true}} \u0432 {{ic|about:config}}, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u043c\u044b\u0448\u0438 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u043e\u0431\u043c\u0435\u043d\u0430, \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0432 UNIX-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445. \u041e\u043f\u0446\u0438\u044f {{ic|middlemouse.contentLoadURL}} \u0431\u044b\u043b\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043e Firefox 57.\n\n\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|general.autoScroll}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|true}}, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u043c\u044b\u0448\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 (\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432 \u0432 Windows).\n\n=== \u041a\u043b\u0430\u0432\u0438\u0448\u0430 Backspace \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \"\u041d\u0430\u0437\u0430\u0434\" ===\n\n\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e [http://kb.mozillazine.org/Browser.backspace_action MozillaZine], \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 {{ic|Backspace}} \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u041e\u0421, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u0430 \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0436\u0430\u0442\u0438\u0435 {{ic|Backspace}} \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e/\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438\u043b\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u0432\u0435\u0440\u0445/\u0432\u043d\u0438\u0437.\n\n\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|browser.backspace_action}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|0}} \u0432 {{ic|about:config}}, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c {{ic|Backspace}} \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043d\u0430\u0437\u0430\u0434 \u0438 {{ic|Shift+Backspace}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u043f\u0435\u0440\u0451\u0434 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0432\u043a\u043b\u0430\u0434\u043a\u0438.\n\n\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|browser.backspace_action}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|1}}, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0443 {{ic|Backspace}} \u0434\u043b\u044f \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u0432\u0435\u0440\u0445 \u0438 {{ic|Shift+Backspace}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u043d\u0438\u0437. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043a\u0430\u043a\u0438\u043c\u0438-\u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f (\u0432 Arch Linux \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f {{ic|2}}, \u0442.\u0435. \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043e).\n\n=== Firefox \u043d\u0435 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 ===\n\n\u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u043f\u043e\u0432\u0440\u0435\u0436\u0434\u0451\u043d\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c {{ic|cookies.sqlite}} \u0432 [https://support.mozilla.org/ru/kb/profili-gde-firefox-hranit-polzovatelskie-dannye \u043f\u0440\u043e\u0444\u0438\u043b\u0435 Firefox]. \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0439\u0442\u0435 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u0435 {{ic|cookie.sqlite}}, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0432 Firefox, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.\n\n\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:\n\n $ rm -f ~/.mozilla/firefox/<id \u043f\u0440\u043e\u0444\u0438\u043b\u044f>.default/cookies.sqlite\n\nID \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u2014 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u0437 8 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.\n\n\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 Firefox \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u043b\u0438 \u044d\u0442\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.\n\n\u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u043e, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0444\u0430\u0439\u043b {{ic|cookies.sqlite.bak}}, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f cookies \u0432\u0440\u0443\u0447\u043d\u0443\u044e.\n\n=== \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0439\u0442\u0438 \u0432 \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0438\u043b\u0438 \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u043d\u0435\u0433\u043e ===\n\n\u0415\u0441\u043b\u0438 Firefox \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u043a\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 [https://specifications.freedesktop.org/wm-spec/wm-spec-latest.html EWMH/ICCCM], Firefox \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u043c\u0443 \u043e\u043a\u043d\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 WM_STATE \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043d\u0430 \u0432\u0445\u043e\u0434 \u0432 \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0438\u043b\u0438 \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u043d\u0435\u0433\u043e (\u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043e\u043a\u043e\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430). \u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043a\u043e\u043d\u043d\u044b\u043c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u043c \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043d\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 Firefox \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u044b\u043b \u043e\u0442\u043a\u043b\u043e\u043d\u0451\u043d \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0435\u0433\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e, \u0447\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u043a\u0430\u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u0435\u0448\u0430\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044e \u0432\u0438\u0434\u0435\u043e \u0432 \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0434\u0430\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|full-screen-api.ignore-widgets}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f {{ic|true}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}}.\n\n\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043e\u0442\u0447\u0451\u0442 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435: [https://bugzilla.mozilla.org/show_bug.cgi?id=1189622 Bugzilla 1189622].\n\n=== \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e JavaScript \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0430\u0439\u0442\u0430\u0445 ===\n\n\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|dom.w3c_touch_events.enabled}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|0}} \u0432 {{ic|about:config}}.\n\n=== Firefox \u043d\u0435 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e ===\n\n\u042f\u0437\u044b\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:\n\n# \u0412\u0432\u0435\u0434\u0438\u0442\u0435 {{ic|about:config}} \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435.\n# \u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|spellchecker.dictionary}} \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u044f\u0437\u044b\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, {{ic|en_GB}}.\n# \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u043c\u0438, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 Firefox, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c {{ic|en-GB}}, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u043c\u0438 {{Pkg|hunspell}} \u2014 {{ic|en_GB}}.\n\nFirefox \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u044f\u0437\u044b\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0435\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430\u0440\u0438 {{Pkg|hunspell}}. \u042d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e [https://addons.mozilla.org/firefox/language-tools/ \u0441\u043b\u043e\u0432\u0430\u0440\u044f] \u0432 \u0432\u0438\u0434\u0435 Firefox-\u043f\u043b\u0430\u0433\u0438\u043d\u0430. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 ''\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0442\u0435\u043c\u044b'' \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432\u043a\u043b\u0430\u0434\u043a\u0430 ''\u0421\u043b\u043e\u0432\u0430\u0440\u0438''. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432 {{ic|about:preferences#general}}, \u0447\u0442\u043e\u0431\u044b \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u044f\u0437\u044b\u043a\u0443 \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0438\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.\n\n\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043d\u0430 '''StackExchange''': [https://stackoverflow.com/questions/26936792/change-firefox-spell-check-default-language/29446115], [https://stackoverflow.com/questions/21542515/change-default-language-on-firefox/29446353], [https://askubuntu.com/questions/184300/how-can-i-change-firefoxs-default-dictionary/576877]\n\n\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0442\u0447\u0451\u0442\u044b \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445: [https://bugzilla.mozilla.org/show_bug.cgi?id=776028 Bugzilla 776028], [https://bugs.launchpad.net/ubuntu/+source/firefox/+bug/1026869 Ubuntu bug 1026869]\n\n=== \u041d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b MathML ===\n\n\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0448\u0440\u0438\u0444\u0442\u044b Latin Modern Math \u0438 STIX (\u0441\u043c. \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 MDN: [https://developer.mozilla.org/en-US/docs/Mozilla/MathML_Project/Fonts#Linux]) \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f MathML.\n\n\u0412 Arch Linux \u0434\u0430\u043d\u043d\u044b\u0435 \u0448\u0440\u0438\u0444\u0442\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 {{Pkg|texlive-core}}{{Broken package link (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|replaced by {{Pkg|texlive-basic}}}} '''\u0438''' {{Pkg|texlive-fontsextra}}, \u043d\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b fontconfig \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0421\u043c. [[TeX Live#Making fonts available to Fontconfig]] \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 [[Fonts#Math|\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0448\u0440\u0438\u0444\u0442\u044b]].\n\u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u044d\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 [https://bugzilla.mozilla.org/show_bug.cgi?id=1208776], \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 {{Pkg|otf-latinmodern-math}}.\n\n=== \u0412\u0438\u0434\u0435\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u043d\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f ===\n\n\u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 [[PulseAudio (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|PulseAudio]]. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434 {{ic|pulseaudio --kill}} \u0438 {{ic|pulseaudio --start}} \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 [[PipeWire (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|PipeWire]].\n\n=== \u0420\u0430\u0437\u0440\u044b\u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u043d\u0433\u0430 ===\n\n\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u0432\u043d\u0443\u044e \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0443 \u0432 ''\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 > \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u0430\u0439\u0442\u043e\u0432''.\n\n=== WebRTC-\u043c\u043e\u0434\u0443\u043b\u044c Firefox \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d ===\n\nWebRTC-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, [https://mozilla.github.io/webrtc-landing/gum_test.html \u0442\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 Firefox WebRTC getUserMedia], \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0442, \u0447\u0442\u043e \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u0441 ALSA, \u0442\u0430\u043a \u0438 \u0441 PulseAudio, \u0430 \u043b\u043e\u0433\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 Firefox \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443:\n\n{{hc|1=$ NSPR_LOG_MODULES=MediaManager:5,GetUserMedia:5 firefox|2=\n...\n[Unnamed thread 0x7fd7c0654340]: D/GetUserMedia  VoEHardware:GetRecordingDeviceName: Failed 1\n}}\n\n\u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|media.navigator.audio.full_duplex}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|false}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}} \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Firefox.\n\n\u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 Firefox \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u044d\u0445\u043e\u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 [[PulseAudio (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)#\u041f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0445\u043e \u0438 \u0448\u0443\u043c\u0430 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430|module-echo-cancel]] \u0432 PulseAudio.\n\n=== \u0418\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 WebRTC \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 XML ===\n\n\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u044f \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u0444\u043e\u043d\u0430 \u0438\u043b\u0438 \u0432\u0435\u0431-\u043a\u0430\u043c\u0435\u0440\u044b \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043e\u043a\u043d\u043e \u0441 \u0437\u0430\u0433\u043e\u0440\u0435\u043b\u044b\u043c \u0444\u043e\u043d\u043e\u043c \u0438 \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0440\u0430\u043c\u043a\u043e\u0439 \u0432 \u043b\u0435\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u0432\u0430\u0448\u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435:\n\n XML Parsing Error: no root element found\n Location: chrome://browser/content/webrtcLegacyIndicator.xhtml\n Line Number: 1, Column 1:\n ^\n\n\u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443:\n\n# \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 {{ic|about:support}}.\n# \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 ''\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043a\u044d\u0448 \u0437\u0430\u043f\u0443\u0441\u043a\u0430'' \u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440.\n\n\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 [https://bugzilla.mozilla.org/show_bug.cgi?id=1639821 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435].\n\n=== \u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u043c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u043c ===\n\nFirefox \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439, \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439, \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e. Firefox, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u043a\u0435\u0442\u0430 {{Pkg|firefox}}, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432, \u0430 \u0434\u043b\u044f \u0435\u0451 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0443\u044e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0439 \u0441 [http://mozilla.com.cn/thread-343905-1-1.html \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b], \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u0438\u0439 \u0430\u043a\u043a\u0430\u0443\u043d\u0442.\n\n=== \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0438\u0434\u0435\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0431\u0435\u0437 \u0437\u0432\u0443\u043a\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 JACK \u0438 PulseAudio ===\n\n\u0415\u0441\u043b\u0438 JACK \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 PulseAudio \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0438\u0434\u0435\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0431\u0435\u0437 \u0437\u0432\u0443\u043a\u0430, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u0438\u0434\u0435\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u043e\u043d\u043e\u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0432\u0443\u043a. \u0412 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u044d\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 JACK \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u043e\u0431\u044a\u0451\u043c\u043d\u044b\u0439 \u0437\u0432\u0443\u043a, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0438. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u0440\u0442 {{ic|front-center}} \u0438\u0437 PulseAudio JACK Sink \u043a \u043f\u043e\u0440\u0442\u0430\u043c {{ic|playback_1}} \u0438 {{ic|playback_2}} \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430.\n\n\u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430:\n\n{{hc|jack-mono.sh\n|2=#!/bin/sh\njack_connect \"PulseAudio JACK Sink:front-center\" \"system:playback_1\"\njack_connect \"PulseAudio JACK Sink:front-center\" \"system:playback_2\"\n}}\n\n\u0418\u043c\u0435\u0439\u0442\u0435 \u0432\u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f PulseAudio JACK Sink \u0438 \u043f\u043e\u0440\u0442\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 JACK \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u0442\u0447-\u043f\u0430\u043d\u0435\u043b\u0438, \u043a\u0430\u043a Catia \u0438\u0437 {{AUR|cadence}}.\n\n=== \u041d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u044f ===\n\n\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0432 Google \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043b\u0443\u0436\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f Arch Linux, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0433\u0435\u043e\u043b\u043e\u043a\u0430\u0446\u0438\u044e: \"{{ic|Geolocation error: Unknown error acquiring position}}\".\n\u0421\u0435\u0440\u0432\u0438\u0441\u044b \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u0440\u0435\u0433\u0438\u043e\u043d\u0443, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a [https://www.hulu.com/ Hulu], \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u0432\u0430\u0448\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043b\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u0430.\n\n\u0412\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c [https://location.services.mozilla.com/ Mozilla Location Service]. \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 {{ic|geo.provider.network.url}} \u0432 {{ic|about:config}} \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:\n\n <nowiki>https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%</nowiki>\n\n\u0421\u043c. {{Bug|65241}} \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.\n\n=== \u041f\u0440\u0430\u0432\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430 \u043c\u044b\u0448\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u043c\u0435\u043d\u044e ===\n\n\u0414\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 [[i3 (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|i3]], [[bspwm (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|bspwm]] \u0438 [[xmonad (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|xmonad]].\n\n\u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 {{ic|about:config}} \u0438 \u0437\u0430\u0434\u0430\u0439\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|true}} \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|ui.context_menus.after_mouseup}}.\n\n\u0421\u043c. [https://www.reddit.com/r/i3wm/comments/88k0yt/right_mouse_btn_instantly_clicks_first_option_in/] (\u0430\u043d\u0433\u043b.) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.\n\n=== \u041e\u043a\u043d\u043e Firefox \u043d\u0435 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u0438\u043d\u0433\u0430 ===\n\n\u0423\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f {{ic|MOZ_X11_EGL}}.\n\n\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435: [https://bugzilla.mozilla.org/show_bug.cgi?id=1711039 Bugzilla 1711039].\n\n=== Firefox \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0440\u043e\u0441\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 ===\n\n\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432: \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 [[Desktop environment (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|\u0441\u0440\u0435\u0434\u0443 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430]], \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0432\u044b\u0431\u0440\u0430\u043d \u043b\u0438 Firefox \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0435\u0433\u043e, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 {{man|1|xdg-settings}} \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 [[xdg-utils (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|xdg-utils]], \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u0432\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435:\n\n $ xdg-settings get default-web-browser\n\n\u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 Firefox, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u044d\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0435\u0433\u043e:\n\n $ xdg-settings set default-web-browser firefox.desktop\n\n\u0415\u0441\u043b\u0438 Firefox \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u0440\u043e\u0441\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0442\u043e \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u0445\u0435\u043c URL ''http'' \u0438 ''https''. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b {{man|1|xdg-mime}}:\n\n $ xdg-mime default firefox.desktop x-scheme-handler/http\n $ xdg-mime default firefox.desktop x-scheme-handler/https\n\n\u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u043b\u0438 \u0443 \u0432\u0430\u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f {{ic|GTK_USE_PORTAL}} (\u043b\u044e\u0431\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043f\u0440\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u043e\u0448\u0438\u0431\u043a\u0438), \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0431\u0435\u0440\u0438\u0442\u0435 \u0435\u0451. \u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435: [https://bugzilla.mozilla.org/show_bug.cgi?id=1516290 Bugzilla 1516290]. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u0438\u043b\u0438 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u043b\u043e, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 {{ic|about:config}}, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0438\u043c\u0435\u0435\u0442 \u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 {{ic|widget.use-xdg-desktop-portal}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|true}} \u0438, \u0435\u0441\u043b\u0438 \u0434\u0430, \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u043d\u0430 {{ic|false}}.\n\n\u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}} \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 {{ic|browser.shell.checkDefaultBrowser}} \u0432 {{ic|false}}.\n\n=== \u0412\u0438\u0434\u0435\u043e \u0434\u0451\u0440\u0433\u0430\u0435\u0442\u0441\u044f ===\n\n\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0434\u0451\u0440\u0433\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u0438\u043a\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u0432\u0438\u0434\u0435\u043e \u0438 \u0432\u044b \u0437\u0430\u043c\u0435\u0447\u0430\u0435\u0442\u0435, \u0447\u0442\u043e Firefox \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u044f\u0434\u0440\u043e \u043d\u0430 100% \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u0432\u0438\u0434\u0435\u043e (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0438\u0434\u0435\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f), \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u043f\u043e\u043c\u043e\u0447\u044c.\n\n\u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}} \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0432 \u043f\u043e\u0438\u0441\u043a {{ic|dom.ipc.processCount}} \u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0435 {{ic|dom.ipc.processCount.file}} \u0441 1 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0447\u0438\u0441\u043b\u043e. \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0435\u0434\u0438\u043d\u0438\u0446\u0435 \u0437\u0430 \u0440\u0430\u0437 \u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u043d\u043e 4 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c.\n\n=== \u0411\u0435\u043d\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0439 \u0448\u0440\u0438\u0444\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 ===\n\n\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 {{Pkg|noto-fonts}} \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 ''Noto Sans Bengali'' \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 ''\u0428\u0440\u0438\u0444\u0442\u044b'' \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u044f\u0445 \u0441 \u0431\u0435\u043d\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u043c\u0438 \u0448\u0440\u0438\u0444\u0442\u0430\u043c\u0438 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 Mozilla \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0441\u0435 \u0448\u0440\u0438\u0444\u0442\u044b, \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e [https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Open_the_Inspector \u0418\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440\u0430] \u043d\u0430\u0439\u0434\u0438\u0442\u0435 [https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Edit_fonts#all_fonts_on_page \u0432\u0441\u0435 \u0448\u0440\u0438\u0444\u0442\u044b], \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0448\u0440\u0438\u0444\u0442\u043e\u0432, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0442 ''Noto Sans'', \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0435\u0448\u0438\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443.\n\n\u0415\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0448\u0440\u0438\u0444\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, {{Pkg|chromium}} \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 {{Pkg|ttf-liberation}} \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b Firefox \u0438 \u043b\u043e\u043c\u0430\u0435\u0442 \u0431\u0435\u043d\u0433\u0430\u043b\u044c\u0441\u043a\u0438\u0435 \u0448\u0440\u0438\u0444\u0442\u044b \u043d\u0430 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432 [[Font configuration (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0448\u0440\u0438\u0444\u0442\u043e\u0432]]:\n\n{{hc|$XDG_CONFIG_HOME/fontconfig/fonts.conf|2=\n<match target=\"pattern\">\n <test qual=\"any\" name=\"family\"><string>Liberation</string></test>\n <edit mode=\"assign\" name=\"family\" binding=\"same\"><string>Noto Sans Bengali</string></edit>\n</match>\n}}\n\n=== Web Speech API \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0433\u043e\u043b\u043e\u0441\u043e\u0432 ===\n\n\u0414\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u0440\u0435\u0447\u044c (tts) Firefox \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 speechd. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 {{ic|spd-say \"''\u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0435\u043a\u0441\u0442''\"}} \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0447\u0438\u0442\u0430\u0435\u0442 \u043b\u0438 \u043e\u043d \u0442\u0435\u043a\u0441\u0442, \u0438\u043b\u0438 {{ic|spd-say -L}}, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u043e\u043b\u043e\u0441\u043e\u0432. \u0415\u0441\u043b\u0438 \u0433\u043e\u043b\u043e\u0441\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u043a\u0435\u0442\u0430 {{Pkg|espeak-ng}}. \u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0438\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 {{ic|spd-conf}} \u0438\u043b\u0438 \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a {{ic|.config/speech-dispatcher/speechd.conf}}. \u0422\u0430\u043c \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 (\u0431\u0435\u0437 # \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c\u0438):\n\n AddModule \"espeak-ng\"                \"sd_espeak-ng\" \"espeak-ng.conf\"\n DefaultModule espeak-ng\n\n=== \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u043e\u043a \"\u041f\u0440\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c\" \u0432 \u0412\u0438\u0434\u0435 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f ===\n\n==== \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0441\u0438\u043d\u0442\u0435\u0437 \u0440\u0435\u0447\u0438 ====\n\n\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e https://developer.mozilla.org/ru/docs/Web/API/Web_Speech_API/Using_the_Web_Speech_API, \u0441\u0438\u043d\u0442\u0435\u0437 \u0440\u0435\u0447\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0435\u043d). \u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 {{ic|media.webspeech.synth.enabled}} \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|true}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}}.\n\n==== \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442\u0438\u043d\u0433\u0430 ====\n\n\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e https://support.mozilla.org/ru/kb/zashita-firefox-ot-sborshikov-cifrovyh-otpechatkov, \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u044b\u0445 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043a\u043e\u0432 (\u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442\u0438\u043d\u0433\u0430) \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 WebSpeech API. \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u044d\u0442\u0443 \u043e\u043f\u0446\u0438\u044e, \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0451, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e. \u0414\u043b\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u0437\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 {{ic|privacy.resistFingerprinting}} \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {{ic|false}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}}.\n\n==== \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e \u0433\u043e\u043b\u043e\u0441\u043e\u0432 ====\n\n\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u043e\u043a \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c {{ic|narrate.filter-voices}} \u043d\u0430 {{ic|false}} \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 {{ic|about:config}}.\n\n\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 {{ic|speech-dispatcher}} \u0432\u043e\u043e\u0431\u0449\u0435. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432\u0430\u043c \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0433\u043e\u043b\u043e\u0441\u043e\u0432 \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430 \u0441\u0442\u0430\u0442\u044c\u0438, \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0432 \u0412\u0438\u0434\u0435 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f (\u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 {{ic|spd-say -L}}). \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0433\u043e\u043b\u043e\u0441\u0430 \u0434\u043b\u044f \u044f\u0437\u044b\u043a\u0430 \u0441\u0442\u0430\u0442\u044c\u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 {{ic|speech-dispatcher}}.\n\n=== \u041f\u0440\u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0435\u0441\u0442\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f ===\n\n\u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0435\u0441\u0442\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u043e\u043f\u0446\u0438\u0438 ''\u0412\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432'' \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 Firefox, \u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0443 \u0432\u0430\u0441 \u043d\u0435\u0442 \u043d\u0438 {{Pkg|xdg-desktop-portal}}, \u043d\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041e\u0431\u044b\u0447\u043d\u043e \u0441\u0440\u0435\u0434\u044b \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043e\u043a\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440, \u0442\u0430\u043a\u043e\u0439 \u043a\u0430\u043a [[i3 (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)|i3]], \u0442\u043e \u0432\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e. [[\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435]] \u043f\u0430\u043a\u0435\u0442\u044b {{Pkg|xdg-desktop-portal}} \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, {{Pkg|xdg-desktop-portal-gtk}}.\n\n== \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 ==\n\n* [https://www.mozilla.org/ru/firefox/ \u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442]\n* [https://www.mozilla.org/ru/ Mozilla Foundation]\n* [[MozillaWiki:Firefox]]\n* [[Wikipedia:ru:Mozilla Firefox]]\n* [https://addons.mozilla.org/firefox/ \u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f Firefox]\n* [https://addons.mozilla.org/firefox/themes/ \u0422\u0435\u043c\u044b \u0434\u043b\u044f Firefox]\n* [https://ftp.mozilla.org/pub/firefox/releases/ FTP Mozilla]\n* [http://forums.mozillazine.org/ mozillaZine] \u2014 \u043d\u0435\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u043e\u0440\u0443\u043c"
                    }
                ]
            },
            "13565": {
                "pageid": 13565,
                "ns": 0,
                "title": "Picom",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "{{Lowercase title}}\n[[Category:X server]]\n[[Category:Eye candy]]\n[[de:Picom]]\n[[ja:Picom]]\n[[zh-hans:Picom]]\n[[ru:Picom]]\n[https://github.com/yshui/picom picom] is a standalone [[Xorg#Composite|compositor]] for [[Xorg]], suitable for use with [[window managers]] that do not provide compositing. picom is a fork of [https://github.com/chjj/compton/ compton], which is a fork of [https://web.archive.org/web/20150429182855/http://oliwer.net/xcompmgr-dana/ xcompmgr-dana], which in turn is a fork of [[xcompmgr]].\n\n== Installation ==\n\n[[Install]] the {{Pkg|picom}} package or {{AUR|picom-git}} for the development version. \n\n== Configuration ==\n\nThe default configuration is available in {{ic|/etc/xdg/picom.conf}}. For modifications, it can be copied to {{ic|~/.config/picom/picom.conf}} or {{ic|~/.config/picom.conf}}.\n\nTo use another custom configuration file with picom, use the following command:\n\n $ picom --config ''path/to/''picom.conf\n\nSee {{man|1|picom|CONFIGURATION FILES}} for details.\n\n=== Disable shadows for some windows ===\n\nThe {{ic|shadow-exclude}} option can disable shadows for windows if required. For currently disabled windows, see [https://github.com/yshui/picom/blob/b66e5fd422820460f030db853109e4d50bb3549d/picom.sample.conf#L46].\n\nTo disable shadows for menus add the following to {{ic|wintypes}} in {{ic|picom.conf}}:\n\n # menu        = { shadow = false; };\n dropdown_menu = { shadow = false; };\n popup_menu    = { shadow = false; };\n utility       = { shadow = false; };\n\nThe other {{ic|WINDOW_TYPE}} values that can be used are defined in the EWMH standard: {{ic|unknown}}, {{ic|desktop}}, {{ic|dock}}, {{ic|toolbar}}, {{ic|menu}}, {{ic|utility}}, {{ic|splash}}, {{ic|dialog}}, {{ic|normal}}, {{ic|dropdown_menu}}, {{ic|popup_menu}}, {{ic|tooltip}}, {{ic|notification}}, {{ic|combo}}, and {{ic|dnd}}.\n\n=== Opacity ===\n\nTo set opacity (in effect transparency) for focused and unfocused windows (for example terminal emulators), add the following to your {{ic|picom.conf}}:\n\n opacity-rule = [\n   \"90:class_g = 'URxvt' && focused\",\n   \"60:class_g = 'URxvt' && !focused\"\n ];\n\nSee also [[#Tabbed windows (shadows and transparency)]].\n\n== Usage ==\n\npicom may be manually enabled or disabled at any time during a session, or autostarted as a background process for sessions. There are also several optional arguments that may be used to tweak the compositing effects provided. These include:\n\n* {{ic|-b}}: Run as a background process for a session (e.g. when [[autostarting]] for a window manager such as [[Openbox]])\n* {{ic|-c}}: Enable shadow effects \n* {{ic|-C}}: Disable shadow effects on panels and docks (deprecated, use [[#Disable shadows for some windows]])\n* {{ic|-G}}: Disable shadow effects for application windows and drag-and-drop objects (deprecated, use [[#Disable shadows for some windows]])\n* {{ic|--config}}: Use a specified configuration file\n\nMany more options are available, including setting timings, displays to be managed, the opacity of menus, window borders, and inactive application menus. See {{man|1|picom}}.\n\n{{Note|If a different [[composite manager]] is running, it should be disabled before starting ''picom''.}}\n\nTo manually enable default compositing effects during a session, use the following command:\n\n $ picom &\n\nTo autostart picom as a background process for a session, the {{ic|-b}} argument can be used (may cause a display freeze):\n\n $ picom -b\n\nHere is an example where additional arguments that require values to be set have been used:\n\n $ picom -cfF -o 0.38 -O 200 -I 200 -t 0 -l 0 -r 3 -D2 -m 0.88\n\n== Multihead ==\n\nIf a [[multihead]] configuration is used without xinerama - meaning that X server is started with more than one screen - then picom will start on only one screen by default. It can be started on all screens by using the {{ic|DISPLAY}} environment variable. For example, to run on X screen 0 in the background:\n\n  DISPLAY=\":0\" picom -b\n\nThe above should work on all monitors. If it does not then try an older method that manually specifies each display:\n\n seq 0 3 | xargs -l1 -I@ picom -b -d :0.@\n\n== Grayscale ==\n\nIt is possible to convert windows to grayscale by use of [https://learnopengl.com/Getting-started/Shaders shaders].\n\nAs per {{man|1|picom}}, start by editing the default shader from the [https://github.com/yshui/picom/blob/next/compton-default-fshader-win.glsl picom's sources].\n\n{{hc|''/path/to/shader/file.glsl''|2=\n#version 330\n\nin vec2 texcoord;\nuniform sampler2D tex;\nuniform float opacity;\n\nvec4 default_post_processing(vec4 c);\n\nvec4 window_shader() {\n\tvec2 texsize = textureSize(tex, 0);\n\tvec4 color = texture2D(tex, texcoord / texsize, 0);\n\n\tcolor = vec4(vec3(0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b) * opacity, color.a * opacity);\n\n\treturn default_post_processing(color);\n}\n}}\n\nThen start picom by including the file path to the shader. The {{ic|glx}} backend will also, probably, be necessary.\n\n $ picom --backend glx --window-shader-fg /path/to/shader/file.glsl\n\n== Troubleshooting ==\n\nRecent versions of picom had some problem with DRI2 acceleration and exhibited severe flickering when DRI2 is in use ([https://github.com/yshui/picom/issues/47 picom bug], [https://bugs.freedesktop.org/show_bug.cgi?id=108651 mesa bug]).  This has been worked around and reported to be working, but may still affect some users.  DRI3 is unaffected by this particular issue.\n\nThe use of compositing effects may on occasion cause issues such as visual glitches when not configured correctly for use with other applications and programs.\n\n=== Conky ===\n\nTo disable shadows around [[Conky]] windows, have the following in {{ic|~/.conkyrc}}:\n\n own_window_class conky\n\nIn the case this solution fail with blur effect, you can try this in {{ic|~/.conkyrc}}:\n\n own_window_type= 'desktop'\n\n=== dwm and dmenu ===\n\n[[dwm]]'s statusbar is not detected by any of picom's functions to automatically exclude window manager elements. Neither dwm statusbar nor [[dmenu]] have a static window id. If you want to exclude it from inactive window transparency (or other), you will have to either patch a window class into the source code of each, or exclude by less precise attributes. The following example is with dwm's status on top, which allows a resolution independent of location exclusion:\n\n $ picom <any other arguments> --focus-exclude \"x = 0 && y = 0 && override_redirect = true\"\n\nOtherwise, where using a configuration file:\n\n focus-exclude = \"x = 0 && y = 0 && override_redirect = true\";\n\nThe override redirect property seems to be false for most windows- having this in the exclusion rule prevents other windows drawn in the upper left corner from being excluded (for example, when dwm statusbar is hidden, x0 y0 will match whatever is in dwm's master stack).\n\n=== Firefox ===\n\nSee [[#Disable shadows for some windows]].\n\nTo disable shadows for [[Firefox]] elements add the following to shadow-exclude in {{ic|picom.conf}}:\n\n \"class_g = 'firefox' && argb\",\n\nSee [https://github.com/chjj/compton/issues/201#issuecomment-45288510] for more information.\n\n=== slock ===\n\nWhere inactive window transparency has been enabled (the {{ic|-i}} argument when running as a command), this may provide troublesome results when also using [[slock]]. One solution is to amend the transparency to {{ic|0.2}}. For example, where running picom arguments as a command:\n\n $ picom <any other arguments> -i 0.2\n\nOtherwise, where using a configuration file:\n\n inactive-dim = 0.2;\n\nAlternatively, you may try to exclude slock by its window id, or by excluding all windows with no name.\n\n{{Note|Some programs change their id for every new instance, but slock's appears to be static. Someone more knowledgeable will have to confirm that slock's id is in fact static- until then, use at your own risk.}}\n\nExclude all windows with no name from picom using the following options:\n\n $ picom <other arguments> --focus-exclude \"! name~=<nowiki>''</nowiki>\"\n\nFind your slock's window id by running the command:\n\n $ xwininfo & slock\n\nQuickly click anywhere on the screen (before slock exits), then type your password to unlock. You should see the window id in the output:\n\n xwininfo: Window id: 0x1800001 (has no name)\n\nTake the window id and exclude it from picom with:\n\n $ picom <any other arguments> --focus-exclude 'id = 0x1800001'\n\nOtherwise, where using a configuration file:\n\n focus-exclude = \"id = 0x1800001\";\n\n=== Flicker ===\n\nApplies to fully maximized windows (in sessions without any panels) with the default {{ic|picom.conf}} caused and resolved by the following option:\n\n unredir-if-possible = false;\n\nSee [https://github.com/chjj/compton/issues/402] for more information.\n\n=== Fullscreen tearing ===\n\nIf you observe screen tearing of video playback only in fullscreen, see [[#Flicker]].\n\n=== Lag when using xft fonts ===\n\nIf you experience heavy lag when using Xft fonts in applications such as [[xterm]] or [[urxvt]] try:\n\n --xrender-sync --xrender-sync-fence\n\nor the xrender backend.\n\nSee [https://github.com/chjj/compton/issues/152] for more information.\n\n=== Tabbed windows (shadows and transparency) ===\n\nWhen windows with transparency are tabbed, the underlying tabbed windows are still visible because of transparency. Each tabbed window also draws its own shadow resulting in multiple shadows.\n\nRemoving the multiple shadows issue can be done by adding the following to the already existing [https://github.com/yshui/picom/blob/248bffede73e520a4929dd7751667d29d4169d59/picom.sample.conf#L175-L181 shadow-exclude list]:\n\n \"_NET_WM_STATE@:32a *= '_NET_WM_STATE_HIDDEN'\"\n\nNot drawing underlying tabbed windows can be enabled by adding the following to your {{ic|picom.conf}}:\n\n opacity-rule = [\n   \"95:class_g = 'URxvt' && !_NET_WM_STATE@:32a\",\n   \"0:_NET_WM_STATE@[0]:32a *= '_NET_WM_STATE_HIDDEN'\",\n   \"0:_NET_WM_STATE@[1]:32a *= '_NET_WM_STATE_HIDDEN'\",\n   \"0:_NET_WM_STATE@[2]:32a *= '_NET_WM_STATE_HIDDEN'\",\n   \"0:_NET_WM_STATE@[3]:32a *= '_NET_WM_STATE_HIDDEN'\",\n   \"0:_NET_WM_STATE@[4]:32a *= '_NET_WM_STATE_HIDDEN'\"\n ];\n\nNote that {{ic|URxvt}} is the Xorg class name of your terminal. Change this if you use a different terminal. You can query a window's class by running the command {{ic|xprop WM_CLASS}} and clicking the window.\n\nSee [https://www.reddit.com/r/unixporn/comments/330zxl/webmi3_no_more_overlaying_shadows_and_windows_in/] for more information.\n\n{{Warning|With i3 and kitty as terminal, doing this will currently (as of 2020-08-31) freeze all hidden (tabbed) instances of kitty when you reload i3: [https://github.com/kovidgoyal/kitty/issues/1681] a possible fix is suggested for a similar issue at [[Intel graphics#DRI3 issues]]}}\n\n=== Unable to change the background color with xsetroot ===\n\nCurrently, picom is incompatible with {{ic|xsetroot}}'s {{ic|-solid}} option, a workaround is to use {{Pkg|hsetroot}} to set the background color:\n\n $ hsetroot -solid '#000000'\n\nSee [https://github.com/chjj/compton/issues/162] for more information.\n\n=== Screentearing with NVIDIA's proprietary drivers ===\n\nTry this setting in {{ic|picom.conf}}:\n\n vsync = true;\n\n=== Lag with NVIDIA proprietary drivers and FullCompositionPipeline ===\n\nTry running picom with:\n\n --backend xrender\n\nor add\n\n backend = \"xrender\";\n\nto your {{ic|picom.conf}} file.\n\nSee [https://github.com/chjj/compton/issues/208] for more information.\n\nAnother option to reduce lag with the glx backend is to disable \"allow flipping\" [https://github.com/yshui/picom/issues/620#issuecomment-869666038] in nvidia settings (OpenGL section). This can also be done from the command line:\n\n $ nvidia-settings -a 'AllowFlipping=0'\n\nTo load settings after reboot (see [[Autostarting]]) run\n\n $ nvidia-settings --load-config-only\n\n=== Xorg leaking GPU memory with NVIDIA proprietary drivers ===\n\nSee [[#Lag with NVIDIA proprietary drivers and FullCompositionPipeline]].\n\n=== Slock after suspend ===\n\nWhen using a systemd service to trigger slock on a suspend or hibernate action, one may find the screen unlocked for a few seconds after resume. To prevent, disable window fading:\n\n $ picom --no-fading-openclose\n\n=== Screen sharing ===\n\nA shadowed overlay on screen sharing and shadows of [[Zoom Meetings]] pop-up windows might be avoided by adding the following to {{ic|shadow-exclude}}.\n\n shadow-exclude = [\n   \"name = 'cpt_frame_xcb_window'\",\n   \"class_g ?= 'zoom'\",\n ];\n\nBlurred screen sharing is disabled by adding [[Zoom Meetings]] to {{ic|blur-background-exclude}} with\n\n blur-background-exclude = [\n   \"class_g ?= 'zoom'\",\n ];\n\nFor Microsoft Teams, the red border around the shared content is implemented with a mostly transparent window. Having blur enabled makes it impossible to work with and should be disabled as follows:\n\n shadow-exclude = [\n   \"name = 'rect-overlay'\",\n ];\n \n blur-background-exclude = [\n   \"name = 'rect-overlay'\",\n ];\n\n=== Disable window fade in and fade out effect when switching between workspaces ===\n\nAdding {{ic|1=--fade-in-step=1 --fade-out-step=1 --fade-delta=0}} flag can disable the fade in and fade out effect when switching to a new workspace. [https://github.com/yshui/picom/issues/354#issuecomment-835809210]\n\n== See also ==\n\n* [https://ubuntuforums.org/showthread.php?t=2144468&p=12644745#post12644745 Howto: Using Compton for tear-free compositing on XFCE or LXDE]"
                    }
                ]
            },
            "14702": {
                "pageid": 14702,
                "ns": 0,
                "title": "Firefox/Privacy",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Web browser]]\n[[ja:Firefox/\u30d7\u30e9\u30a4\u30d0\u30b7\u30fc]]\n{{Related articles start}}\n{{Related|Firefox}}\n{{Related|Tor}}\n{{Related|Browser extensions}}\n{{Related|Browser Plugins}}\n{{Related|Firefox/Tweaks}}\n{{Related|Firefox/Profile on RAM}}\n{{Related articles end}}\n\nThis article overviews how to configure Firefox to enhance security and privacy.\n\n== Configuration ==\n\nThe following are privacy-focused tweaks to prevent [https://www.amiunique.org/faq browser fingerprinting] and tracking.\n\n=== Tracking protection ===\n\nFirefox gained an option for [https://support.mozilla.org/en-US/kb/enhanced-tracking-protection-firefox-desktop Enhanced Tracking Protection]. It can be enabled in different levels via the GUI ''Settings > Privacy & Security'', or by setting {{ic|about:config}}:\n\n* {{ic|privacy.trackingprotection.enabled}} {{ic|true}}\n\nApart from privacy benefits, enabling [http://venturebeat.com/2015/05/24/firefoxs-optional-tracking-protection-reduces-load-time-for-top-news-sites-by-44/ tracking protection] may also reduce load time by 44%.\n\nNote that this is not a replacement for ad blocking extensions such as [[Browser extensions#Content blockers|uBlock Origin]] and it may or may not work with [[List of applications/Internet#Firefox spin-offs|Firefox forks]]. If you are already running such an ad blocker with the correct lists, tracking protection might be redundant.\n\n=== Anti-fingerprinting ===\n\nThe Firefox [[#Tracking protection|tracking protection]] blocks a list of known \"fingerprinters\" when your privacy settings are set to ''Standard'' (the default) or ''Strict''. Fingerprinting Protection is a different, experimental feature under heavy development in Firefox.\n\nMozilla has started an [[MozillaWiki:Security/Fingerprinting|anti-fingerprinting project in Firefox]], as part of a project to upstream features from [[Tor Browser]]. Many of these anti-fingerprinting features are enabled by this setting in the {{ic|about:config}}:\n\n* {{ic|privacy.resistFingerprinting}} {{ic|true}}\n\n{{Warning|1=<nowiki/>This is an experimental feature and can cause some website breakage, timezone is UTC0, and websites will prefer light theme. Please note that text-to-speech engine will be disabled ([https://bugzilla.mozilla.org/show_bug.cgi?id=1636707 bug #1636707]) and some favicons will be broken ([https://bugzilla.mozilla.org/show_bug.cgi?id=1452391#c5 bug #1452391]).}}\n\nFor more information see: [https://support.mozilla.org/en-US/kb/firefox-protection-against-fingerprinting Firefox's protection against fingerprinting].\n\n=== Change browser time zone ===\n\nThe time zone of your system can be used in browser fingerprinting. To set Firefox's time zone to UTC launch it as:\n\n $ TZ=UTC firefox\n\nOr, set a script to launch the above (for example, at {{ic|/usr/local/bin/firefox}}).\n\n=== Change user agent and platform ===\n\nYou can override Firefox's user agent with the {{ic|general.useragent.override}} preference in {{ic|about:config}}.\n\nThe value for the key is your browser's user agent. Select a known common one.\n\n{{Tip|\n* The value {{ic|Mozilla/5.0 (Windows NT 10.0; rv:102.0) Gecko/20100101 Firefox/102.0}} is used as the user agent for the Tor browser, thus being very common.\n* The [[#Anti-fingerprinting]] option also enables the Tor browser user agent and changes your browser platform automatically.\n}}\n\n{{Warning|Changing the user agent without changing to a corresponding platform will make your browser nearly unique.}}\n\nTo change the platform for firefox, add the following {{ic|string}} key in {{ic|about:config}}:\n\n general.platform.override\n\nSelect a known common platform that corresponds with your user agent.\n\n{{Tip|The value {{ic|Win32}} is used as the platform for the Tor browser, corresponding with the user agent provided above.}}\n\n=== WebRTC exposes LAN IP address ===\n\nTo prevent websites from getting your local IP address via [[wikipedia:WebRTC|WebRTC]]'s peer-to-peer (and JavaScript), open {{ic|about:config}} and set:\n\n* {{ic|media.peerconnection.ice.default_address_only}} to {{ic|true}}\n* {{ic|media.peerconnection.enabled}} to {{ic|false}}. (only if you want to completely disable WebRTC)\n\nYou can use this [https://net.ipcalf.com/ WebRTC test page] and [https://ipleak.net/ WebRTC IP Leak VPN / Tor IP Test] to confirm that your internal/external IP address is no longer leaked.\n\n=== Disable HTTP referer ===\n\n[[Wikipedia:HTTP referer|HTTP referer]] is an optional HTTP header field that identifies the address of the previous webpage from which a link to the currently requested page was followed.\n\nSet {{ic|network.http.sendRefererHeader}} to {{ic|0}} or {{ic|1}}, depending on your [[MozillaWiki:Security/Referrer|preferences]].\n\n{{Note|Some sites use the referer header to control origin conditions. Disabling this header completely may cause site breaking. In this case adjusting {{ic|network.http.referer.XOriginPolicy}} may provide a better solution.}}\n\n=== Disable connection tests ===\n\nBy default Firefox attempts to connect to Amazon and/or Akamai servers at [https://bugzilla.mozilla.org/show_bug.cgi?id=1363651 regular] [https://bugzilla.mozilla.org/show_bug.cgi?id=1359697#c3 intervals], to test your connection. For example a hotel, restaurant or other business might require you to enter a password to access the internet. If such a [[wikipedia:Captive_portal|Captive portal]] exists and is blocking traffic this feature blocks all other connection attempts. This may leak your usage habits.\n\nTo disable Captive Portal testing, in {{ic|about:config}} set:\n\n* {{ic|network.captive-portal-service.enabled}} to {{ic|false}}\n\n{{Note|A [https://www.ghacks.net/2020/02/19/why-is-firefox-establishing-connections-to-detectportal-firefox-com-on-start/ report states that] the [https://vpn.mozilla.org/ Mozilla VPN] is unable to connect when this is disabled.}}\n\n=== Disable telemetry ===\n\nSet {{ic|toolkit.telemetry.enabled}} to {{ic|false}} and/or disable it under ''Preferences > Privacy & Security > Firefox Data Collection and Use''.\n\n=== Enable \"Do Not Track\" header ===\n\nSet {{ic|privacy.donottrackheader.enabled}} to {{ic|true}} or toggle it in ''Preferences > Privacy & Security > Tracking Protection''\n\n{{Note|The remote server may choose to not honour the \"Do Not Track\" request.}}\n\n{{Warning|The \"Do Not Track\" header (DNT) may actually be used to fingerprint your browser, since most users leave the option disabled.}}\n\n=== Disable/enforce 'Trusted Recursive Resolver' ===\n\nFirefox 60 introduced a feature called [[mozillawiki:Trusted Recursive Resolver|Trusted Recursive Resolver]] (TRR). It circumvents DNS servers configured in your system, instead sending all DNS requests over HTTPS to Cloudflare servers. While this is significantly more secure (as \"classic\" DNS requests are sent in plain text over the network, and everyone along the way can snoop on these), this also makes all your DNS requests readable by Cloudflare, providing TRR servers.\n\n* If you trust DNS servers you have configured yourself more than Cloudflare's, you can disable TRR in {{ic|about:config}} by setting {{ic|network.trr.mode}} (integer, create it if it does not exist) to {{ic|5}}. (A value of 0 means disabled by default, and might be overridden by future updates - a value of 5 is disabled by choice and will not be overridden.)\n* If you trust Cloudflare DNS servers and would prefer extra privacy (thanks to encrypted DNS requests), you can enforce TRR by setting {{ic|network.trr.mode}} to {{ic|3}} (which completely disables classic DNS requests) or {{ic|2}} (uses TRR by default, falls back to classic DNS requests if that fails). Keep in mind that if you are using any intranet websites or trying to access computers in your local networks by their hostnames, enabling TRR may break name resolving in such cases.\n* If you want to encrypt your DNS requests but not use Cloudflare servers, you can point to a new DNS over HTTPS server by setting {{ic|network.trr.uri}} to your resolver URL. A list of currently available resolvers can be found in the [https://github.com/curl/curl/wiki/DNS-over-HTTPS#publicly-available-servers curl wiki], along with other configuration options for TRR.\n\n=== Encrypted Client Hello ===\n\nTo enable [https://blog.mozilla.org/security/2021/01/07/encrypted-client-hello-the-future-of-esni-in-firefox/ Encrypted Client Hello (ECH)] (formerly encrypted Server Name Indicator (eSNI)), so that nobody listening on the wire can see the server name you made a TLS connection to, set:\n\n* {{ic|network.dns.echconfig.enabled}} to {{ic|true}}\n* {{ic|network.dns.http3_echconfig.enabled}} to {{ic|true}}\n\nYou may also need to set {{ic|network.trr.mode}} to {{ic|2}} or {{ic|3}}.\n\n=== Disable geolocation ===\n\nSet {{ic|geo.enabled}} to {{ic|false}} in {{ic|about:config}}.\n\n{{Note|This may break websites that needs access to your location. One may want to simply allow location-access per site, instead of disabling this feature completely.}}\n\n=== Disable 'Safe Browsing' service ===\n\nSafe Browsing offers phishing protection and malware checks, however it may send user information (e.g. URL, file hashes, etc.) to third parties like Google.\n\nTo disable the Safe Browsing service, in {{ic|about:config}} set: \n\n* {{ic|browser.safebrowsing.malware.enabled}} to {{ic|false}}\n* {{ic|browser.safebrowsing.phishing.enabled}} to {{ic|false}}\n\nIn addition disable download checking, by setting {{ic|browser.safebrowsing.downloads.enabled}} to {{ic|false}}.\n\n=== Disable WebGL ===\n\nWebGL is a potential security risk.[https://security.stackexchange.com/questions/13799/is-webgl-a-security-concern] Set {{ic|webgl.disabled}} to {{ic|true}} in {{ic|about:config}} if you want to disable it.\n\n== Extensions ==\n\nSee [[Browser extensions#Privacy]].\n\n=== Disable WebAssembly (and JavaScript) ===\n\n[[wikipedia:Webassembly|WebAssembly]], also known as Wasm, is a relatively new language. Unlike JavaScript, Wasm executes ''pre-compiled code'' natively in browsers for high-performance simulations and applications. It has been criticized for hiding pathways for malware and [https://trac.torproject.org/projects/tor/ticket/21549 as with JavaScript, can be used to track users]. Tor Browser blocks both JavaScript and Wasm.\n\nSee ''NoScript'' in [[Browser extensions#Privacy]] to block JavaScript the way Tor Browser does, which enables quick access when needed.  To disable Wasm, in {{ic|about:config}} set:\n\n* {{ic|javascript.options.wasm}} to {{ic|false}}\n* {{ic|javascript.options.wasm_baselinejit}} to {{ic|false}}\n* {{ic|javascript.options.wasm_ionjit}} to {{ic|false}}\n\n=== Remove system-wide hidden extensions ===\n\nSome extensions are hidden and installed by default in {{ic|/usr/lib/firefox/browser/features}}. Many can be safely removed via {{ic|rm ''extension-name''.xpi}}. They might not be enabled by default and may have a menu option for enabling or disabling. Note that any files removed will return upon update of the {{pkg|firefox}} package. To keep these extensions removed, consider adding the directories to {{ic|1=NoExtract=}} in {{ic|pacman.conf}}, see [[Pacman#Skip files from being installed to system]]. Some extensions include:\n\n* {{ic|doh-rollout@mozilla.org.xpi}} - DoH Roll-Out (do not remove if you chose to use [[#Disable/enforce 'Trusted Recursive Resolver']] above).\n* {{ic|screenshots@mozilla.org.xpi}} - Firefox Screenshots.\n* {{ic|webcompat-reporter@mozilla.org.xpi}} - For reporting sites that are compromised in Firefox, so Mozilla can improve Firefox or patch the site dynamically using the {{ic|webcompat@mozilla.org.xpi}} extension.\n* All combined user and system extensions are listed in {{ic|about:support}}. See [https://dxr.mozilla.org/mozilla-release/source/browser/extensions/] for a full list of system extensions including README files describing their functions.\n\nFirefox installations to paths such as the default release installed to {{ic|/opt}} have system extensions installed at {{ic|/firefox/firefox/browser/features}}.\n\n== Web search over Searx ==\n\n{{Note|SearX is no longer maintained since September 2023. The active fork is [https://docs.searxng.org/ SearxNG].}}\n\nPrivacy can be boosted by reducing the amount of information you give to a single entity. For example, sending each new web search via a different, randomly selected proxy makes it near impossible for a single search engine to build a profile of you. We can do this using public instances (or sites) of [https://searx.me/ Searx]. Searx is an [https://github.com/searx/searx/blob/master/LICENSE AGPL-3.0], [https://github.com/searx/searx open-source] site-builder, that produces site, known as an 'instances'. Each public 'instance' can act as a middle-man between you and a myriad of different search engines. \n\nFrom [https://searx.space/ this list of public instances] and [https://searx.neocities.org/nojs.html others], bookmark as many Searx sites as you wish (if JavaScript is disabled you will need to enable it temporarily to load the list). For fast access to these bookmarks, consider adding {{ic|SX1}}, {{ic|SX2}} ... {{ic|SX(n)}} to the bookmark's ''Name'' field, with {{ic|(n)}} being the number of searx instances you bookmark.\n\nAfter this bookmarking, simply typing {{ic|sx}}, a number and {{ic|Enter}} in the URL bar will load an instance.\n\n{{Note|Update the above bookmarks from time to time or as instances become unreliable to reduce your online fingerprint.}}\n\n{{Tip|\n* If you have a web server and available bandwidth, consider running a public Searx instance to help others improve their privacy ([https://searx.github.io/searx/ more info]).\n* For increased privacy, use Searx instances with [[Tor Browser]], which uses onion-routing to provide a degree of anonymity.\n* You can improve your privacy further by running a private instance of Searx locally. [[Install]] the {{AUR|searx}} package and [[start]] {{ic|uwsgi@searx.service}}. Searx will be available on http://localhost:8888/.\n}}\n\nSee https://www.privacyguides.org/en/search-engines/ for other options.\n\n== Watch videos over Invidious ==\n\nInvidious instances act as an alternative front-end to YouTube. They are websites built from [https://github.com/iv-org/invidious open-source code]. It has typically been difficult to limit the amount of information a user sent to YouTube (Google) in order to access content.\n\nBenefits of using Invidious include:\n\n* Videos are accessible without running scripts. YouTube forces users to run scripts.\n* Videos can be saved for future viewing, or for viewing by others, including when offline. This reduces feedback sent to Google about when content is viewed or re-viewed.\n* An optional audio-only mode that reduces bandwidth usage. When combined with a browser like [[Tor]], using fewer data packets on a more lightweight website is likely to improve your anonymity.\n* Invidious is a free and open-source interface that makes setting up an independent, private, video-hosting service easier. As such there are website that exist that are using Invidious to serve their own content or content removed from YouTube. Therefore it may help limit the profile-building capabilities of YouTube into the future (see note).\n\nBookmark as many ''functioning'' invidious instances from the following lists as possible ([https://github.com/iv-org/invidious/wiki/Invidious-Instances here], [https://invidio.us/ here], [https://solmu.org/pub/misc/invidio.html here]{{Dead link|2024|01|13|status=404}}). Note that some of these instances may be hosted by Cloudflare.\n\nYou can change any YouTube video URL to an Invidious one by simply replacing the {{ic|youtube.com}} part with the domain of the instance you want to use.\n\n{{Note|Invidious does not index videos from Facebook or Cloudflare servers. Additionally, content is generally still sent to users from Google servers. For added privacy, see [[Tor Browser]].}}\n\n== Enterprise policies ==\n\nNetwork and system-wide policies may be established through the use of [https://support.mozilla.org/en-US/kb/managing-policies-linux-desktops enterprise policies] which both supplements and overrides user configuration preferences. For example, there is no documented user preference to disable the checking of updates for beta channel releases. However, there exists an enterprise policy which can be effectively deployed as a workaround. Single and/or multiple policies may be administered through {{ic|policies.json}} as follows:\n\n* Disable application updates\n* Force-enable hardware acceleration\n\n {\n  \"policies\": {\n   \"DisableAppUpdate\": true,\n   \"HardwareAcceleration\": true\n  }\n }\n\nVerify that {{ic|Enterprise Policies}} is set to {{ic|Active}} in {{ic|about:support}} and review release-specific policies in {{ic|about:policies}}.\n\n== Sanitized profiles ==\n\n=== prefs.js ===\n\nFiles which constitute a Firefox profile can be stripped of certain metadata. For example, a typical {{ic|prefs.js}} contains strings which identify the client and/or the user. \n\n user_pref(\"app.normandy.user_id\", \"6f469186-12b8-50fb-bdf2-209ebc482c263\");\n user_pref(\"security.sandbox.content.tempDirSuffix\", \"2a02902b-f25c-a9df-17bb-501350287f27\");\n user_pref(\"toolkit.telemetry.cachedClientID\", \"22e251b4-0791-44f5-91ec-a44d77255f4a\");\n\nThere are multiple approaches by which these strings can be reset with the caveat that a master {{ic|prefs.js}} must first be created without such identifiers and synced into a working profile. The simplest solution is close Firefox before copying its {{ic|prefs.js}} to a separate location:\n\n $ cp ~/.mozilla/firefox/example.default-release/prefs.js ~/prefs.sanitized.js\n\nStrip out any and all identfier strings and date codes by either setting them to 0 or removing the entries outright from the copied {{ic|prefs.js}}. Sync the now sanitized {{ic|prefs.js}} to the working profile as required:\n\n $ rsync -v ~/.prefs.sanitized.js ~/.mozilla/firefox/example.default-release/prefs.js\n\n{{Note|Required identifier and date code entries and/or strings will automatically be repopulated and reset to new values during the next launch of Firefox}}\n\nA secondary privacy effect is also incurred which can be witnessed by examining the string results between a sanitized {{ic|prefs.js}} versus a working {{ic|prefs.js}} at [https://fingerprintjs.com/demo Fingerprint JS API Demo].\n\n=== extensions.json ===\n\nAssuming that extensions are installed, the {{ic|extensions.json}} file lists all profile extensions and their settings. Of note is the location of the user home directory where the {{ic|.mozilla}} and {{ic|extensions}} folder exist by default. Unwanted background updates may be disabled by setting {{ic|applyBackgroundUpdates}} to the appropriate {{ic|0}} value. Of minor note are {{ic|installDate}} and {{ic|updateDate}}. [[Bubblewrap/Examples#Firefox|Bubblewrap]] can effectively mask the username and location of the home directory at which time the {{ic|extensions.json}} file may be sanitized and modified to point to the sandboxed {{ic|HOME}} location.\n\n {\"schemaVersion\":31,\"addons\":[{\"id\":\"uBlock0@raymondhill.net\",\"syncGUID\":\"{0}\",\"version\":\"0\",\"type\":\"extension\",\"optionsURL\":\"dashboard.html\",\"optionsType\":3,\"optionsBrowserStyle\":true,\"visible\":true,\"active\":true,\"userDisabled\":false,\"appDisabled\":false,\"embedderDisabled\":false,\"installDate\":0,\"updateDate\":0,\"applyBackgroundUpdates\":0,\"path\":\"/home/r/.mozilla/firefox/example.default-release/extensions/uBlock0@raymondhill.net.xpi\",\"skinnable\":false,\"softDisabled\":false,\"foreignInstall\":true,\"strictCompatibility\":true}}\n\nRemoval of similar metadata from {{ic|addonStartup.json.lz4}} and {{ic|search.json.mozlz4}} can also be accomplished. [https://github.com/jusw85/mozlz4 mozlz4] is a command-line tool which provides compression/decompression support for Mozilla (non-standard) LZ4 files.\n\n== Removal of subsystems ==\n\n{{Expansion|The deleted files will be back after upgrading the package, add them to [[pacman#Skip files from being installed to system|NoExtract]] instead.}}\n\nTelemetry related to [https://firefox-source-docs.mozilla.org/toolkit/crashreporter/crashreporter/index.html crash reporting] may be disabled by removing the following:\n\n /usr/lib/firefox/crashreporter\n /usr/lib/firefox/minidump-analyzer\n /usr/lib/firefox/pingsender\n\nFor those who have opted to install Firefox manually from official Mozilla sources, the updater system may be disabled by removing {{ic|updater}} in the {{ic|firefox}} directory.\n\n== Editing the contents of omni.ja ==\n\n{{Note|Certain features may be inhibited or lost as a result of modifying the contents of {{ic|omni.ja}}. Additionally, it is updated/overwritten with each Firefox release. It is up to the user to determine whether the gain in privacy is worth the loss of expected usability.}}\n\nThe file {{ic|/usr/lib/firefox/omni.ja}} contains most of the default configuration settings used by Firefox. As an example, starting from Firefox 73, network calls to {{ic|firefox.settings.services.mozilla.com}} and/or {{ic|content-signature-2.cdn.mozilla.net}} cannot be blocked by extensions or by setting preference URLs to {{ic|\"\");}}. Aside from using a DNS sinkhole or firewalling resolved IP blocks, one solution is to {{man|1|grep}} through the extracted contents of {{ic|omni.ja}} before removing all references to {{ic|firefox.settings.services.mozilla.com}} and/or {{ic|cdn.mozilla.net}}. Extraneous modules such as unused dictionaries and hyphenation files can also be removed in order to reduce the size of {{ic|omni.ja}} for both security and performance reasons.\n\nTo repack/rezip, use the command {{ic|zip -0DXqr omni.ja *}} and make sure that your working directory is the root directory of the files from the {{ic|omni.ja}} file.\n\n== Hardened user.js templates ==\n\nSeveral active projects maintain comprehensive hardened Firefox configurations in the form of a {{ic|user.js}} config that can be dropped to Firefox profile directory:\n\n* [https://github.com/arkenfox/user.js arkenfox/user.js] ({{AUR|arkenfox-user.js}})\n* [https://github.com/pyllyukko/user.js pyllyukko/user.js]\n* [https://ffprofile.com/ ffprofile.com] ([https://github.com/allo-/firefox-profilemaker github]) - online user.js generator. You select which features you want to enable and disable and in the end you get a download link for a zip-file with your profile template. You can for example disable some functions, which send data to Mozilla and Google, or disable several annoying Firefox functions like Mozilla Hello or the Pocket integration.\n\n== See also ==\n* [https://brainfucksec.github.io/firefox-hardening-guide Brainfucksec's firefox hardening guide] - A well maintained firefox guide to harden your firefox.\n* [https://www.privacyguides.org/ Privacy Guides] - A community-maintained resource for keeping online privacy.\n* [https://www.privacytools.io/#addons privacytools.io Firefox Privacy Add-ons]\n* [https://prism-break.org/en/categories/gnu-linux/#web-browser-addons prism-break.org Web Browser Addons]\n* [[MozillaWiki:Privacy/Privacy Task Force/firefox about config privacy tweeks]] - a wiki page maintained by Mozilla with descriptions of privacy specific settings.\n* [https://support.mozilla.org/en-US/kb/how-stop-firefox-making-automatic-connections How to stop Firefox from making automatic connections] - Is an annotated list of corresponding Firefox functionality and settings to disable it case-by-case.\n* [https://searchengine.party/ Search Engine Comparison] - Web page for comparing popular search engines across some privacy-centric data points."
                    }
                ]
            },
            "14917": {
                "pageid": 14917,
                "ns": 0,
                "title": "Firefox (\ud55c\uad6d\uc5b4)",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "#redirect [[Firefox]]"
                    }
                ]
            },
            "14925": {
                "pageid": 14925,
                "ns": 0,
                "title": "\ud30c\uc774\uc5b4\ud3ed\uc2a4",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "#REDIRECT [[Firefox]]"
                    }
                ]
            },
            "16449": {
                "pageid": 16449,
                "ns": 0,
                "title": "Firefox (\u0627\u0644\u0639\u0631\u0628\u064a\u0629)",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "#REDIRECT [[Firefox]]"
                    }
                ]
            },
            "17282": {
                "pageid": 17282,
                "ns": 0,
                "title": "File manager functionality",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:File managers]]\n[[ja:\u30d5\u30a1\u30a4\u30eb\u30de\u30cd\u30fc\u30b8\u30e3\u306e\u6a5f\u80fd]]\n[[pt:File manager functionality]]\n[[ru:File manager functionality]]\n[[zh-hans:File manager functionality]]\n{{Related articles start}}\n{{Related|List of applications/Utilities#File managers}}\n{{Related|Window manager}}\n{{Related|Desktop environment}}\n{{Related|Udisks}}\n{{Related|Extended attributes}}\n{{Related articles end}}\nThis article outlines the additional software packages necessary to expand the features and functionality of file managers, particularly where using a [[window manager]] such as [[Openbox]]. The ability to access partitions and removable media without a password - if affected - has also been provided.\n\n== Overview ==\n\n{{note|When installed, the software packages listed below will automatically be sourced by all installed - and capable - file managers, and within all desktop environments and/or window managers.}}\n\nA file manager alone will not provide the features and functionality that users of full desktop environments such as [[Xfce]] or [[KDE]] will be accustomed to. This is because additional software packages will be required to enable a given file manager to:\n\n* Display and access other partitions\n* Display, mount, and access removable media (e.g. USB sticks, optical discs, and digital cameras)\n* Enable networking / shared networks with other installed operating systems\n* Enable thumbnailing\n* Archive and extract compressed files\n* Automatically mount removable media\n\nWhen a file manager has been installed as part of a full desktop environment, most of these packages will usually have been installed automatically. Consequently, where a file manager has been installed for a standalone window manager then - as is the case with the window manager itself - only a basic foundation will be provided. The user must then determine the nature and extent of the features and functionality to be added.\n\n== Additional features ==\n\n{{Expansion|Mention KDE file managers which use KIO instead of GVFS for mounting and other functionality}}\n\nWhen using a lightweight environment, the more added file manager features, the more memory usage is needed. See also [[udisks]].\n\n=== Mounting ===\n\n* The Gnome virtual filesystem ({{pkg|gvfs}}) provides mounting and trash functionality. GVFS uses {{pkg|udisks2}} for mounting functionality and is the recommended solution for most file managers.\n\nFolders used by GVFS:\n\n* {{ic|/usr/lib/}} contains {{ic|gvfsd-*}} files, where {{ic|*}} refers to the various supported file system types.\n* {{ic|/usr/share/gvfs/mounts/}} contains mount rules for GVFS. To use one's own rules, create {{ic|~/.gvfs/mounts}}.\n\nAdditional packages for installation usually follows the [https://archlinux.org/packages/?q=gvfs- gvfs-* pattern], for example:\n\n* {{pkg|gvfs-mtp}}: media players and mobile devices that use [[MTP]]\n* {{pkg|gvfs-gphoto2}}: digital cameras and mobile devices that use [[Wikipedia:Picture Transfer Protocol|PTP]]\n* {{pkg|gvfs-afc}}: Apple mobile devices\n\n==== File manager daemon ====\n\nMost graphical file managers have the ability to automount devices plugged in while the program is running. You can leverage this for a system-wide solution by running the file manager in [[daemon]] mode (i.e. as a background process), if supported. For example, when using [[PCManFM]] in [[Openbox]], the following command would be added to the {{ic|~/.config/openbox/autostart}} file:\n\n pcmanfm -d &\n\nIt will also be necessary to configure the file manager itself in respect to volume management (e.g. what it will do and what applications will be launched when certain file types are detected upon mounting).\n\n{{tip|Most desktop environments will start the file manager in daemon mode by default so manual intervention will not be required in these use cases.}}\n\n==== Standalone ====\nAnother option is to install a separate [[List of applications/Utilities#Mount tools|mount application]]. The advantages of using this are:\n\n* Less memory may be required to run as a background/[[daemon]] process than a file manager\n* It is not file-manager-specific, allowing them to be freely added, removed, and switched\n* {{pkg|gvfs}} is not needed to be installed for mounting, lessening memory usage. If it is installed, then its daemon [[D-Bus#Override dbus service|can be masked]], and started only on demand. This is useful for example as a fallback for [[mtp]], where some implementations may not work.\n\n=== Networks ===\n\n{{note|It will also be necessary to enable [[Bluetooth]] and/or networking with [[Samba|Windows]] to enable the relevant file manager functionality in turn.}}\n\n* {{AUR|obexftp}}: Bluetooth device mounting and file transfers (see [[Bluetooth]])\n* {{pkg|gvfs-smb}}: Windows File and printer sharing for '''Non-KDE''' desktops (see [[Samba]])\n* {{pkg|kdenetwork-filesharing}}: Windows File and printer sharing for [[KDE]] (see [[Samba#KDE]])\n* {{pkg|sshfs}}: FUSE client based on the [[SSH]] File Transfer Protocol\n\n==== Windows access ====\n\nIf using {{pkg|gvfs-smb}}, to access Windows/[[Cifs]]/Samba file shares first open the file manager, and enter the following into the path name, changing {{ic|''server_name''}} and {{ic|''share_name''}} as appropriate:\n\n smb://''server_name''/''share_name''\n\n==== Apple access ====\n\nAFP support is included in {{pkg|gvfs}}. To access AFP files first open the file manager, and enter the following into the path name, changing {{ic|''server_name''}} and {{ic|''share_name''}} as appropriate:\n\n afp://''server_name''/''share_name''\n\n==== sftp access ====\n\nSFTP support is also included in {{pkg|gvfs}}. To access folders via sftp, open the file manager, and enter the following into the path name, changing {{ic|''user@server_name''}} and {{ic|''folder_name''}} as appropriate:\n\n sftp://''user@server_name''/''folder_name''\n\n=== Thumbnail previews ===\n\nSome file managers may not support thumbnailing, even when the packages listed have been installed. Check the documentation for the relevant file manager.\n\nYou may not see thumbnails for remote storage, including [[MTP]]. Check your file manager's settings, e.g. for [[Thunar]] one has to set \"Show thumbnails: always\".\n\n==== File managers other than Dolphin and Konqueror ====\n\nThese packages apply to most file managers, such as [[PCManFM]], [[SpaceFM]], [[Thunar]] and {{AUR|xfe}}. The exceptions are Dolphin and Konqueror, used in the [[KDE]] desktop environment.\n\n* {{Pkg|tumbler}}: Image files. This '''<u>must</u>''' also be installed to expand thumbnailing capabilities to other file types in some cases.\n* {{Pkg|webp-pixbuf-loader}}: {{ic|.webp}} images\n* {{Pkg|poppler-glib}}: Adobe {{ic|.pdf}} files\n* {{Pkg|ffmpegthumbnailer}}: Video files\n* {{Pkg|freetype2}}: Font files\n* {{Pkg|libgsf}}: {{ic|.odf}} files\n* {{AUR|raw-thumbnailer}}: {{ic|.raw}} files\n* {{Pkg|totem}}: Video files and tagged audio files ([[GNOME Files]], and Caja only)\n* {{Pkg|evince}} or {{Pkg|atril}}: {{ic|.pdf}} files\n* {{Pkg|gnome-epub-thumbnailer}}: {{ic|.epub}} and {{ic|.mobi}} ebook files\n* {{AUR|mcomix}}: {{ic|.cbr}} comicbook archives\n* {{AUR|folderpreview}}: folder thumbnailer\n* {{Pkg|f3d}}: 3D files, including glTF, stl, step, ply, obj, fbx.\n\n==== Dolphin and Konqueror (KDE) ====\n\nSee [[Dolphin#File previews]].\n\n==== Use PCManFM to get thumbnails for other file types ====\n\n{{Style|This section is not specific to PCManFM, it should be rewritten/generalized.}}\n\n[[PCManFM]] supports image thumbnails out of the box. However, in order to view thumbnails of other file types, PCManFM uses the information provided in the files located at {{ic|/usr/share/thumbnailers}}. The packages which provide a thumbnailer usually add the corresponding ''.thumbnail'' file at {{ic|/usr/share/thumbnailers}}. For example, in order to get thumbnails for OpenDocument files, you may install {{Pkg|libgsf}} from the official repositories. For video files' thumbnails, the package {{Pkg|ffmpegthumbnailer}} is required. For PDF files, you may install {{Pkg|evince}} from the official repositories, which provides {{ic|evince-thumbnailer}} and the corresponding file at {{ic|/usr/share/thumbnailers}}. However, if you prefer not to install {{ic|evince}}, you can also replicate the functionality of {{ic|evince-thumbnailer}} using {{Pkg|imagemagick}}'s {{ic|convert}} command. This is accomplished by creating a new file with the ''.thumbnailer'' extension (e.g.: {{ic|imagemagick-pdf.thumbnailer}}) at {{ic|/usr/share/thumbnailers}} with the following content:\n\n   [Thumbnailer Entry]\n   TryExec=convert\n   Exec=convert %i[0] -background \"#FFFFFF\" -flatten -thumbnail %s %o\n   MimeType=application/pdf;application/x-pdf;image/pdf;\n\n{{Note|The ''[0]'' next to the input file is specified so that {{ic|convert}} only generates a thumbnail of the first page. This is a {{ic|convert}}-specific syntax and has nothing to do with the syntax of the thumbnailers' files.}}\n\nFollowing this example, you can specify custom thumbnailers by creating your own ''.thumbnail'' files. Keep in mind that {{ic|%i}} refers to the input file (the file which will have its thumbnail made), {{ic|%o}} to the output file (the thumbnail image) and {{ic|%s}} to the size of the thumbnail. These parameters will be automatically substituted with the corresponding data and passed to the thumbnailer program by PCManFM.\n\n{{Tip|If you only get thumbnails of certain files and not of all the files of the same type try increasing the maximum file size of the files that get a thumbnail at ''Edit > Preferences > Display''.}}\n\n=== Archive files ===\n\nTo extract compressed files such as tarballs ({{ic|.tar}} and {{ic|.tar.gz}}) within a file manager, it will first be necessary to install a GUI archiver such as {{pkg|file-roller}}. See [[List of applications/Utilities#Archiving and compression tools]] for further information. An additional package such as {{pkg|unzip}} must also be installed to support the use of zipped  {{ic|.zip}} files. Once an archiver has been installed, files in the file manager may consequently be right-clicked to be archived or extracted.\n\nArchive files are mounted under folder {{ic|1=/run/user/$(id -u)/gvfs/}} with automatically created mount point that contains full path to the file in its name where all {{ic|/}} are replaced with {{ic|%252F}} and {{ic|:}} replaced with {{ic|%253A}} [https://www.owasp.org/index.php/Double_Encoding hex codes].\n\nExample of path to the mounted archive {{ic|/full/path/to/file/name.zip}}\n\n /run/user/$(id -u)/gvfs/archive:host=file%253A%252F%252F%252F'''full%252Fpath%252Fto%252Ffile%252Fname.zip'''\n\n=== NTFS read/write support ===\n\nSee the [[NTFS]] article.\n\n=== Desktop notifications ===\n\nSome file managers make use of [[desktop notifications]] to confirm various events and statuses like mounting, unmounting and ejection of removable media.\n\n=== Enable Trash functionality on different filesystems (external drives) ===\n\n{{Accuracy|Should these folders not be created automatically? When is it necessary to create them manually?}}\n\nMake [https://specifications.freedesktop.org/trash-spec/trashspec-latest.html trash directories] {{ic|.Trash-''<uid>''}} for each users on the top level of filesystems:\n\nFor example (mount point: /media/sdc1, uid: 1000, gid: 1000):\n # mkdir /media/sdc1/.Trash-1000\n\nand {{ic|chown}} them:\n # chown 1000:1000 /media/sdc1/.Trash-1000\n\n== Troubleshooting ==\n\n=== \"Not Authorized\" when attempting to mount drives ===\n\nFile managers using [[udisks]] require a [[polkit]] authentication agent. See [[polkit#Authentication agents]].\n\n=== Password required to access partitions ===\n\nThe need to enter a password to access other partitions or mounted removable media will likely be due to the default permission settings of {{pkg|udisks2}}. More specifically, permission may be set to the root account only, not the user account. See [[Udisks#Configuration]] for details.\n\n=== Directories are not opened in the file manager ===\n\nYou may find that an application that is not a file manager, [[Audacious]] or [[Visual Studio Code]] for example, is set as the default application for opening directories \u2014 an application that specifies that it can handle the {{ic|inode/directory}} MIME type in its desktop entry can become the default. You can query the default application for opening directories with the following command:\n\n $ xdg-mime query default inode/directory\n\nTo ensure that directories are opened in the file manager, run the following command:\n\n $ xdg-mime default ''my_file_manager''.desktop inode/directory\n\nwhere {{ic|''my_file_manager''.desktop}} is the desktop entry for your file manager \u2014 {{ic|org.gnome.Nautilus.desktop}} for example.\n\n{{Tip|If you want the change to be system-wide, run the command above as root or create/edit the following file:\n{{hc|/usr/share/applications/mimeapps.list|2=\n[Default Applications]\ninode/directory=''my_file_manager''.desktop\n}}}}\n\n==== D-Bus ====\n\nSome other applications instead use the {{ic|org.freedesktop.FileManager1}} D-Bus protocol (e.g. [[Firefox]]). The following shows a list of currently installed services supporting this protocol:\n\n $ grep -R FileManager1 /usr/share/dbus-1/services\n\nTo change what file manager is opened, copy the file to {{ic|$XDG_DATA_HOME/dbus-1/services}}. Additionally, before the changes become active, kill the program currently implementing the D-Bus service."
                    }
                ]
            },
            "17360": {
                "pageid": 17360,
                "ns": 0,
                "title": "HiDPI",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Graphics]]\n[[ja:HiDPI]]\n[[ru:HiDPI]]\n[[zh-hans:HiDPI]]\n{{Related articles start}}\n{{Related|Font configuration}}\n{{Related articles end}}\n\nHiDPI (High Dots Per Inch) displays, also known by Apple's \"[[wikipedia:Retina Display|Retina Display]]\" marketing name, are screens with a high resolution in a relatively small format. They are mostly found in high-end laptops and monitors.\n\nNot all software behaves well in high-resolution mode yet. Here are listed most common tweaks which make work on a HiDPI screen more pleasant.\n\n== Desktop environments ==\n\n=== GNOME ===\n\nTo enable HiDPI, navigate to ''Settings > Devices > Displays > Scale'' and choose an appropriate value. Or, use gsettings:\n\n $ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides \"[{'Gdk/WindowScalingFactor', <2>}]\"\n $ gsettings set org.gnome.desktop.interface scaling-factor 2\n\n{{Note|1=By default, GNOME only allows integer scaling numbers to be set. 1 = 100%, 2 = 200%, etc. See [[#Fractional scaling]] below.}}\n\n==== Fractional scaling ====\n\nA setting of {{ic|2, 3, etc}}, which is all you can do with {{ic|scaling-factor}}, may not be ideal for certain HiDPI displays and smaller screens (e.g. small tablets). Fractional scaling is possible on both Wayland and Xorg, though the process differs.\n\nImplementation was mainly discussed and decided in GNOME fractional scaling hackfest 2017, check [https://hackmd.io/WspOFZpRTo2qlWc8fh_zPQ] for more technical details.\n\n{{Note|{{Accuracy|The information below is subject to change. For more, please see [https://www.reddit.com/r/gnome/comments/11ekj8o/comment/jah8i0b/ this online discussion].}}\n\nCurrently, GTK only supports fractional scaling for fonts. On the other hand, widgets, like buttons or labels, [https://discourse.gnome.org/t/fractional-scale-factor-in-gtk-again/10803 may only use integer (DPI) scaling].  As such, fractional scaling for most native GNOME applications requires first rendering at a higher resolution, then downscaling to the requested resolution. GTK utilizes this technique in both Wayland and Xorg sessions.\n\nFor some setups [https://www.gtk.org/docs/architecture/index running GTK 3 applications], this can increase CPU and GPU usage and power usage, resulting in a less responsive experience - particularly in Xorg. If these issues are considerable in your use case, please consider using another desktop environment or deactivating fractional scaling.}}\n\n===== Wayland =====\n\nEnable the experimental fractional scaling feature:\n\n $ gsettings set org.gnome.mutter experimental-features \"['scale-monitor-framebuffer']\"\n\nthen open ''Settings > Devices > Displays'' (the new options may only appear after a restart).\n\nTo enable the option for all users, create the following three files with the corresponding content\n\n{{hc|/etc/dconf/profile/user|<nowiki>\nuser-db:user\nsystem-db:local\n</nowiki>}}\n\n{{hc|/etc/dconf/db/local.d/00-hidpi|<nowiki>\n[org/gnome/mutter]\nexperimental-features=['scale-monitor-framebuffer']\n</nowiki>}}\n\n{{hc|/etc/dconf/db/locks/hidpi|<nowiki>\n/org/gnome/mutter/experimental-features\n</nowiki>}}\n\nThen run {{ic|dconf update}} and restart the machine. This will permanently lock the option.\n\n====== XWayland ======\n\nThe feature of supporting clients with native scaling without scaling the Xwayland resolution to avoid Xwayland blurring (Similar to KDE Plasma  \"Apply scaling themselves\"  [[#Xwayland_2|Xwayland scale method]]) has already been listed on the mutter's [https://gitlab.gnome.org/GNOME/mutter/-/issues/478 Fractional Scaling Known issues and TODO List]. See also the [https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/733 pull request] for upstream Xwayland.\n\n===== Xorg =====\n\nUbuntu has provided a patch[https://salsa.debian.org/gnome-team/mutter/-/blob/ubuntu/master/debian/patches/ubuntu/x11-Add-support-for-fractional-scaling-using-Randr.patch] to scale with Randr in GNOME Settings. This patch is already provided by {{AUR|mutter-x11-scaling}}. After installing it, you can set:\n\n $ gsettings set org.gnome.mutter experimental-features \"['x11-randr-fractional-scaling']\"\n\nThen open ''Settings > Devices > Displays'' to set the scale.\n\nYou can also manually achieve any non-integer scale factor by using a combination of GNOME's {{ic|scaling-factor}} and [[xrandr]]. This combination keeps the TTF fonts properly scaled so that they do not become blurry if using {{ic|xrandr}} alone. You specify zoom-in factor with {{ic|gsettings}} and zoom-out factor with [[xrandr]].\n\nFirst scale GNOME up to the minimum size which is too big. Usually \"2\" is already too big, otherwise try \"3\" etc. Then start scaling down by setting zoom-out factor with [[xrandr]]. First get the relevant output name, the examples below use {{ic|eDP1}}. Start e.g. with zoom-out 1.25 times. If the UI is still too big, increase the scale factor; if it is too small decrease the scale factor.\n\n $ xrandr --output eDP1 --scale 1.25x1.25\n\nTo ensure that the settings persist across reboots, you may choose to use {{Pkg|autorandr}}. Refer to [https://askubuntu.com/a/1130337 this StackOverflow] for more information.\n\n{{Accuracy|The following was initially added under [[#X Resources]]. Clarify how it integrates with the info there or that above for GNOME.|section=GNOME ignores X settings}}\n\nGNOME ignores X settings due to its xsettings Plugin in Gnome Settings Daemon, where DPI setting is hard coded.\nThere is blog entry for [http://blog.drtebi.com/2012/12/changing-dpi-setting-on-gnome-34.html recompiling Gnome Settings Daemon]{{Dead link|2022|09|18|status=domain name not resolved}}.\nIn the source documentation there is another way mentioned to set X settings DPI:\n\nYou can use the gsettings, just make sure to read previous setting first and merge it. In just simply set it with this command:\n\n $ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides \"{'Xft/DPI': <153600>}\"\n\nFrom README.xsettings\n\nNoting that variants must be specified in the usual way (wrapped in <>).\n\nNote also that DPI in the above example is expressed in 1024ths of an inch.\n\n==== Text Scaling ====\n\nAlternatively, or in addition to changing the display scaling, you can separately scale text. This can be done by navigating to ''Fonts > Scaling Factor'' in Gnome Tweaks, or using gsettings. Note that the text scaling factor need not be limited to whole integers, for example:\n\n $ gsettings set org.gnome.desktop.interface text-scaling-factor 1.5\n\n===== GTK+ vs Gnome Shell elements on Xorg =====\n\n{{Out of date|Needs a partial rewrite regarding the Gnome Shell Toolkit, since it looks unmaintained since [https://gitlab.gnome.org/GNOME/gnome-shell/-/tree/shell-toolkit 2009].}}\n\nAdjusting the text scaling as per the above only affects GTK+ elements of the GNOME desktop. This should cover everything on Wayland. However, those on an Xorg session may find that they need to make further adjustments on HiDPI environments, since the GNOME Shell UI (including the top bar, dock, application menus, etc.) relies separately on the [https://developer.gnome.org/st/stable/ St]{{Dead link|2021|11|11|status=404}} toolkit. Note that this is a long-standing issue to which a [https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/486 patch] has been merged and available for Gnome Shell 3.35 onward. For older releases, Xorg users can resolve most of the Gnome shell scaling problems by manually editing the shell theme that they are currently using. The relevant CSS files are normally located at {{ic|/usr/share/themes/YOUR-THEME/gnome-shell/gnome-shell.css}}. Users should increase all \"font-size\" elements in this file in proportion to their display scaling (doubling font sizes for 200% scaling, etc.) For example, the top of an edited CSS file for the [https://github.com/adapta-project/adapta-gtk-theme Adapta] shell theme might look like:\n\n{{hc|usr/share/themes/Adapta/gnome-shell/gnome-shell.css|2=\nstage { font-size: 20pt; font-family: Roboto, Noto Sans, Sans-Serif; color: #263238; }\n}}\n\nOnce these changes have been saved, activate them by switching to another theme (for example, using {{pkg|gnome-tweaks}}) and then reverting back again. The top bar, application menus, calendar, and other shell elements should now be correctly scaled.\n\nIn addition to editing the relevant shell theme's CSS file, users on Xorg may also wish to increase the title bar font at the top of open applications. This can be done through the dconf editor ({{ic|org > gnome > desktop > wm > preferences :: titlebar-font}}). Note that the {{ic|title-bar-uses-system-fonts}} option should also be turned off. Alternatively, use gsettings:\n\n $ gsettings set org.gnome.desktop.wm.preferences titlebar-font 'Cantarell Bold 22' ## Change as needed\n $ gsettings set org.gnome.desktop.wm.preferences titlebar-uses-system-font false\n\n=== KDE Plasma ===\n\nYou can use Plasma's settings to fine tune font, icon, and widget scaling. This solution affects both Qt and GTK applications.\n\n{{Note|Plasma 5.27 [https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/2544 dropped] use of {{ic|GDK_SCALE}}/{{ic|GDK_DPI_SCALE}} variables and [https://invent.kde.org/plasma/kde-gtk-config/-/merge_requests/49 switched] to [[Xsettingsd]]. It should be installed to make scaling work for GTK apps. Or you can set this variables manually as described in [[#GDK 3 (GTK 3)]].}}\n\nTo adjust font, widget, and icon scaling together:\n\n# ''System Settings > Display and Monitor > Display Configuration > Global Scale''\n# Drag the slider to the desired size\n# Restart for the settings to take effect\n\n{{Note|If you are using xorg, and global scaling is set but not applied to Qt applications after reboot, please check if {{ic|xft.dpi}} is set in {{ic|~/.Xresources}} . If so, removing the variable and adjusting global scaling again may take effect.}}\n\nHowever, using [[X11]] session, Plasma ignores the Qt scaling settings by default, which affects panels and other desktop elements. To make Plasma respect the Qt settings, [[Environment variables|set]] {{ic|1=PLASMA_USE_QT_SCALING=1}}.\n\n==== Cursor size ====\n\nTo adjust cursor size:\n\n# ''System Settings > Appearance > Cursors > Size''\n\n==== Font scaling ====\n\nTo adjust only font scaling:\n\n# ''System Settings > Appearance > Fonts''\n# Check \"Force fonts DPI\" and adjust the DPI level to the desired value. This setting should take effect immediately for newly started applications. You will have to logout and login for it to take effect on Plasma desktop.\n\n==== Icon scaling ====\n\nTo adjust only icon scaling:\n\n# ''System Settings > Appearance > Icons > Advanced''\n# Choose the desired icon size for each category listed. This should take effect immediately.\n\n==== Panel scaling ====\n\nTo adjust only panel scaling:\n\n# Right click the panel, select ''Enter Edit Mode'', and manually adjust ''Panel height''.\n\n==== Xwayland ====\n\nAs of Plasma 5.26, the Xwayland scale method can be chosen at the bottom of the ''System Settings > Display and Monitor > Display Configuration'' page.\n\nIn \"Scaled by the system\" mode, the X application will be rendered at 1x and then magnified (scaled) by KDE. This works for all applications, but causes blurriness due to the magnification.\n\nIn \"Apply scaling themselves\" mode, the X application will have to render itself at the appropriate size. This will avoid blurriness, but applications which aren't HiDPI-aware will render themselves at 1x scale and therefore will appear small.\n\nSee this [https://pointieststick.com/2022/06/17/this-week-in-kde-non-blurry-xwayland-apps/ blog post] for details.\n\n=== Xfce ===\n\nXfce supports HiDPI scaling which can be enabled using the settings manager:\n\n# Go to ''Settings Manager > Appearance > Settings > Window Scaling'' and select 2 as the scaling factor.\n# Go to ''Settings Manager > Window Manager > Style'' and select {{ic|Default-xhdpi}} theme.\n\nAlternatively, it is possible to do the same from command line using ''xfconf-query'':\n\n $ xfconf-query -c xsettings -p /Gdk/WindowScalingFactor -s 2\n $ xfconf-query -c xfwm4 -p /general/theme -s Default-xhdpi\n\nAfter either of the above changes, fonts in some GTK applications may still not be scaled; you may additionally do the following (see [[#GDK 3 (GTK 3)]]):\n\n# Go to ''Settings Manager > Appearance > Fonts > Custom DPI setting'' and change from 96 to 192\n# Set the [[environment variable]] {{ic|1=GDK_DPI_SCALE=0.5}} to un-scale some fonts that would be scaled twice.\n\nThe steps above would set 2x scaled resolution for Xfce and other GTK 3 applications.\n\nScaling for Qt 5 applications should be set manually, see [[#Qt 5]]. Note that if you set a Custom DPI for fonts above, you likely need to set {{ic|1=QT_FONT_DPI=96}} to avoid double-scaling of fonts in Qt applications.\n\n=== Cinnamon ===\n\nHas good support out of the box.\n\n=== Enlightenment ===\n\nFor E18, go to the E Setting panel. In ''Look > Scaling'', you can control the UI scaling ratios. A ratio of 1.2 seems to work well for the native resolution of the MacBook Pro 15\" screen.\n\n== Window managers ==\n\n=== Sway ===\n\nSee [[Sway#HiDPI]].\n\n== X Resources ==\n\nIf you are not using a desktop environment such as KDE, Xfce, or other that manipulates the X settings for you, you can set the desired DPI setting manually via the {{ic|Xft.dpi}} variable in [[Xresources]]:\n\n{{hc|~/.Xresources|2=\nXft.dpi: 192\n\n! These might also be useful depending on your monitor and personal preference:\nXft.autohint: 0\nXft.lcdfilter:  lcddefault\nXft.hintstyle:  hintfull\nXft.hinting: 1\nXft.antialias: 1\nXft.rgba: rgb\n}}\n\nFor {{ic|Xft.dpi}}, using integer multiples of 96 usually works best, e.g. 192 for 200% scaling.\n\nMake sure the settings are loaded properly when X starts, for instance in your {{ic|~/.xinitrc}} with {{ic|xrdb -merge ~/.Xresources}} (see [[Xresources]] for more information).\n\nThis will make the font render properly in most toolkits and applications, it will however not affect things such as icon size!\nSetting {{ic|Xft.dpi}} at the same time as toolkit scale (e.g. {{ic|GDK_SCALE}}) may cause interface elements to be much larger than intended in some programs like firefox.\n\n== X Server ==\n\n{{Accuracy|{{Pkg|libxft}} is a ''font rendering interface library'', the {{ic|Xft.dpi}} setting was not intended to be abused by other applications. On the other hand, the {{ic|xorg.conf}} value should affect everything.}}\n\nSome programs may still interpret the DPI given by the X server (most interpret X Resources, though, directly or indirectly). Older versions of i3 (before 2017) and Chromium (before 2017) used to do this.\n\nTo verify that the X Server has properly detected the physical dimensions of your monitor, use the ''xdpyinfo'' utility from the {{Pkg|xorg-xdpyinfo}} package:\n\n{{hc|$ xdpyinfo {{!}} grep -B 2 resolution|\nscreen #0:\n  dimensions:    3200x1800 pixels (423x238 millimeters)\n  resolution:    192x192 dots per inch\n}}\n\nThis example uses inaccurate dimensions (423mm x 238mm, even though the Dell XPS 9530 has 346mm x 194mm) to have a clean multiple of 96 dpi, in this case 192 dpi. This tends to work better than using the correct DPI \u2014 Pango renders fonts crisper in i3 for example.\n\nIf the DPI displayed by xdpyinfo is not correct, see [[Xorg#Display size and DPI]] for how to fix it.\n\n== GUI toolkits ==\n\n=== Qt 5 ===\n\nSince Qt 5.6, Qt 5 applications can be instructed to honor screen DPI by setting the {{ic|QT_AUTO_SCREEN_SCALE_FACTOR}} [[environment variable]]. Qt 5.14 introduced a new environment variable {{ic|QT_ENABLE_HIGHDPI_SCALING}} which [https://doc.qt.io/qt-5/highdpi.html#high-dpi-support-in-qt replaces] the {{ic|QT_AUTO_SCREEN_SCALE_FACTOR}} variable. It is recommended to set both [[environment variable]]s for maximum compatibility:\n\n $ export QT_AUTO_SCREEN_SCALE_FACTOR=1\n $ export QT_ENABLE_HIGHDPI_SCALING=1\n\nIf automatic detection of DPI does not produce the desired effect, scaling can be set manually per-screen ({{ic|QT_SCREEN_SCALE_FACTORS}}/{{ic|QT_ENABLE_HIGHDPI_SCALING}}) or globally ({{ic|QT_SCALE_FACTOR}}). For more details see the [https://blog.qt.io/blog/2016/01/26/high-dpi-support-in-qt-5-6/ Qt blog post] or [https://doc.qt.io/qt-5/highdpi.html Qt developer documentation].\n\n{{Note|\n* If you manually set the screen factor, it is important to set {{ic|1=QT_AUTO_SCREEN_SCALE_FACTOR=0}} and {{ic|1=QT_ENABLE_HIGHDPI_SCALING=0}} otherwise some applications which explicitly force high DPI enabling get scaled twice.\n* {{ic|QT_SCALE_FACTOR}} scales fonts, but {{ic|QT_SCREEN_SCALE_FACTORS}} may not scale fonts, depending on the application.\n* If you also set the font DPI manually in ''xrdb'' to support other toolkits, {{ic|QT_SCALE_FACTORS}} will give you huge fonts.\n* If you have multiple screens of differing DPI ie: [[#Side display]] you may need to do {{ic|1=QT_SCREEN_SCALE_FACTORS=\"2;2\"}}\n}}\n\nAn [https://bugreports.qt.io/browse/QTBUG-53022 alternative] is e.g.:\n\n $ QT_FONT_DPI=96 clementine\n\n=== GDK 3 (GTK 3) ===\n\n{{Note|As stated in the [[#X Resources]] section, if you have xft.dpi set to a larger dpi, it will make other scales larger than usual, including GDK.}}\n\nSetting the GDK scale (in X11, not Wayland) will scale the UI; however, it will not scale icons. If you are using a minimal window manager where you are setting the dpi via Xft.dpi, GDK should scale perfectly fine with it. In other cases, [https://docs.gtk.org/gtk3/x11.html do the following]:\n\nTo scale UI elements by an integer only factor:\n\n $ export GDK_SCALE=2\n\nGTK3 does not support fractional scaling currently, so fractional factors will be ignored. This environment variable is also ignored in mutter wayland sessions.\n\nGTK4 supports fractional scaling since 4.14 under Wayland.\n\n{{ic|GDK_DPI_SCALE}} can be used to scale text only. To undo scaling of text, fractional scale can be used:\n\n $ export GDK_DPI_SCALE=0.5\n\nUnder GTK3/4 it not currently possible to scale icon sizes, unless the application explicitly implements a way to do so. See bug report [https://gitlab.gnome.org/GNOME/gtk/-/issues/4528 #4528]. If you need this feature, use Qt when possible.\n\n=== GTK 2 ===\n\nScaling of UI elements is not supported by the toolkit itself, however it is possible to generate a theme with elements pre-scaled for HiDPI display using {{AUR|themix-full-git}}.\n\n=== Electron ===\n\n[https://electronjs.org/ Electron] applications (e.g. {{AUR|slack-desktop}}, {{pkg|signal-desktop}}, etc.) can be configured to use a custom scaling value by adding a {{ic|1=--force-device-scale-factor}} flag to the ''.desktop'' file. This is normally located at {{ic|/usr/share/applications/}}, and can normally be overridden on a per-user basis by copying it to {{ic|~/.local/share/applications/}}. The flag should be added to the line beginning with \"Exec=\". For example:\n\n{{hc|~/.local/share/applications/slack.desktop|2=\nExec=env LD_PRELOAD=/usr/lib/libcurl.so.3 /usr/bin/slack --force-device-scale-factor=1.5 %U\n}}\n\n=== Elementary (EFL) ===\n\nTo scale UI elements by a factor of 1.5:\n\n export ELM_SCALE=1.5\n\nFor more details see https://phab.enlightenment.org/w/elementary/{{Dead link|2023|04|23|status=404}}\n\n=== GNUstep ===\n\nGNUstep applications that use its gui (AppKit) library accept a {{ic|GSScaleFactor}} property in their defaults (STEP preferences). To define a scaling factor of 1.5 for all applications:\n\n defaults write NSGlobalDomain GSScaleFactor 1.5\n\nNote that you must also disable font hinting by setting the value of {{ic|GSFontHinting}} to 17, else text rendering will look broken when rendering long lines.\n\n defaults write NSGlobalDomain GSFontHinting 17\n\nSome automatic detection was possible back in 2011, but the code responsible for the X11 backend was [https://github.com/gnustep/libs-back/commit/337ce46bba304732d9a7c7495a3dd245a3219660 commented out] thereafter.\n\n=== FLTK ===\n\nFLTK 1.3, the default FLTK version available in Arch Linux, does not support resolution scaling. Support will arrive when applications start using FLTK 1.4.\n\n== Boot managers ==\n\n=== GRUB ===\n\n==== Lower the framebuffer resolution ====\n\nSet a lower resolution for the framebuffer as explained in [[GRUB/Tips and tricks#Setting the framebuffer resolution]].\n\n==== Change GRUB font size ====\n\nFind a ttf font that you like in {{ic|/usr/share/fonts/}}.\n\nConvert the font to a format that GRUB can utilize:\n\n # grub-mkfont -s 30 -o /boot/grubfont.pf2 /usr/share/fonts/FontFamily/FontName.ttf\n\n{{Note|Change the {{ic|-s 30}} parameter to modify the font size}}\n\nEdit {{ic|/etc/default/grub}} to set the new font as shown in [[GRUB/Tips and tricks#Background image and bitmap fonts]]:\n\n GRUB_FONT=\"/boot/grubfont.pf2\"\n\n{{Note|{{ic|GRUB_THEME}} overrides {{ic|GRUB_FONT}} if it is used.}}\n\nFinally [[GRUB#Generate the main configuration file|regenerate the main configuration file]].\n\n{{Tip|The font size can also be changed with the GUI tool {{Pkg|grub-customizer}}.}}\n\n=== systemd-boot ===\n\nSet a lower resolution for the console through {{ic|console-mode}} as explained in [[systemd-boot#Loader configuration]] and {{man|5|loader.conf|OPTIONS}}.\n\n== Applications ==\n\nIf you are running a Wayland session, but application is running via Xwayland (either because it does not support Wayland natively or because it uses X11 by default), you could still get blurry fonts and interface, even if the application supports HiDPI. See [https://bugs.kde.org/show_bug.cgi?id=389191 this bug report]. See also [[Wayland#Detect Xwayland applications visually]].\n\n=== Browsers ===\n\n==== Firefox ====\n\nFirefox should use the [[#GDK 3 (GTK 3)]] settings. However, the suggested {{ic|GDK_SCALE}} suggestion does not consistently scale the entirety of Firefox, and does not work for fractional values (e.g., a factor of 158DPI/96DPI = 1.65 for a 1080p 14\" laptop). You may want to use {{ic|GDK_DPI_SCALE}} instead. Another option, which will avoid Firefox-specific settings in many setups is to use the settings in [[#X Resources]] as Firefox should respect the {{ic|Xft.dpi}} value defined there.\n\nTo override those, open Firefox advanced preferences page ({{ic|about:config}}) and add and set parameter {{ic|ui.textScaleFactor}} to {{ic|150}} (or find the one that suits you better; {{ic|150}} is a good choice for Retina screens). You will likely also need to edit the zoom level in general preferences to e.g. 120%. This does not consistently scale the entirety of Firefox: edit {{ic|layout.css.devPixelsPerPx}} for that, but as of Firefox 103 it may not work as expected.\n\nIf Firefox is not scaling fonts, you may want to create {{ic|userChrome.css}} and add appropriate styles to it. More information about {{ic|userChrome.css}} at [http://kb.mozillazine.org/index.php?title=UserChrome.css mozillaZine]. Starting from Firefox 69 the {{ic|userChrome.css}} and {{ic|userContent.css}} files are not loaded by default unless preference is set by the user. Open Firefox advanced preferences page ({{ic|about:config}}) and set parameter {{ic|toolkit.legacyUserProfileCustomizations.stylesheets}} to {{ic|True}}, then restart Firefox to apply the changes.\n\n{{hc|~/.mozilla/firefox/<em><profile></em>/chrome/userChrome.css|<nowiki>\n@namespace url(\"https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul\");\n\n/* #tabbrowser-tabs, #navigator-toolbox, menuitem, menu, ... */\n* {\n    font-size: 15px !important;\n}\n\n/* exception for badge on adblocker */\n.toolbarbutton-badge {\n    font-size: 8px !important;\n}\n</nowiki>}}\n\nIf you use a HiDPI monitor such as Retina display together with another monitor, you can use the [https://addons.mozilla.org/firefox/addon/ffreszoom/ ffreszoom] add-on, which will adjust the page zoom if it detects you are using a large monitor (zoom level and threshold are configurable). Modifying the internal CSS DPI setting from an extension is currently unsupported [https://bugzilla.mozilla.org/show_bug.cgi?id=1373607].\n\nIf you use Wayland, see [[Firefox#Wayland]] for instructions to enable the optional Wayland backend on {{pkg|firefox}}. This is also appicable to {{pkg|thunderbird}}.\n\n==== Chromium / Google Chrome ====\n\nChromium should use the [[#GDK 3 (GTK 3)]] settings.\n\nTo override those, use the {{ic|1=--force-device-scale-factor}} flag with a scaling value. This will scale all content and ui, including tab and font size. For example {{ic|1=chromium --force-device-scale-factor=2}}.\n\nUsing this option, a scaling factor of 1 would be normal scaling. Floating point values can be used. To make the change permanent, for Chromium, you can add it to {{ic|~/.config/chromium-flags.conf}}:\n\n{{hc|~/.config/chromium-flags.conf|2=\n--force-device-scale-factor=2\n}}\n\nTo make this work for Chrome, add the same option to {{ic|~/.config/chrome-flags.conf}} instead.\n\nIf you use a HiDPI monitor such as Retina display together with another monitor, you can use the [https://chrome.google.com/webstore/detail/resolution-zoom/enjjhajnmggdgofagbokhmifgnaophmh reszoom] extension in order to automatically adjust the zoom level for the active screen.\n\nIf using Wayland session, you should [[Chromium#Native Wayland support|enable]] native wayland support to avoid blurriness. See also [[Chromium#Incorrect HiDPI rendering]].\n\n==== Opera ====\n\nOpera should use the [[#GDK 3 (GTK 3)]] settings.\n\nTo override those, use the {{ic|1=--alt-high-dpi-setting=''X''}} command line option, where X is the desired DPI. For example, with {{ic|1=--alt-high-dpi-setting=144}} Opera will assume that DPI is 144.  Newer versions of opera will auto detect the DPI using the font DPI setting (in KDE: the force font DPI setting.)\n\n=== Gimp 2.10 ===\n\nTo fix toolbar icon sizes, update ''Preferences > Interface > Icon Theme > Custom icon size'' to {{ic|1=huge}} or other value.\n\nIf menu fonts are still too small you can update an existing theme by copying it from {{ic|/usr/share/gimp/2.0/themes/}} into {{ic|~/.config/GIMP/2.10/themes/}} and changing {{ic|gtk-font-name}} and {{ic|font_name}} in {{ic|gtkrc}} into something bigger like {{ic|1=Sans 30}}. Then select the new theme from ''Preferences > Interface > Theme''. When copying make sure to rename the new directory into something different from the original name (example ''Dark > DarkHighDPI'').\n\nYou can also try using [https://github.com/jedireza/gimp-hidpi gimp-hidpi] (installation instructions are outdated and refer to version 2.8, in Gimp 2.10 the theme should be installed into {{ic|~/.config/GIMP/2.10/themes/}})\n\nOn the latest versions of {{AUR|gimp-devel}}, Wayland and HiDPI are both fully supported. Icons and text can be scaled from ''Preferences > Interface > Icon Theme''/''Display'' respectively.\n\n=== Inkscape ===\n\nTo scale the icons to a \"usable\" size go to ''Preferences > Interface'' and set the icon size to Large or Larger[https://web.archive.org/web/20171118050743/http://www.inkscapeforum.com/viewtopic.php?t=18684][https://wiki.inkscape.org/wiki/index.php/HiDPI].\n\n=== Java applications ===\n\n==== AWT/Swing ====\n\nJava applications using the ''AWT/Swing'' framework can be scaled by defining the {{ic|sun.java2d.uiScale}} VM property when invoking {{ic|java}}. The value can be an integer percentage value, or a float value. For example,\n\n java -Dsun.java2d.uiScale=2 -jar ''some_swing_application''.jar\n java -Dsun.java2d.uiScale=300% -jar ''some_swing_application''.jar\n\nSince Java 9 the {{ic|GDK_SCALE}} environment variable is used to scale Swing applications accordingly.\n\nNote that at this point, Java ''AWT/Swing'' (up to including OpenJDK 13) only effectively supports integer values. A setting of {{ic|1=-Dsun.java2d.uiScale=250%}} or {{ic|1=GDK_SCALE=2.5}} will be treated as if it were set to {{ic|1=-Dsun.java2d.uiScale=2}} resp. {{ic|1=GDK_SCALE=2}}.\n\n==== JavaFX ====\n\nJava applications using ''JavaFX'' can be scaled by defining the {{ic|glass.gtk.uiScale}} VM property when invoking {{ic|java}}. The value can be an integer percentage value, an integer DPI value (where {{ic|96dpi}} represents a scale factor of {{ic|100%}}, and for example {{ic|192dpi}} represents a scale factor of {{ic|200%}}), or a float value. For example,\n\n java -Dglass.gtk.uiScale=200% -jar ''some_jfx_application''.jar\n java -Dglass.gtk.uiScale=192dpi -jar ''some_jfx_application''.jar\n java -Dglass.gtk.uiScale=2.0 -jar ''some_jfx_application''.jar\n\n''JavaFX'' perfectly well supports fractions. Using values like {{ic|1=-Dglass.gtk.uiScale=250%}} or {{ic|1=-Dglass.gtk.uiScale=2.5}} will deliver the expected result.\n\n==== Mixed AWT/Swing and JavaFX ====\n\nSome Java applications mix ''JavaFX'' and ''AWT/Swing'' (via {{ic|javafx.embed.swing.JFXPanel}}). In that case, the settings for ''AWT/Swing'' will also affect ''JavaFX'', and setting {{ic|-Dglass.gtk.uiScale}} will have no effect.\n\n==== JetBrains IDEs ====\n\nJetBrains products (IntelliJ IDEA and other IDEs) support two HiDPI modes (JRE-managed and IDE-managed). The sequence for determining system scale factor is well documented at [https://intellij-support.jetbrains.com/hc/en-us/articles/360007994999-HiDPI-configuration]:\n\n# Java property \u2013 {{ic|-Dsun.java2d.uiScale}}\n# {{man|1|gsettings}} \u2013 {{ic|ubuntu.user-interface/scale-factor}} or {{ic|org.gnome.desktop.interface/scaling-factor}}\n# {{ic|GDK_SCALE}} and {{ic|GDK_DPI_SCALE}}\n# [[Xresources]] \u2013 {{ic|Xft.dpi}}\n# 1.0\n\nFor troubleshooting, consult the \"Show HiDPI Info\" dialog via [https://www.jetbrains.com/help/idea/searching-everywhere.html search everywhere \"Shift Shift\"].\n\nWhen using per-monitor scaling, an issue might occur where IntelliJ fails to recognize the real, original monitor resolution.\nTo remediate this problem some people have success by adding the {{ic|1=-Dsun.java2d.uiScale.enabled=true}} option to the {{ic|''ide_name''.vmoptions}} file (''Help > Edit custom VM options'').\n\nIf this does not work, the experimental GTK option {{ic|scale-monitor-framebuffer}} might be enabled on Wayland ([[#Wayland|see above]]). Currently JetBrains products run on Xwayland and thus [https://youtrack.jetbrains.com/issue/IDEA-228070 have no native Wayland support yet]. This makes the rendering in JetBrains products incompatible with the monitor scaling framebuffer. Disabling the framebuffer thus might solve blurry font/rendering issues for JB products, but alas results in disabled fractional scaling.\n\n==== Maple ====\n\nMaple can be scaled for HiDPI monitors using the AWT/Swing solution. But it has to be added inside your Maple installation directory to {{ic|''maple-directory''/bin/maple}} to the {{ic|JVM_OPTIONS}}:\n\n{{hc|''maple-directory''/bin/maple|2=\n...\nJVM_OPTIONS=\"-Dsun.java2d.uiScale=2 ...\"\n...\n}}\n\nAlternatively, the {{ic|GDK_SCALE}} environment variable can be used to start the application scaled:\n\n $ GDK_SCALE=2 ''maple-directory''/bin/xmaple %f\n\n=== LibreOffice ===\n\n{{Remove|1=The bug seems [https://bugs.documentfoundation.org/show_bug.cgi?id=137924 fixed].}}\n\n[[LibreOffice]] on all VCL backends take setting from there respective toolkits. There is a bug where the {{ic|kf5}} backend on Wayland does not scale [https://bugs.documentfoundation.org/show_bug.cgi?id=137924]. Use the {{ic|gtk3}} VCL backend instead. See [[LibreOffice#Theme]].\n\n=== MATLAB ===\n\nRecent versions (R2017b) of [[MATLAB]] allow to set the scale factor[https://www.mathworks.com/matlabcentral/answers/406956-does-matlab-support-high-dpi-screens-on-linux]:\n\n >> s = settings;s.matlab.desktop.DisplayScaleFactor\n >> s.matlab.desktop.DisplayScaleFactor.PersonalValue = 2\n\nThe settings take effect after MATLAB is restarted.\n\nThis can become tedious if you need to change the scaling frequently. To simplify this, consider using the following script:\n\n{{hc|~/bin/matlab-scale|2=\n#!/bin/sh\nexec matlab -r \"s = settings;s.matlab.desktop.DisplayScaleFactor.PersonalValue=$1;quit\" -nodesktop -nosplash\n}}\n\nTo change the display scaling to 3:\n\n $ matlab-scale 3\n\n=== Mono applications ===\n\nAccording to [https://bugzilla.xamarin.com/35/35870/bug.html]{{Dead link|2023|04|23|status=domain name not resolved}}, Mono applications should be scalable like [[#GDK 3 (GTK 3)|GTK 3]] applications. The precise method depends on the GUI library: GtkSharp obviouslys points back to Gtk, while the usual Windows Forms (libgdiplus) simply detects Xft settings.\n\n=== NetBeans ===\n\nNetBeans allows the font size of its interface to be controlled using the {{ic|1=--fontsize}} parameter during startup. To make this change permanent edit the {{ic|1=/usr/share/netbeans/etc/netbeans.conf}} file and append the {{ic|1=--fontsize}} parameter to the {{ic|1=netbeans_default_options}} property.[https://web.archive.org/web/20210117211145/http://wiki.netbeans.org/FaqFontSize]\n\nThe editor fontsize can be controlled from ''Tools > Option > Fonts & Colors''.\n\nThe output window fontsize can be controlled from ''Tools > Options > Miscelaneous > Output''\n\n=== OBS Studio ===\n\nOBS 29 supports HiDPI setups without any extra configuration.\n\nFor older versions of OBS, the recommendation was to set the environment variable {{ic|1=QT_AUTO_SCREEN_SCALE_FACTOR=0}} to disable [https://doc.qt.io/qt-5/highdpi.html#migrate-existing-applications Qt\u2019s hi-dpi migration mode] and install the Yami theme. Do not use the Yami theme with OBS 29 or newer, as it is not necessary anymore and will cause buggy behavior.\n\n=== Rofi ===\n\nRofi defaults to 96 DPI and relies on its own configuration only\n{{hc|~/.config/rofi/config.rasi|2=\nconfiguration {\n    \u2026\n    dpi: 150;\n    \u2026\n}\n}}\n\n=== Skype ===\n\nSkype for Linux ({{AUR|skypeforlinux-bin}} package) uses [[#GDK 3 (GTK 3)]].\n\n=== Spotify ===\n\nYou can change scale factor by simple {{ic|Ctrl++}} for zoom in, {{ic|Ctrl+-}} for zoom out and {{ic|Ctrl+0}} for default scale. Scaling setting will be saved in {{ic|~/.config/spotify/Users/YOUR-SPOTIFY-USER-NAME/prefs}}, you may have to create this file by yourself:\n\n{{hc|~/.config/spotify/Users/YOUR-SPOTIFY-USER-NAME/prefs|2=\napp.browser.zoom-level=100\n}}\n\nAlso Spotify can be launched with a custom scaling factor which will be multiplied with setting specified in {{ic|~/.config/spotify/Users/YOUR-SPOTIFY-USER-NAME/prefs}}, for example\n\n $ spotify --force-device-scale-factor=1.5\n\n=== Steam ===\n\n==== Official HiDPI support ====\n\n* Starting on 25 of January 2018 in the beta program there is actual support for HiDPI and it should be automatically detected.\n* ''Steam > Settings > Interface'', check ''Enlarge text and icons based on monitor size'' (restart required)\n* If it is not automatically detected, use {{ic|1=GDK_SCALE=2}} to set the desired scale factor.\n* If the above fails, use {{ic|1=steam -forcedesktopscaling 2}} or set {{ic|1=STEAM_FORCE_DESKTOPUI_SCALING=2.0}}. [https://github.com/ValveSoftware/steam-for-linux/issues/9209#issuecomment-1594505259] As of the June 2023 UI overhaul, this parameter also supports non-integer scale factors, such as {{ic|1.25}}.\n\n==== Unofficial ====\n\nThe [https://github.com/MoriTanosuke/HiDPI-Steam-Skin HiDPI-Steam-Skin] can be installed to increase the font size of the interface. While not perfect, it does improve usability.\n\n{{Note|The README for the HiDPI skin lists several possible locations for where to place the skin. The correct folder out of these can be identified by the presence of a file named {{ic|1=skins_readme.txt}}.}}\n\n[https://steamcommunity.com/groups/metroskin/discussions/0/517142253861033946/ MetroSkin Unofficial Patch] also helps with HiDPI on Steam with Linux.\n\n=== Sublime Text 3 ===\n\nSublime Text 3 has full support for display scaling. Go to ''Preferences > Settings > User Settings'' and add {{ic|\"ui_scale\": 2.0}} to your settings.\n\n=== Thunderbird ===\n\nSee [[#Firefox]]. To access {{ic|about:config}}, go to ''Edit > Preferences > Advanced >Config editor''.\n\n=== VirtualBox ===\n\n{{Note|This only applies to KDE with scaling enabled.}}\n\nVirtualBox also applies the system-wide scaling to the virtual monitor, which reduces the maximum resolution inside VMs by your scaling factor (see [https://www.virtualbox.org/ticket/16604]).\n\nThis can be worked around by calculating the inverse of your scaling factor and manually setting this new scaling factor for the VirtualBox execution, e.g.\n\n $ QT_SCALE_FACTOR=0.5 VirtualBoxVM --startvm ''vm-name''\n\n=== VMware ===\n\nText in the VMware application is rendered at an appropriate size following the system configuration, but icons are small and UI elements have little padding between them.\n\nAs described in [[#GDK 3 (GTK 3)]], you can use {{ic|GDK_SCALE}} to further scale up the entire UI (including icons & padding) and then use {{ic|GDK_DPI_SCALE}} to scale only the text back down to a reasonable size.\n\nFor example, to get a final 2x scale factor:\n\n $ GDK_SCALE=2 GDK_DPI_SCALE=0.5 vmware\n\n=== Wine applications ===\n\nRun\n\n $ winecfg\n\nand change the \"dpi\" setting found in the \"Graphics\" tab. This only affects the font size.\n\n=== Zathura document viewer ===\n\nNo modifications required for document viewing.\n\nUI text scaling is specified via [https://pwmt.org/projects/zathura/documentation/ configuration file] (note that \"font\" is a [https://pwmt.org/projects/girara/options/ girara option]):\n\n set font \"monospace normal 20\"\n\n=== Zoom ===\n\nSet the {{ic|scaleFactor}} variable in {{ic|~/.config/zoomus.conf}}.\n\nFor the Flatpak version, set the environment variable {{ic|QT_SCALE_FACTOR}} (e.g. to 0.5 [https://old.reddit.com/r/Zoom/comments/hat5af/linux_client_ui_elements_too_large_after_update/]). This can be easily done with [https://flathub.org/apps/details/com.github.tchx84.Flatseal Flatseal], if using a GUI tool is preferred.\n\n=== Gazebo ===\n\nGazebo only renders an upper left of a view instead of the whole view. To fix this a Qt enviorment variable must be set.\n\nTo run Gazebo:\n\n $ QT_SCREEN_SCALE_FACTORS=[1.0] gazebo\n\nTo run a ROS simulation:\n\n $ TURTLEBOT3_MODEL=burger QT_SCREEN_SCALE_FACTORS=[1.0] roslaunch turtlebot3_gazebo turtlebot3_world.launch\n\nMaking an alias such as {{ic|1=gazebo=\"QT_SCREEN_SCALE_FACTORS=[1.0] gazebo\"}} works for the first case but not for the second.\n\n=== Fcitx ===\n\nFcitx preedit {{ic|FontSize}} can be changed in {{ic|~/.config/fcitx/conf/fcitx-classic-ui.config}}.\n\nFor Fcitx5, set {{ic|Font}} with a size inside double quotes in {{ic|~/.config/fcitx5/conf/classicui.conf}}.\n\n=== Unsupported applications, via a network layer ===\n\n{{Pkg|xpra}} includes a [https://github.com/Xpra-org/xpra/blob/4d73c3644d6692bd51376296ed913f18a809f1a9/docs/CHANGELOG.md#41-2021-02-26 run_scaled] script which can be used to scale applications.\n\nAnother approach is to run the application full screen and without decoration in its own VNC desktop. Then scale the viewer. With {{AUR|vncdesk-git}} you can set up a desktop per application, then start server and client with a simple command such as {{ic|vncdesk 2}}.\n\n[[x11vnc]] has an experimental option {{ic|-appshare}}, which opens one viewer per application window. Perhaps something could be hacked up with that.\n\n=== Unsupported applications, via Weston ===\n\nThere is a no-network, potentially GPU-accelerated solution to scale old/unsupported applications via Weston. The basic example goes as:\n\n $ weston --xwayland --socket=testscale --scale=2\n $ DISPLAY=:1 WAYLAND_DISPLAY=testscale ''your_app''\n\nNote 1: You can make it look nicer. Create a dedicated {{ic|weston.ini}} and use it with {{ic|weston --config}}:\n\n [core]\n idle-time=0\n [shell]\n panel-position=none\n locking=false\n\nNote 2: Adjust your {{ic|DISPLAY}} according to your system, {{ic|:1}} is simply the default that comes after the main {{ic|:0}}. Check files created in {{ic|/tmp/.X11-unix}} to do that.\n\nNote 3: If you want a separate window per each scaled app, adjust the {{ic|--socket}} parameter to weston and {{ic|WAYLAND_DISPLAY}} + {{ic|DISPLAY}} for each started app. Scripting that is not easy because Xorg display has to be a small-ish integer, but you can create a semi-safe script to infer it.\n\nNote 4: It is not fully tested yet whether weston and xwayland truly off-board the heavy parts to the GPU. At least {{ic|weston}} advertises to do so, but no tests on that were done yet. Please edit if you make the GPU usage tests.\n\n== Multiple displays ==\n\nThe HiDPI setting applies to the whole desktop, so non-HiDPI external displays show everything too large. However, note that setting different scaling factors for different monitors is already supported in [[Wayland]].\n\n=== Side display ===\n\nOne workaround is to use [[xrandr]]'s {{ic|scale}} option. To have a non-HiDPI monitor (on DP1) right of an internal HiDPI display (eDP1), one could run:\n\n $ xrandr --output eDP-1 --auto --output DP-1 --auto --scale 2x2 --right-of eDP-1\n\nWhen extending above the internal display, you may see part of the internal display on the external monitor. In that case, specify the position manually.\n\nYou may adjust the {{ic|sharpness}} parameter on your monitor settings to adjust the blur level introduced with scaling.\n\n{{Note|1=<nowiki/>\n* Above solution with {{ic|--scale 2x2}} does not work on some [[NVIDIA]] cards. No solution is currently available. [https://bbs.archlinux.org/viewtopic.php?pid=1670840] A potential workaround exists with configuring {{ic|1=ForceFullCompositionPipeline=On}} on the {{ic|CurrentMetaMode}} via {{ic|nvidia-settings}}. For more info see [https://askubuntu.com/a/979551].\n* If you are using the {{ic|modesetting}} driver you will get mouse flickering. This can be solved by scaling your non-scaled screen by 0.9999x0.9999.}}\n\n=== Multiple external monitors ===\n\nThere might be some problems in scaling more than one external monitors which have lower dpi than the built-in HiDPI display. In that case, you may want to try downscaling the HiDPI display instead, with e.g.\n\n $ xrandr --output eDP1 --scale 0.5x0.5 --output DP2 --right-of eDP1 --output HDMI1 --right-of DP2\n\nIn addition, when you downscale the HiDPI display, the font on the HiDPI display will be slightly blurry, but it is a different kind of bluriness compared with the one introduced by upscaling the external displays. You may compare and see which kind of bluriness is less problematic for you.\n\n=== Mirroring ===\n\nIf all you want is to mirror (\"unify\") displays, this is easy as well:\n\nWith AxB your native HiDPI resolution (for ex 3200x1800) and CxD your external screen resolution (e.g. 1920x1200)\n\n $ xrandr --output HDMI --scale [A/C]x[B/D]\n\nIn this example which is QHD (3200/1920 = 1.66 and 1800/1200 = 1.5)\n\n $ xrandr --output HDMI --scale 1.66x1.5\n\nFor UHD to 1080p (3840/1920=2 2160/1080=2)\n\n $ xrandr --output HDMI --scale 2x2\n\nYou may adjust the {{ic|sharpness}} parameter on your monitor settings to adjust the blur level introduced with scaling.\n\n=== Tools ===\n\nThere are several tools which automate the commands described above.\n\n* [https://gist.github.com/wvengen/178642bbc8236c1bdb67 This script] extend a non-HiDPI external display above a HiDPI internal display.\n* [https://github.com/ashwinvis/xrandr-extend xrandr-extend].\n* {{AUR|xlayoutdisplay}} is a CLI front end for xrandr which detects and sets correct DPI: [https://github.com/alex-courtis/xlayoutdisplay README]\n\n== Linux console (tty) ==\n\n=== In-kernel fonts ===\n\nThe [[Linux console]] changes the font to {{ic|TER16x32}} (based on {{ic|ter-i32b}} from {{Pkg|terminus-font}}[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ac8b6f148fc97e9e10b48bd337ef571b1d1136aa]) based on the vertical and horizontal pixel count of the display[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dfd19a5004eff03755967086aa04254c3d91b8ec] regardless of its physical size. If your monitor is not recognised as HiDPI, the default font can be changed. In that case, specify {{ic|1=fbcon=font:TER16x32}} in the [[kernel command line]]. 32pixel fonts are the maximum supported by the Linux kernel, in some cases this may not be enough.\n\n=== Fonts outside the kernel (tty) ===\n\nThe largest fonts present in the {{Pkg|kbd}} package are {{ic|latarcyrheb-sun32}} and {{ic|solar24x32}}. Other packages like {{Pkg|terminus-font}} contain further alternatives, such as {{ic|ter-132n}} (normal) and {{ic|ter-132b}} (bold). See [[Linux console#Fonts]] for configuration details and [[Linux console#Persistent configuration]] in particular for applying the font setting during the early userspace boot sequence.\n\nAfter changing the font, it is often garbled and unreadable when changing to other virtual consoles ({{ic|tty2}}\u2013{{ic|6}}). To fix this you can [[Kernel mode setting#Forcing modes and EDID|force specific mode]] for KMS, such as {{ic|1=video=2560x1600@60}} (substitute in the native resolution of your HiDPI display), and reboot. Using small resolutions will make the text look bigger, but also pixelated.\n\nUsers booting though [[UEFI]] may experience the console and [[boot loader]] being constrained to a low resolution despite correct [[KMS]] settings being set. This can be caused by legacy/BIOS boot being enabled in UEFI settings. Disabling legacy boot to bypass the compatibility layer should allow the system to boot at the correct resolution.\n\n=== Modern HiDPI support (kmscon) ===\n\nFor real HiDPI support, see [[KMSCON]] instead of changing the font size in the tty.\n\n== See also ==\n\n* [https://www.phoronix.com/scan.php?page=article&item=linux_uhd4k_gpus Ultra HD 4K Linux Graphics Card Testing] (Nov 2013)\n* [https://www.eizo.com/library/basics/pixel_density_4k/ Understanding pixel density]\n* [http://wok.oblomov.eu/tecnologia/mixed-dpi-x11/ Mixed DPI and the X Window System]"
                    }
                ]
            },
            "20549": {
                "pageid": 20549,
                "ns": 0,
                "title": "XDG Base Directory",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Freedesktop.org]]\n[[Category:Configuration files]]\n[[Category:Development]]\n[[ja:XDG Base Directory]]\n[[pt:XDG Base Directory]]\n{{Related articles start}}\n{{Related|Dotfiles}}\n{{Related|XDG user directories}}\n{{Related articles end}}\n\nThis article summarizes the [https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html XDG Base Directory specification] in [[#Specification]] and tracks software support in [[#Support]].\n\n== Specification ==\n\nPlease read the [https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html full specification]. This section will attempt to break down the essence of what it tries to achieve.\n\nOnly {{ic|XDG_RUNTIME_DIR}} is set by default through {{man|8|pam_systemd}}. It is up to the user to explicitly define the other variables according to the specification.\n\nSee [[Environment variables#Globally]] for information on defining variables.\n\n=== User directories ===\n\n* {{ic|XDG_CONFIG_HOME}}\n** Where user-specific configurations should be written (analogous to {{ic|/etc}}).\n** Should default to {{ic|$HOME/.config}}.\n\n* {{ic|XDG_CACHE_HOME}}\n** Where user-specific non-essential (cached) data should be written (analogous to {{ic|/var/cache}}).\n** Should default to {{ic|$HOME/.cache}}.\n\n* {{ic|XDG_DATA_HOME}}\n** Where user-specific data files should be written (analogous to {{ic|/usr/share}}).\n** Should default to {{ic|$HOME/.local/share}}.\n\n* {{ic|XDG_STATE_HOME}}\n** Where user-specific state files should be written (analogous to {{ic|/var/lib}}).\n** Should default to {{ic|$HOME/.local/state}}.\n\n* {{ic|XDG_RUNTIME_DIR}}\n** Used for non-essential, user-specific data files such as sockets, named pipes, etc.\n** Not required to have a default value; warnings should be issued if not set or equivalents provided.\n** Must be owned by the user with an access mode of {{ic|0700}}.\n** Filesystem fully featured by standards of OS.\n** Must be on the local filesystem.\n** May be subject to periodic cleanup.\n** Modified every 6 hours or set sticky bit if persistence is desired.\n** Can only exist for the duration of the user's login.\n** Should not store large files as it may be mounted as a tmpfs.\n** pam_systemd sets this to {{ic|/run/user/$UID}}.\n\n=== System directories ===\n\n* {{ic|XDG_DATA_DIRS}}\n** List of directories separated by {{ic|:}} (analogous to {{ic|PATH}}).\n** Should default to {{ic|/usr/local/share:/usr/share}}.\n\n* {{ic|XDG_CONFIG_DIRS}}\n** List of directories separated by {{ic|:}} (analogous to {{ic|PATH}}).\n** Should default to {{ic|/etc/xdg}}.\n\n== Support ==\n\n{{Expansion|The current supported/partial/hardcoded split is not detailed enough and can be misleading. The tables could be merged into one (with more fields added on how the programs work with the specification) or differently named categories could be used.|section=Add description of support categories}}\n\nThis section exists to catalog the growing set of software using the [https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html XDG Base Directory Specification] introduced in 2003.\nThis is here to demonstrate the viability of this specification by listing commonly found dotfiles and their support status.\nFor those not currently supporting the Base Directory Specification, workarounds will be demonstrated to emulate it instead.\n\nThe workarounds will be limited to anything not involving patching the source, executing code stored in [[environment variables]] or compile-time options.\nThe rationale for this is that configurations should be portable across systems and having compile-time options prevent that.\n\nHopefully this will provide a source of information about exactly what certain kinds of dotfiles are and where they come from.\n\n=== Contributing ===\n\nWhen contributing make sure to use the correct section.\n\nNothing should require code evaluation, patches or compile-time options to gain support and anything which does must be deemed hardcoded.\nAdditionally, if the process is error prone or difficult, it should also be classified as hardcoded.\n\n* The first column should be either a link to an internal article, a [[Template:Pkg]] or a [[Template:AUR]].\n* The second column is for any legacy files and directories the project had (one per line), this is done so people can find them even if they are no longer read.\n* In the third, try to find the commit or version a project switched to XDG Base Directory or any open discussions and include them in the next two columns (two per line).\n* The last column should include any appropriate workarounds or solutions. Please verify that your solution is correct and functional.\n\n=== Supported ===\n\n{| class=\"wikitable sortable\" style=\"width: 100%\"\n! Application\n! Legacy Path\n! Supported Since\n! Discussion\n! Notes\n|-\n| {{Pkg|act}}\n| {{ic|~/.actrc}}\n| [https://github.com/nektos/act/pull/1656 1656]\n[https://github.com/nektos/act/pull/2195 2195]\n| [https://github.com/nektos/act/issues/1678]\n| {{ic|XDG_CONFIG_HOME/act/actrc}}\nIf present {{ic|~/.actrc}} will be merged with the XDG path config.\n|-\n| [[aerc]]\n| \n| [https://git.sr.ht/~rjarry/aerc/commit/fff1664 fff1664]\n|\n| {{ic|XDG_CONFIG_HOME/aerc/aerc.conf}}\n|-\n| [[ALSA]]\n| {{ic|~/.asoundrc}}\n| [https://github.com/alsa-project/alsa-lib/commit/577df365f66ee09579864fc771136e690927b3bf 577df36]\n[https://github.com/alsa-project/alsa-lib/releases/tag/v1.2.3 1.2.3]\n| [https://github.com/alsa-project/alsa-lib/issues/49]\n| {{ic|XDG_CONFIG_HOME/alsa/asoundrc}}\n|-\n| {{AUR|anaconda}}\n| {{ic|~/.conda/.condarc}}, {{ic|~/.conda/condarc}}, {{ic|~/.conda/condarc.d/}}, {{ic|~/.condarc}}\n| [https://github.com/conda/conda/blob/main/CHANGELOG.md#4110-2021-11-22 4.11.0]\n| [https://conda.io/projects/conda/en/latest/user-guide/configuration/use-condarc.html#searching-for-condarc] [https://github.com/conda/conda/pull/10982]\n|\n|-\n| [https://developer.android.com/studio/index.html Android Studio]\n| {{ic|~/.AndroidStudioX.X}}\n| [https://developer.android.com/studio/intro/studio-config#file_location Android Studio 4.1]\n|\n|\n XDG_CONFIG_HOME/Google/AndroidStudioX.X\n XDG_DATA_HOME/Google/AndroidStudioX.X\n XDG_CACHE_HOME/Google/AndroidStudioX.X\n[https://developer.android.com/studio/intro/studio-config#file_location Location overview by Google] does not mention XDG - paths could be hardcoded instead of using the proper variable, though that is unlikely as Intellij IDEA, which Android Studio is based on, implements it properly as well\n|-\n| [[Anki]]\n| {{ic|~/Anki}}, {{ic|~/Documents/Anki}}\n|\n| [https://github.com/dae/anki/pull/49] [https://github.com/dae/anki/pull/58] [https://docs.ankiweb.net/files.html]\n| Uses {{ic|$XDG_DATA_HOME/Anki2}} as default if no older location exists, can be changed by using {{ic|1=anki -b <anki_dir>}}\n|-\n| {{AUR|antimicrox}}\n| {{ic|~/.antimicro}}, {{ic|~/.antimicrox}}\n| [https://github.com/Antimicrox/antimicrox/commit/edba864 edba864]\n| [https://github.com/Antimicro/antimicro/issues/5]\n| \n|-\n| {{Aur|apvlv}}\n| {{ic|~/.apvlvrc}}\n| [https://github.com/naihe2010/apvlv/commit/ed0e0112b05b0cafa13ca4e215ee559c82194caf]\n| [https://github.com/naihe2010/apvlv/issues/70]\n| Uses {{ic|XDG_CONFIG_HOME/apvlv/apvlvrc}} now if it exist.\n|-\n| [[aria2]]\n| {{ic|~/.aria2}}\n| [https://github.com/tatsuhiro-t/aria2/commit/8bc1d37 8bc1d37]\n| [https://github.com/tatsuhiro-t/aria2/issues/27]\n|\n XDG_CONFIG_HOME/aria2/\n XDG_CACHE_HOME/aria2/\n|-\n| {{Pkg|atuin}}\n| {{ic|~/.config/atuin}} {{ic|~/.local/share/atuin}}\n| [https://github.com/ellie/atuin/commit/156893d774b4da5b541fdbb08428f9ec392949a0 156893d]\n|\n|\n XDG_CONFIG_HOME/atuin/config.toml\n XDG_DATA_HOME/atuin/history.db\n|-\n| {{Pkg|asunder}}\n| {{ic|~/.asunder}} {{ic|~/.asunder_album_artist}} {{ic|~/.asunder_album_genre}} {{ic|~/.asunder_album_title}}\n| [https://littlesvr.ca/bugs/show_bug.cgi?id=31 2.9.0]{{Dead link|2021|05|17|status=SSL error}}\n| [https://littlesvr.ca/bugs/show_bug.cgi?id=52]{{Dead link|2021|05|17|status=SSL error}}\n| Uses {{ic|XDG_CONFIG_HOME/asunder/asunder}} for {{ic|~/.asunder}} and {{ic|XDG_CACHE_HOME/asunder/asunder_album_...}} for the other 3 files. Legacy paths are not removed after migration, they have to be deleted manually.\n|-\n| {{Pkg|audacity}}\n| {{ic|~/.audacity-data/}}\n| [https://github.com/audacity/audacity/releases/tag/Audacity-3.2.0 3.2.0]\n| [https://bugzilla.audacityteam.org/show_bug.cgi?id=2201]\n| Uses new locations if legacy do not exist:\n XDG_CONFIG_HOME/audacity\n XDG_DATA_HOME/audacity\n|-\n| {{Pkg|btop}}\n| \n| [https://github.com/aristocratos/btop/commit/b5e709d b5e709d]\n| \n| {{ic|XDG_CONFIG_HOME/btop}}\n|-\n| {{Pkg|binwalk}}\n| {{ic|~/.binwalk}}\n| [https://github.com/ReFirmLabs/binwalk/commit/2051757 2051757]\n| [https://github.com/ReFirmLabs/binwalk/issues/216]\n| {{ic|XDG_CONFIG_HOME/binwalk}}\n|-\n| {{Pkg|bitwarden-cli}}\n| {{ic|~/.config/Bitwarden CLI}}\n| [https://github.com/bitwarden/cli/releases/tag/v1.7.1 1.7.1]\n| [https://github.com/bitwarden/cli/pull/46]\n|\n XDG_CONFIG_HOME/Bitwarden CLI\n XDG_DATA_HOME/audacity\n\nThe {{ic|BITWARDENCLI_APPDATA_DIR}} environment variable takes precedence.\n\nCurrently contains a single {{ic|data.json}} file with all the vault data, so it ought to belong in {{ic|XDG_DATA_HOME}}\n|-\n| [[Blender]]\n| {{ic|~/.blender}}\n| [https://git.blender.org/gitweb/gitweb.cgi/blender.git/commit/4293f47 4293f47]\n| [https://developer.blender.org/T28943]\n|\n|- \n| {{Pkg|byobu}}\n| {{ic|~/.byobu}}\n| [https://launchpad.net/byobu/+milestone/4.17 4.17]\n| [https://bugs.launchpad.net/byobu/+bug/553105]\n| \n{{ic|XDG_CONFIG_HOME/byobu}}\n\nLegacy path takes precedence if present, or if {{ic|XDG_CONFIG_HOME}} is ''not'' set.\n|-\n| [https://www.haskell.org/cabal cabal]\n| {{ic|~/.cabal/}}\n| [https://github.com/haskell/cabal/commit/9f7dc55 9f7dc55]\n| [https://github.com/haskell/cabal/issues/680]\n|\n|-\n| {{Pkg|calcurse}}\n| {{ic|~/.calcurse}}\n| [https://github.com/lfos/calcurse/commit/04162d 04162d]\n| [https://github.com/lfos/calcurse/pull/254] [https://github.com/lfos/calcurse/issues/252]\n|\n XDG_CONFIG_HOME/calcurse\n XDG_DATA_HOME/calcurse\n\nIf the legacy path {{ic|~/.calcurse}} is present, it will take precedence.\n|-\n| {{Pkg|calibre}}\n|\n|\n|\n|\n|-\n| {{Pkg|ccache}}\n| {{ic|~/.ccache}}\n| [https://ccache.dev/releasenotes.html#_ccache_4_0 4.0]\n| [https://github.com/ccache/ccache/issues/191]\n|\n XDG_CACHE_HOME/ccache\n XDG_CONFIG_HOME/ccache/ccache.conf\n|-\n| {{Pkg|catfish}}\n| {{ic|~/.config/catfish}}\n| [https://gitlab.xfce.org/apps/catfish/-/commit/af65ed25c5d9bd96647664b5f7d4db50551fed8a af65ed25]\n| [https://gitlab.xfce.org/apps/catfish/-/issues/102]\n|-\n| [https://clangd.llvm.org/config.html clangd]\n| {{ic|~/.clangd}}\n| [https://github.com/JohnHolmesII/llvm-project/commit/fdf7dcc fdf7dcc]{{Dead link|2022|09|23|status=404}}\n| [https://github.com/clangd/clangd/issues/341]\n| {{ic|XDG_CONFIG_HOME/clangd/config.yml}}\n\n{{ic|XDG_CACHE_HOME/clangd}}\n\nProject specific configuration can be specified in {{ic|proj/.clangd}}.\nConfiguration is combined when this is sensible. In case of conflicts, user config has the highest precedence, then inner project, then outer project.\n|-\n| [[Composer]]\n| {{ic|~/.composer}}\n| [https://github.com/composer/composer/releases/tag/1.0.0-beta1 1.0.0-beta1]\n| [https://github.com/composer/composer/pull/1407]\n|\n|-\n| crossnote\n| {{ic|~/.mume}}\n| [https://github.com/shd101wyy/crossnote/commit/d714a8229c3a757d52a34eadabefb0795568e37d d714a82]\n[https://github.com/shd101wyy/crossnote/archive/refs/tags/0.8.13.tar.gz 0.8.13]\n| [https://github.com/shd101wyy/crossnote/pull/234]\n| {{ic|$XDG_CONFIG_HOME/mume}}\nIf the legacy path is present, it will take precedence.\n|-\n| [[cURL]]\n| {{ic|~/.curlrc}}\n| [https://curl.se/changes.html#7_73_0 7.73.0]\n| [https://github.com/curl/curl/issues/5829]\n| {{ic|XDG_CONFIG_HOME/.curlrc}}\n|-\n| [[CUPS]]\n| {{ic|~/.cups/}}\n| [https://github.com/OpenPrinting/libcups/pull/45/commits/23b1be68803128ed701d374981c4583bcf9e7bf6 23b1be6]\n| [https://github.com/OpenPrinting/cups/issues/10]\n| \n\nlibcups added XDG support in v3 (still in beta). The version in the official repositories is still hardcoded to {{ic|~/.cups}}.\n|-\n| {{AUR|d-feet}}\n| {{ic|~/.d-feet}}\n| [https://gitlab.gnome.org/GNOME/d-feet/commit/7f6104b 7f6104b]\n|\n|\n|-\n| {{Pkg|dconf}}\n|\n|\n|\n|\n|-\n| [[Dolphin emulator]]\n| {{ic|~/.dolphin-emu}}\n| [https://github.com/dolphin-emu/dolphin/commit/a498c68 a498c68]\n| [https://github.com/dolphin-emu/dolphin/pull/2304]\n|\n|-\n| {{AUR|dr14_t.meter-git}}\n|\n| [https://github.com/simon-r/dr14_t.meter/commit/7e777ca 7e777ca]\n| [https://github.com/simon-r/dr14_t.meter/pull/30]\n| {{ic|XDG_CONFIG_HOME/dr14tmeter/}}\n|-\n| {{Pkg|dunst}}\n|\n| [https://github.com/dunst-project/dunst/commit/78b6e2b 78b6e2b]\n| [https://github.com/dunst-project/dunst/issues/22]\n| {{ic|XDG_CONFIG_HOME/dunst/}}\n|-\n| [[Emacs]]\n| {{ic|~/.emacs}} {{ic|~/.emacs.d/init.el}}\n| [https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=4118297ae2fab4886b20d193ba511a229637aea3]\n[https://www.gnu.org/savannah-checkouts/gnu/emacs/emacs.html#Releases 27.1]\n|\n| {{ic|XDG_CONFIG_HOME/emacs/init.el}}\nLegacy paths have precedence over XDG paths.  Emacs will never create {{ic|XDG_CONFIG_HOME/emacs/}}.\nWorkaround for 26.3 or older: It's possible to set {{ic|HOME}}, but it has unexpected side effects.\n|-\n| [[fish]]\n|\n|\n|\n|\n|-\n| {{Pkg|fltk}}\n| {{ic|~/.fltk/}}\n| [https://github.com/fltk/fltk/commit/7308bcdb74e34626c6459699cb57371afd7b343b 7308bcd]\n| [https://www.fltk.org/str.php?L3370+P0+S0+C0+I0+E0+V%25+Qxdg] [https://github.com/fltk/fltk/issues/79]\n| Only supported in version 1.4.0, which has not been released yet (as of 9-July-2022)\n|-\n| [[fontconfig]]\n| {{ic|~/.fontconfig}} {{ic|~/.fonts}}\n| [https://gitlab.freedesktop.org/fontconfig/fontconfig/-/commit/8c255fb 8c255fb], [https://gitlab.freedesktop.org/fontconfig/fontconfig/-/commit/437f03299bd1adc9673cd576072f1657be8fd4e0]\n|\n| Config goes in {{ic|XDG_CONFIG_HOME/fontconfig/fonts.conf}} or {{ic|XDG_CONFIG_HOME/fontconfig/conf.d/}}, fonts are stored in {{ic|XDG_DATA_HOME/fonts/}}\n|-\n| {{Pkg|fontforge}}\n| {{ic|~/.FontForge}} {{ic|~/.PfaEdit}}\n| [https://github.com/fontforge/fontforge/commit/e4c2cc7 e4c2cc7]\n|\n[https://github.com/fontforge/fontforge/issues/847]\n[https://github.com/fontforge/fontforge/issues/991]\n|\n|-\n| {{Pkg|freecad}}\n| {{ic|~/.FreeCAD}}\n| [https://github.com/FreeCAD/FreeCAD/commit/e7e2994ba e7e2994ba]\n[https://github.com/FreeCAD/FreeCAD/releases/tag/0.20 0.20.0]\n| [https://forum.freecad.org/viewtopic.php?f=9&t=63648]\n| Defaults to\n XDG_CONFIG_HOME/FreeCAD\n XDG_DATA_HOME/FreeCAD\n XDG_CACHE_HOME/FreeCAD\nlegacy path can be used with {{ic|FreeCAD --keep-deprecated-paths}}\n|-\n| {{Pkg|freerdp}}\n| {{ic|~/.freerdp}}\n| [https://github.com/FreeRDP/FreeRDP/commit/edf6e72 edf6e72]\n|\n|\n|-\n| [[Gajim]]\n| {{ic|~/.gajim}}\n| [https://dev.gajim.org/gajim/gajim/commit/3e777ea 3e777ea]\n| [https://dev.gajim.org/gajim/gajim/issues/2149]\n|\n|-\n| {{AUR|gconf}}\n| {{ic|~/.gconf}}\n| [https://gitlab.gnome.org/Archive/gconf/commit/fc28caa fc28caa]\n| [https://bugzilla.gnome.org/show_bug.cgi?id=674803]\n|-\n| [[GDB]]\n| {{ic|~/.gdbinit}}, {{ic|~/.gdb_history}}\n| [https://lists.gnu.org/archive/html/info-gnu/2021-09/msg00007.html 11.1]\n|\n| {{ic|XDG_CONFIG_HOME/gdb/gdbinit}}, {{ic|1=export GDBHISTFILE=\"$XDG_DATA_HOME\"/gdb/history}}\n|-\n| [[GIMP]]\n| {{ic|~/.gimp-x.y}} {{ic|~/.thumbnails}}\n|\n[https://gitlab.gnome.org/GNOME/gimp/commit/60e0cfe 60e0cfe]\n[https://gitlab.gnome.org/GNOME/gimp/commit/483505f 483505f]\n|\n[https://bugzilla.gnome.org/show_bug.cgi?id=166643]\n[https://bugzilla.gnome.org/show_bug.cgi?id=646644]\n|\n|-\n| [[Git]]\n| {{ic|~/.gitconfig}}, {{ic|~/.gitignore}}, {{ic|~/.gitattributes}}, {{ic|~/.git-credentials}}, {{ic|~/.gitk}}\n| [https://github.com/git/git/commit/0d94427 0d94427], [https://github.com/git/git/commit/dc79687 dc79687], [https://github.com/git/git/commit/684e40f 684e40f]\n| [https://git-scm.com/docs/git-config Git Config], [https://git-scm.com/docs/gitattributes Git Attributes], [https://git-scm.com/docs/git-credential-store Git Credentials], [https://git-scm.com/docs/gitk gitk] \n| {{ic|XDG_CONFIG_HOME/git/config}}, {{ic|XDG_CONFIG_HOME/git/ignore}}, {{ic|XDG_CONFIG_HOME/git/attributes}}, {{ic|XDG_CONFIG_HOME/git/credentials}}, {{ic|XDG_CONFIG_HOME/git/gitk}}\n|-\n| [https://github.com/google/gops gops]\n|\n| [https://github.com/google/gops/commit/71c4255 71c4255]\n|\n|\n|-\n| [[Wikipedia:gnuplot|gnuplot]]\n| {{ic|~/.gnuplot_history}}\n| [https://sourceforge.net/p/gnuplot/gnuplot-main/ci/a5562b1/ a5562b1]\n[https://sourceforge.net/p/gnuplot/gnuplot-main/merge-requests/12/]\n|\n|\n|-\n| {{AUR|goobook}}\n| {{ic|~/.goobookrc}}\n| [https://gitlab.com/goobook/goobook/-/blob/master/CHANGES.rst 3.5]\n| [https://gitlab.com/goobook/goobook/-/merge_requests/11]\n| {{ic|XDG_CONFIG_HOME/goobookrc}}\n|-\n| [[Godot Engine]]\n| {{ic|~/.godot}}\n| [https://github.com/godotengine/godot/pull/12988/commits/73049d115e190b8c356f0689a9079c3c73cc5765 73049d1]\n[https://github.com/godotengine/godot/releases/tag/3.0-stable 3.0-stable]\n| [https://github.com/godotengine/godot/issues/3513]\n|\n|-\n| [[GStreamer]]\n| {{ic|~/.gstreamer-0.10}}\n| [https://gitlab.freedesktop.org/gstreamer/gstreamer/-/commit/4e36f93 4e36f93]\n| [https://bugzilla.gnome.org/show_bug.cgi?id=518597]\n|\n|-\n| [[GTK]] 3\n|\n|\n|\n|\n|-\n| [[Haskell#Stack]]\n| {{ic|~/.stack}}\n| [https://github.com/commercialhaskell/stack/releases/tag/v2.9.3 2.9.3]\n| [https://github.com/commercialhaskell/stack/issues/4243]\n| Defaults to legacy. Use {{ic|1=export STACK_XDG=1}} to make it compliant with the spec.\nThe old method of {{ic|1=export STACK_ROOT=\"$XDG_DATA_HOME\"/stack}} still works and takes priority [https://docs.haskellstack.org/en/stable/environment_variables/#stack_xdg].\n|-\n| {{Pkg|helm}}\n| {{ic|~/.helm}}\n| [https://github.com/helm/helm/releases/tag/v3.0.0 3.0.0]\n|\n|\n|-\n| {{Pkg|htop}}\n| {{ic|~/.htoprc}}\n| [https://github.com/hishamhm/htop/commit/93233a6 93233a6]\n|\n| {{ic|XDG_CONFIG_HOME/htop/htoprc}}\n|-\n| {{Pkg|httpie}}\n| {{ic|~/.httpie}}\n| [https://github.com/httpie/httpie/commit/5af0874ed302e9ef79cec97836529ccf353e53f7 5af0874]\n| [https://github.com/httpie/httpie/issues/145]\n|\n|-\n| {{Pkg|hunspell}}\n| {{ic|~/.hunspell_default.}}\n| \n| [https://github.com/hunspell/hunspell/pull/637]\n|\n|-\n| [[i3]]\n| {{ic|~/.i3}}\n| [http://code.stapelberg.de/git/i3/commit/?id=7c130fb 7c130fb]\n|\n|\n|-\n| {{Pkg|i3blocks}}, {{AUR|i3blocks-git}}\n|\n| [https://github.com/vivien/i3blocks/commit/a1782404c7d933145b048d0d1872ea40d7a293b6]\n|\n|\n|-\n| {{Pkg|i3status}}\n| {{ic|~/.i3status.conf}}\n| [http://code.stapelberg.de/git/i3status/commit/?id=c3f7fc4 c3f7fc4]\n|\n|\n|-\n| {{Pkg|i3status-rust}}\n|\n|\n|\n|\n|-\n| [https://github.com/JetBrains/ideavim IdeaVim]\n| {{ic|~/.ideavimrc}}\n| [https://github.com/JetBrains/ideavim/pull/212 0.54.1-EAP]\n| [https://youtrack.jetbrains.com/issue/VIM-664]\n| {{ic|XDG_CONFIG_HOME/ideavim/ideavimrc}}\n|-\n| {{Pkg|imagemagick}}\n|\n|\n|\n|\n|-\n| {{Pkg|iotop-c}}\n| {{ic|~/.config/iotop}}\n|[https://github.com/Tomas-M/iotop/commit/cea6d5c7a41f2e7a842d4f244532759142af98b0]\n|[https://github.com/Tomas-M/iotop/issues/63]\n|\n|-\n| [[Inkscape]]\n| {{ic|~/.inkscape}}\n| [https://wiki.inkscape.org/wiki/index.php/Release_notes/0.47#Preferences 0.47]\n| [https://bugs.launchpad.net/inkscape/+bug/199720]\n|\n|-\n| [http://ipython.org ipython]\n| {{ic|~/.ipython}}\n| [https://ipython.readthedocs.io/en/stable/whatsnew/version8.html#re-added-support-for-xdg-config-directories 8.0.0]\n| [https://github.com/ipython/ipython/pull/13224]\n| Checks if {{ic|$XDG_CONFIG_HOME/ipython}} (or {{ic|~/.config/ipython}} if {{ic|XDG_CONFIG_HOME}} is unset) exists, otherwise it uses {{ic|~/.ipython}}.\n|-\n| [https://iwd.wiki.kernel.org/ iwd] / iwctl\n| {{ic|~/.iwctl_history}}\n| [https://git.kernel.org/pub/scm/network/wireless/iwd.git/commit/?id=d3e00d7f d3e00d7f]\n|\n|\n|-\n| {{Pkg|intellij-idea-community-edition}} /  {{AUR|intellij-idea-ultimate-edition}}\n| {{ic|~/.IntelliJIdeaXXXX.X}}\n| [https://confluence.jetbrains.com/display/IDEADEV/IntelliJ%2BIDEA%2B2020.1%2B%28201.6668.121%2Bbuild%29%2BRelease%2BNotes 2020.1]\n| [https://youtrack.jetbrains.com/issue/IDEA-22407]\n|\n XDG_CONFIG_HOME/JetBrains/IntelliJIdeaXXXX.X\n XDG_DATA_HOME/JetBrains/IntelliJIdeaXXXX.X\n XDG_CACHE_HOME/JetBrains/IntelliJIdeaXXXX.X\n|-\n| {{Pkg|josm}}\n| {{ic|~/.josm}}\n| [https://josm.openstreetmap.de/changeset/11162/josm 11162]\n| [https://josm.openstreetmap.de/ticket/6664]\n|\n|-\n| [https://github.com/jupyter jupyter]\n| {{ic|~/.jupyter}}\n| opt-in in 5.0, opt-out in 6.0, compulsory in 7.0 ([https://github.com/jupyter/jupyter_core/blob/f5ab1ac19225c7925282e9c5ae466767b4086361/CHANGELOG.md#migrate-to-standard-platform-directories changelog])\n| \n| {{ic|XDG_CONFIG_HOME/jupyter}}\n|-\n| [[Kakoune]]\n|\n|\n|\n|\n|-\n| {{AUR|keynav}}\n| {{ic|~/.keynavrc}}\n|\n|\n| {{ic|XDG_CONFIG_HOME/keynav/keynavrc}}\n|-\n| [[Core utilities|less]]\n| {{ic|~/.lesshst}}, {{ic|~/.lesskey}}\n| [https://www.greenwoodsoftware.com/less/news.590.html 590]\nfull support in [https://www.greenwoodsoftware.com/less/news.600.html 600]\n| [https://github.com/gwsw/less/issues/153]\n| The environment variables {{ic|XDG_CONFIG_HOME}} and {{ic|XDG_DATA_HOME}} '''must''' be set in version 590. This is no longer necessary when version 600 lands.\n|-\n| latexmk (in {{Pkg|texlive-binextra}})\n| {{ic|~/.latexmkrc}}\n|\n|\n|\n{{ic|XDG_CONFIG_HOME/latexmk/latexmkrc}}\n|-\n| {{Pkg|lftp}}\n| {{ic|~/.lftp}}\n| [https://github.com/lavv17/lftp/commit/21dc400 21dc400]\n| [https://www.mail-archive.com/lftp@uniyar.ac.ru/msg04301.html]\n|\n|-\n| {{AUR|lgogdownloader}}\n| {{ic|~/.gogdownloader}}\n| [https://github.com/Sude-/lgogdownloader/commit/d430af6 d430af6]\n| [https://github.com/Sude-/lgogdownloader/issues/4]\n|\n|-\n| [[LibreOffice]]\n|\n|\n[https://cgit.freedesktop.org/libreoffice/ure/commit/?id=a6f56f7 a6f56f7]\n[https://cgit.freedesktop.org/libreoffice/bootstrap/commit/?id=25bd2ee 25bd2ee]\n| [https://bugs.documentfoundation.org/show_bug.cgi?id=32263]\n|\n|-\n| {{Pkg|luarocks}}\n| {{ic|~/.luarocks}}\n| [https://github.com/luarocks/luarocks/pull/1298/commits/cd16cdd5f889024f28cc384e3d721a4f4a3261d3 cd16cdd]\n| [https://github.com/luarocks/luarocks/pull/1298]\n|\n XDG_CONFIG_HOME/luarocks\n XDG_CACHE_HOME/luarocks\n\nIf the legacy path {{ic|~/.luarocks}} is present, it will take precedence.\n|-\n| {{Pkg|mangohud}}\n|\n| [https://github.com/flightlessmango/MangoHud/commit/65b90fc 65b90fc]\n| [https://github.com/flightlessmango/MangoHud/issues/37]\n| {{ic|XDG_CONFIG_HOME/MangoHud}}\n|-\n| [[mc]]\n| {{ic|~/.mc}}\n|\n[https://github.com/MidnightCommander/mc/commit/1b99570 1b99570]\n[https://github.com/MidnightCommander/mc/commit/0b71156 0b71156]\n[https://github.com/MidnightCommander/mc/commit/ce401d7 ce401d7]\n| [https://www.midnight-commander.org/ticket/1851]\n|\n|-\n| [[Mercurial]]\n| {{ic|~/.hgrc}}\n|\n[https://www.mercurial-scm.org/repo/hg/rev/3540200 3540200]\n[https://www.mercurial-scm.org/wiki/Release4.2 4.2]\n|\n| {{ic|XDG_CONFIG_HOME/hg/hgrc}}.\n|-\n| {{Pkg|mesa}}\n|\n| [https://gitlab.freedesktop.org/mesa/mesa/-/commit/87ab26b 87ab26b]\n|\n| {{ic|XDG_CACHE_HOME/mesa}}\n|-\n| {{Pkg|milkytracker}}\n| {{ic|~/.milkytracker_config}}\n| [https://github.com/Deltafire/MilkyTracker/commit/eb487c5 eb487c5]\n| [https://github.com/Deltafire/MilkyTracker/issues/12]\n|\n|-\n| [[mlterm]]\n| {{ic|~/.mlterm/}}\n| [https://github.com/arakiken/mlterm/commit/71df0714edc7715524092213516790a24178615b 71df071]\n| [https://github.com/arakiken/mlterm/issues/42]\n| {{ic|XDG_CONFIG_HOME/mlterm/}}\n|-\n| [[mozc]]\n| {{ic|~/.mozc}}\n| [https://github.com/google/mozc/commit/91cc1e19ef34aeb12888b697fefa52907f1a834d 91cc1e1]\n| [https://github.com/google/mozc/issues/474]\n|\n|-\n| [[mpd]]\n| {{ic|~/.mpdconf}}\n| [https://github.com/MusicPlayerDaemon/MPD/commit/87b7328 87b7328]\n|\n|\n|-\n| [[mpv]]\n| {{ic|~/.mpv}}\n| [https://github.com/mpv-player/mpv/commit/cb250d4 cb250d4]\n| [https://github.com/mpv-player/mpv/pull/864]\n|\n|-\n| [[msmtp]]\n| {{ic|~/.msmtprc}}\n|\n[https://github.com/marlam/msmtp-mirror/commit/af2f409 af2f409]\nv1.6.7+\n|\n| {{ic| XDG_CONFIG_HOME/msmtp/config}}.\n|-\n| [[mutt]]\n| {{ic|~/.mutt}}\n| [https://gitlab.com/muttmua/mutt/commit/b17cd67 b17cd67]\n| [https://gitlab.com/muttmua/trac-tickets/raw/master/tickets/closed/3207-Conform_to_XDG_Base_Directory_Specification.txt]\n|\n|-\n| {{Pkg|mypaint}}\n| {{ic|~/.mypaint}}\n| [https://github.com/mypaint/mypaint/commit/cf723b7 cf723b7]\n|\n|\n|-\n| [[nano]]\n| {{ic|~/.nano/}} {{ic|~/.nanorc}}\n| [https://git.savannah.gnu.org/cgit/nano.git/commit/?id=c16e79b c16e79b]\n| [https://savannah.gnu.org/patch/?8523]\n|\n|-\n| [[ncmpcpp]]\n| {{ic|~/.ncmpcpp}}\n|\n[https://github.com/arybczak/ncmpcpp/commit/38d9f81 38d9f81]\n[https://github.com/arybczak/ncmpcpp/commit/27cd86e 27cd86e]\n|\n[https://github.com/arybczak/ncmpcpp/issues/79]\n[https://github.com/arybczak/ncmpcpp/issues/110]\n| {{ic|ncmpcpp_directory}} should be set to avoid an {{ic|error.log}} file in {{ic|~/.ncmpcpp}}.\n|-\n| [[Neovim]]\n| {{ic|~/.nvim}} {{ic|~/.nvimlog}} {{ic|~/.nviminfo}}\n| [https://github.com/neovim/neovim/commit/1ca5646bb 1ca5646bb]\n|\n[https://github.com/neovim/neovim/issues/78]\n[https://github.com/neovim/neovim/pull/3198]\n|\n|-\n| [http://0ldsk00l.ca/nestopia/ Nestopia UE]\n| {{ic|~/.nestopia/}}\n| [https://github.com/0ldsk00l/nestopia/commit/d78381198a26a10333128e9bf28bc530a610c008 610c008] [https://github.com/0ldsk00l/nestopia/releases/tag/1.51.0 1.51.0]\n| [https://github.com/0ldsk00l/nestopia/issues/343]\n|\n|-\n| [[newsboat]]\n| {{ic|~/.newsboat}}\n| [https://github.com/akrennmair/newsbeuter/commit/3c57824 3c57824]\n| [https://github.com/akrennmair/newsbeuter/pull/39]\n| It is required to create both directories [https://man.archlinux.org/man/newsboat.1#FILES]:\n\n{{ic|1=mkdir -p \"$XDG_DATA_HOME\"/newsboat \"$XDG_CONFIG_HOME\"/newsboat}}\n|-\n| [https://github.com/nodejs/node-gyp node-gyp]\n| {{ic|~/.node-gyp}}\n| [https://github.com/nodejs/node-gyp/commit/2b5ce52a 2b5ce52a]\n| [https://github.com/nodejs/node-gyp/pull/1570]\n|\n|-\n| {{AUR|np2kai-git}}\n| {{ic|~/.config/np2kai}} {{ic|~/.config/xnp2kai}}\n| [https://github.com/AZO234/NP2kai/commit/56a1cc2 56a1cc2]\n| [https://github.com/AZO234/NP2kai/pull/50]\n|\n|-\n| [[notmuch]]\n| {{ic|~/.notmuch-config}}\n|\n| [https://notmuchmail.org/pipermail/notmuch/2011/007007.html]\n| {{ic|mkdir -p $XDG_CONFIG_HOME/notmuch/default; mv ~/.notmuch-config $XDG_CONFIG_HOME/notmuch/default/config}}\n|-\n| [https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS NSS]\n| {{ic|~/.pki}}\n| [https://hg.mozilla.org/projects/nss/rev/da45424cb9a0b4d8e45e5040e2e3b574d994e254 3.42 (da45424)]\n| [https://bugzilla.mozilla.org/show_bug.cgi?id=818686]\n|\n|-\n\n| {{AUR|nteract-bin}}\n|\n| [https://github.com/nteract/nteract/commit/4593e72 4593e72]\n| [https://github.com/nteract/nteract/issues/180] [https://github.com/nteract/nteract/pull/3870]\n| [https://github.com/nteract/nteract/issues/4517 does not recognize workarounds for ipython/jupyter]\n|-\n| {{AUR|ocaml-utop}}\n| {{ic|~/.utop-history}}\n{{ic|~/.utoprc}}\n| [https://github.com/ocaml-community/utop/releases/tag/2.13.0 2.13.0]\n[https://github.com/ocaml-community/utop/commit/9729963 9729963]\n| [https://github.com/ocaml-community/utop/pull/431]\n| {{ic|XDG_STATE_HOME/utop/utop-history}}\n{{ic|XDG_CONFIG_HOME/utop/utoprc}}\n|-\n| [[OfflineIMAP]]\n| {{ic|~/.offlineimaprc}}\n| [https://github.com/OfflineIMAP/offlineimap/commit/5150de5 5150de5]\n| [https://github.com/OfflineIMAP/offlineimap/issues/32]\n| {{ic|XDG_CONFIG_HOME/offlineimap/config}}\n|-\n| {{pkg|openal}}\n| {{ic|~/.alsoftrc}}\n| [https://github.com/kcat/openal-soft/commit/3c90ed95afa1feed70e6c5655cfeec096c00c23b 3c90ed9]\n| \n| {{ic|XDG_CONFIG_HOME/alsoft.conf}}\n|-\n| {{AUR|opentyrian}}\n| {{ic|~/.opentyrian}}\n| [https://github.com/opentyrian/opentyrian/commit/39559c3 39559c3]\n| [https://web.archive.org/web/20140815181350/http://code.google.com/p/opentyrian/issues/detail?id=125]\n|\n|-\n| {{AUR|osc}}\n| {{ic|~/.oscrc}} {{ic|~/.osc_cookiejar}} \n| [https://github.com/openSUSE/osc/commit/6bc2d3f939c2518ae555fbf75e3a11cc16fc5302 6bc2d3f]\n[https://github.com/openSUSE/osc/commit/ebcf3de6abe1ae142baa5bee4c9867cc1968bad1 ebcf3de]\n|[https://github.com/openSUSE/osc/pull/940 github.com/openSUSE/osc/pull/940]\n[https://github.com/openSUSE/osc/pull/940 github.com/osc/pull/940]\n|\n{{ic|XDG_CONFIG_HOME/osc/oscrc}}\n{{ic|XDG_STATE_HOME/osc/cookiejar}}\n\nLegacy path takes precedence if it exists\n|-\n| {{Pkg|pam-u2f}}\n| {{ic|~/.config/Yubico/u2f_keys}}\n| [https://github.com/Yubico/pam-u2f/commit/ad52dd82dead525dab94ded1916dcf6334459106 ad52dd8]\n| [https://github.com/Yubico/pam-u2f/issues/9]\n| {{ic|XDG_CONFIG_HOME/Yubico/u2f_keys}}\n|-\n| {{Pkg|pandoc-cli}}\n| {{ic|~/.pandoc/}}\n| [https://github.com/jgm/pandoc/commit/0bed0ab5a308f5e72a01fa9bee76488556288862 0bed0ab]\n| [https://github.com/jgm/pandoc/issues/3582]\n|\n|-\n| [[PCManFM]]\n| {{ic|~/.thumbnails}}\n| [https://github.com/lxde/libfm/issues/57 1.3.2]\n|\n|\n|-\n| {{AUR|pcsx2}}\n| {{ic|~/.pcsx2}}\n|\n[https://github.com/PCSX2/pcsx2/commit/87f1e8f 87f1e8f]\n[https://github.com/PCSX2/pcsx2/commit/a9020c6 a9020c6]\n[https://github.com/PCSX2/pcsx2/commit/3b22f0f 3b22f0f]\n[https://github.com/PCSX2/pcsx2/commit/0a012ae 0a012ae]\n| [https://github.com/PCSX2/pcsx2/issues/352] [https://github.com/PCSX2/pcsx2/issues/381]\n| \n|-\n| {{AUR|pdfsam}}\n| {{ic|~/.openjfx}}\n|\n|\n| {{ic|1=export _JAVA_OPTIONS=-Djavafx.cachedir=\"$XDG_CACHE_HOME\"/openjfx}}\n|-\n| [https://pry.github.io/ Pry]\n| {{ic|~/.pryrc}} {{ic|~/.pry_history}}\n|\n[https://github.com/pry/pry/commit/a0be0cc7b2070edff61c0c7f10fa37fce9b730bd a0be0cc7]\n[https://github.com/pry/pry/commit/15e1fc929ed84c161abc5afc9be73488a41df397 15e1fc92]\n[https://github.com/pry/pry/commit/e9d1be0e17b294318dbb2f70f74a50486cfa044c e9d1be0e]\n| [https://github.com/pry/pry/issues/1316]\n|-\n| {{AUR|python-autoimport}}\n| {{ic|~/.config/autoimport/config.toml}}\n| [https://github.com/lyz-code/autoimport/pull/206 1.2.0]\n| [https://github.com/lyz-code/autoimport/pull/172]\n| {{ic|XDG_CONFIG_HOME/autoimport/config.toml}}\n|-\n| {{Pkg|python-black}}\n| {{ic|~/.config/black}}\n| [https://github.com/psf/black/pull/1899 21.4b0]\n| [https://github.com/psf/black/issues/1577]\n| {{ic|XDG_CONFIG_HOME/black}}, {{ic|XDG_CACHE_HOME/black/<version>/}}\n|-\n| {{Pkg|python-pylint}}\n| {{ic|~/.pylint.d}}\n| [https://github.com/PyCQA/pylint/pull/4661 2.10]\n| [https://github.com/PyCQA/pylint/issues/1364]\n| Formerly {{ic|1=export PYLINTHOME=\"$XDG_CACHE_HOME\"/pylint}}, global config still needs: {{ic|1=export PYLINTRC=\"$XDG_CONFIG_HOME\"/pylint/pylintrc}}\n|-\n| {{Pkg|python-pip}}\n| {{ic|~/.pip}}\n| [https://github.com/pypa/pip/blob/548a9136525815dff41acd845c558a0b36eb1c5f/NEWS.rst#60-2014-12-22 6.0]\n| [https://github.com/pypa/pip/issues/1733]\n|\n|-\n| {{pkg|python-pipx}}\n| {{ic|~/.local/pipx}}\n| [https://github.com/pypa/pipx/pull/1001 c3d8de9]\n| [https://github.com/pypa/pipx/issues/722]\n| For compatibility, pipx will revert to {{ic|~/.local/pipx}} if it exists. Implemented using {{Pkg|python-platformdirs}}\n|-\n| {{Pkg|python-poetry}}\n| {{ic|~/.poetry}}\n| [https://github.com/python-poetry/poetry/pull/3706]\n| [https://github.com/python-poetry/poetry/issues/2148]\n| Still creates {{ic|~/.poetry}} according to [https://github.com/python-poetry/poetry/issues/2148#issuecomment-943951697]\n|-\n| {{AUR|powershell}}\n|\n| [https://docs.microsoft.com/en-us/powershell/scripting/whats-new/what-s-new-in-powershell-core-60#filesystem 6.0]\n|\n|\n|-\n| {{Pkg|ppsspp}}\n| {{ic|~/.ppsspp}}\n| [https://github.com/hrydgard/ppsspp/commit/132fe47 132fe47]\n| [https://github.com/hrydgard/ppsspp/issues/4623]\n|\n|-\n| {{Pkg|procps-ng}}\n| {{ic|~/.toprc}}\n| [https://gitlab.com/procps-ng/procps/commit/af53e17 af53e17]\n|\n[https://gitlab.com/procps-ng/procps/merge_requests/38]\n[https://bugzilla.redhat.com/show_bug.cgi?id=1155265]\n|\n|-\n| [[pacman]]\n| {{ic|~/.makepkg.conf}}\n| [https://gitlab.archlinux.org/pacman/pacman/commit/80eca94 80eca94]\n| [https://lists.archlinux.org/archives/list/pacman-dev@lists.archlinux.org/thread/KTD2FW7YKY724UB7PT3GGP5L7TNWZYEP/]\n|\n|-\n| {{AUR|panda3d}}\n| {{ic|~/.panda3d}}\n| [https://github.com/panda3d/panda3d/commit/2b537d2 2b537d2]\n|\n|\n|-\n| {{AUR|poezio}}\n|\n|\n|\n|\n|-\n| [[PulseAudio]]\n| {{ic|~/.pulse}} {{ic|~/.pulse-cookie}}\n|\n[https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/commit/59a8618 59a8618]\n[https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/commit/87ae830 87ae830]\n[https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/commit/9ab510a 9ab510a]\n[https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/commit/4c195bc 4c195bc]\n| [https://bugzilla.redhat.com/show_bug.cgi?id=845607]\n| [[Steam]] might still create {{ic|~/.pulse-cookie}}. Add {{ic|1=cookie-file = ~/.config/pulse/cookie}} to {{ic|/etc/pulse/client.conf}} to get rid of it.\n|-\n| {{AUR|pyroom}}\n|\n|\n|\n|\n|-\n| {{Pkg|quodlibet}}\n| {{ic|~/.quodlibet}}\n| 3.10.0\n| [https://github.com/quodlibet/quodlibet/issues/138]\n|\n|-\n| [[qutebrowser]]\n|\n|\n|\n|\n|-\n| [[qtile]]\n|\n|\n[https://github.com/qtile/qtile/commit/fd8686e fd8686e]\n[https://github.com/qtile/qtile/commit/66d704b 66d704b]\n[https://github.com/qtile/qtile/commit/51cff01 51cff01]\n| [https://github.com/qtile/qtile/pull/835]\n| Some optional bar widgets can create files and directories in non-compliant paths, but most often these are still configurable.\n|-\n| {{Pkg|rclone}}\n| {{ic|~/.rclone.conf}}\n| [https://github.com/ncw/rclone/commit/9d36258 9d36258]\n| [https://github.com/ncw/rclone/issues/868]\n|\n|-\n| {{Pkg|retroarch}}\n|\n|\n|\n|\n|-\n| {{AUR|rr}}\n| {{ic|~/.rr}}\n| [https://github.com/mozilla/rr/commit/02e7d41 02e7d41]\n| [https://github.com/mozilla/rr/issues/1455]\n|\n|-\n| [https://rspec.info RSpec]\n| {{ic|~/.rspec}}\n| [https://github.com/rspec/rspec-core/commit/5e395e2016f1da19475e6db2817eb26dae828c4c 5e395e2]\n| [https://github.com/rspec/rspec-core/issues/1773]\n|\n|-\n| [[rTorrent]]\n| {{ic|~/.rtorrent.rc}}\n| [https://github.com/rakshasa/rtorrent/commit/6a8d332 6a8d332]\n|\n|\n|-\n| [https://www.rubocop.org RuboCop]\n| {{ic|~/.rubocop.yml}}\n| [https://github.com/rubocop-hq/rubocop/commit/6fe5956c177ca369cfaa70bdf748b70020a56bf4 6fe5956]\n| [https://github.com/rubocop-hq/rubocop/issues/6662]\n|\n|-\n| [[Ruby#RubyGems]]\n| {{ic|~/.gem}}\n| [https://github.com/ruby/ruby/commit/5c6269c 3.0.0 (5c6269c)]\n| [https://github.com/ruby/ruby/pull/2174]\n|\n XDG_CONFIG_HOME/gemrc\n XDG_CONFIG_HOME/irb\n XDG_DATA_HOME/gem\n XDG_DATA_HOME/rdoc\n|-\n| [https://github.com/benvan/sandboxd sandboxd]\n| {{ic|~/.sandboxrc}}\n| [https://github.com/benvan/sandboxd/pull/14]\n| [https://github.com/benvan/sandboxd/issues/11]\n| {{ic|XDG_CONFIG_HOME/sandboxd/sandboxrc}}\n|-\n| {{Pkg|scribus}}\n| {{ic|~/.scribus}}\n| [https://wiki.scribus.net/canvas/Versione_1.5.3 1.5.3]\n| \n|-\n| {{Pkg|scummvm}}\n| {{ic|~/.scummvmrc}} {{ic|~/.scummvm/}}\n| [https://github.com/scummvm/scummvm/commit/7d014be0a2b796175a7ce40a9315603f711b2a30 7d014be]\n| [https://github.com/scummvm/scummvm/pull/656]\n| It is required to migrate data by hand.\n{{ic|mkdir \"$XDG_CONFIG_HOME\"/scummvm/ \"$XDG_DATA_HOME\"/scummvm}}\n{{ic|mv ~/.scummvmrc \"$XDG_CONFIG_HOME\"/scummvm/scummvm.ini}}\n{{ic|mv ~/.scummvm \"$XDG_DATA_HOME\"/scummvm/saves}}\n|-\n| {{Pkg|sdcv}}\n| {{ic|~/.stardict/}} {{ic|~/.sdcv_history}}\n| [https://github.com/Dushistov/sdcv/commit/958ec35 958ec35]\n| [https://github.com/Dushistov/sdcv/issues/51]\n|\n|-\n| {{Pkg|snes9x}}\n| {{ic|~/.snes9x}}\n| [https://github.com/snes9xgit/snes9x/commit/93b5f11 93b5f11]\n| [https://github.com/snes9xgit/snes9x/issues/194]\n| By default, the configuration file is left blank with intention that the user will fill it at their will (through the gui or manually).\n|-\n| [[spectrwm]]\n| {{ic|~/.spectrwm}}\n| [https://github.com/conformal/spectrwm/commit/a30bbb a30bbb]\n| [https://github.com/conformal/spectrwm/pull/153]\n|\n|-\n| [[SQLite]]\n| {{ic|~/.sqliterc}}, {{ic|~/.sqlite_history}}\n| [https://github.com/sqlite/sqlite/commit/6e8a33 3.44.0]\n| \n| {{ic|XDG_CONFIG_HOME/sqlite3/sqliterc}}, {{ic|1=export SQLITE_HISTORY=$XDG_DATA_HOME/sqlite_history}}\n|-\n| [[Streamlink]]\n| {{ic|~/.livestreamerrc}}\n| [https://github.com/chrippa/livestreamer/commit/ea80591 ea80591]\n| [https://github.com/chrippa/livestreamer/pull/106]\n|\n|-\n| {{AUR|sublime-text-dev}}\n|\n| [https://www.sublimetext.com/dev build 4105]\n|\n| Prior to build 4105, the cache was placed in {{ic|XDG_CONFIG_HOME/sublime-text-3/Cache}}.\n|-\n| [[surfraw]]\n| {{ic|~/.surfraw.conf}} {{ic|~/.surfraw.bookmarks}}\n|\n[https://gitlab.com/surfraw/Surfraw/commit/3e4591d 3e4591d]\n[https://gitlab.com/surfraw/Surfraw/commit/bd8c427 bd8c427]\n[https://gitlab.com/surfraw/Surfraw/commit/f57fc71 f57fc71]\n|\n|\n|-\n| [[sway]]\n| {{ic|~/.sway/config}}\n| [https://github.com/SirCmpwn/sway/commit/614393c 614393c]\n| [https://github.com/SirCmpwn/sway/issues/5]\n| {{ic|XDG_CONFIG_HOME/sway/config}}\n|-\n| [[sxhkd]]\n|\n|\n|\n|\n|-\n| [[systemd]]\n|\n|\n|\n|\n|-\n| {{Pkg|teeworlds}}\n| {{ic|~/.teeworlds}}\n| [https://github.com/teeworlds/teeworlds/commit/d2e39d2f50684151490da446156622e69dd84a48]\n|\n|\n|-\n| [[termite]]\n|\n|\n|\n|\n|-\n| {{Pkg|tig}}\n| {{ic|~/.tigrc}}, {{ic|~/.tig_history}}\n| [https://github.com/jonas/tig/blob/master/NEWS.adoc#tig-22 2.2]\n| [https://github.com/jonas/tig/issues/513]\n| {{ic|~/.local/share/tig}} directory must exist, writes to {{ic|~/.tig_history}} otherwise.\n|-\n|Theming (desktop)\n| {{ic|~/.icons/}}, {{ic|~/.themes/}}\n| [https://specifications.freedesktop.org/icon-theme-spec/latest/ar01s03.html]\n|\n|{{ic|XDG_DATA_HOME/icons}}\n{{ic|XDG_DATA_HOME/themes}}\n\nFor Qt programs, GTK or Qt programs on Wayland to use cursors in {{ic|XDG_DATA_HOME/icons}}, the [[Cursor themes#Environment variable|XCURSOR_PATH]] enviroment variable needs to be configured.\n|-\n| [[tmux]]\n| {{ic|~/.tmux.conf}}\n| [https://raw.githubusercontent.com/tmux/tmux/3.1/CHANGES 3.1]\n| [https://github.com/tmux/tmux/issues/142]\n| 3.1 introduced {{ic|~/.config/tmux/tmux.conf}} and in [https://github.com/tmux/tmux/blob/a5f99e14c6f264e568b860692b89d11f5298a3f2/CHANGES#L145 3.2] {{ic|XDG_CONFIG_HOME/tmux/tmux.conf}} was added\n|-\n| [[tmuxp]]\n| {{ic|~/.tmuxp}}\n| [https://tmuxp.git-pull.com/history.html#tmuxp-1-5-0-2018-10-02 1.5.0]\n| [https://github.com/tmux-python/tmuxp/pull/404]\n| Fixed in [https://tmuxp.git-pull.com/history.html#tmuxp-1-5-2-2019-06-02 1.5.2]\n|-\n| {{AUR|tmuxinator}}\n| {{ic|~/.tmuxinator}}\n| [https://github.com/tmuxinator/tmuxinator/pull/511/commits/2636923 2636923]\n| [https://github.com/tmuxinator/tmuxinator/pull/511]\n|\n|-\n| [[Transmission]]\n| {{ic|~/.transmission}}\n| [https://github.com/transmission/transmission/commit/b71a298 b71a298]\n|\n|\n|-\n| {{Pkg|util-linux}}\n|\n| [https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/commit/?id=570b321 570b321]\n|\n|\n|-\n| {{Pkg|yapf}}\n| \n| [https://github.com/google/yapf/pull/1067/commits/a0b51d2 a0b51d2]\n| [https://github.com/google/yapf/pull/1067]\n| {{ic|$XDG_CONFIG_HOME/yapf/style}}\n|-\n| [[Uzbl]]\n|\n| [https://github.com/uzbl/uzbl/commit/c6fd63a c6fd63a]\n| [https://github.com/uzbl/uzbl/pull/150]\n|\n|-\n| [[vim]]\n| {{ic|~/.vim}}, {{ic|~/.vimrc}}, {{ic|~/.viminfo}}\n| [https://github.com/vim/vim/commit/c9df1fb c9df1fb]\n| [https://github.com/vim/vim/pull/14182]\n|\n|-\n| {{Pkg|vimb}}\n|\n|\n|\n|\n|-\n| [[VirtualBox]]\n| {{ic|~/.VirtualBox}}\n| [https://www.virtualbox.org/ticket/5099?action=diff&version=7 4.3]\n| [https://www.virtualbox.org/ticket/5099]\n|\n|-\n| {{Pkg|vis}}\n| {{ic|~/.vis}}\n|\n[https://github.com/martanne/vis/commit/68a25c7 68a25c7]\n[https://github.com/martanne/vis/commit/d138908 d138908]\n| [https://github.com/martanne/vis/pull/303]\n|\n|-\n| [[VLC]]\n| {{ic|~/.vlcrc}}\n| [https://code.videolan.org/videolan/vlc/-/commit/16f32e1500887c0dcd33cb06ad71759a81a52878 16f32e1]\n| [https://trac.videolan.org/vlc/ticket/1267]\n|\n|-\n| {{Pkg|warsow}}\n| {{ic|~/.warsow-2.x}}\n| [https://github.com/Qfusion/qfusion/commit/98ece3f 98ece3f]\n| [https://github.com/Qfusion/qfusion/issues/298]\n|\n|-\n| [[WeeChat]]\n| {{ic|~/.weechat}}\n| [https://github.com/weechat/weechat/commit/70cdf21681d75090c3df9858c9e7ce5a85433856]\n[https://github.com/weechat/weechat/releases/tag/v3.2 3.2]\n| [https://github.com/weechat/weechat/issues/1285] [https://specs.weechat.org/specs/001285-follow-xdg-base-dir-spec.html]{{Dead link|2023|05|06|status=404}}\n|\n XDG_CONFIG_HOME/weechat\n XDG_CACHE_HOME/weechat\n XDG_DATA_HOME/weechat\n|-\n| [[Wireshark]]\n| {{ic|~/.wireshark}}\n| [https://code.wireshark.org/review/gitweb?p=wireshark.git;a=commit;h=b0b53fa b0b53fa]{{Dead link|2022|09|23|status=domain name not resolved}}\n|\n|\n|-\n| [https://wxwidgets.org/ wxWidgets]\n| \n| [https://trac.wxwidgets.org/ticket/17727]\n|\n|\n|-\n| [[Xsettingsd]]\n| {{ic|~/.xsettingsd}}\n| [https://github.com/derat/xsettingsd/commit/b4999f5 b4999f5]\n|\n|\n|-\n| [[xmobar]]\n| {{ic|~/.xmobarrc}}\n| [https://github.com/jaor/xmobar/commit/7b0d6bf 7b0d6bf]\n[https://github.com/jaor/xmobar/commit/9fc6b37 9fc6b37]\n[https://github.com/jaor/xmobar/commit/eaccf70 eaccf70]\n| [https://github.com/jaor/xmobar/pull/99]\n[https://github.com/jaor/xmobar/pull/131]\n| {{ic|XDG_CONFIG_HOME/xmobar/xmobarrc}}\n|-\n| [[xmonad]]\n| {{ic|~/.xmonad/}}\n| [https://github.com/xmonad/xmonad/commit/40fc10b 40fc10b]\n|\n[https://github.com/xmonad/xmonad/issues/61]\n[https://code.google.com/p/xmonad/issues/detail?id=484]\n| All of these must exist, otherwise it gives up and falls back to {{ic|~/.xmonad/}} for each:\n XDG_CACHE_HOME/xmonad\n XDG_CONFIG_HOME/xmonad\n XDG_DATA_HOME/xmonad\nAlternatively, it always respects {{ic|XMONAD_CACHE_DIR}}, {{ic|XMONAD_CONFIG_DIR}}, and {{ic|XMONAD_DATA_DIR}}.\n|-\n| {{Pkg|xonsh}}\n| {{ic|~/.xonshrc}}\n|\n| [https://xon.sh/xonshrc.html]\n| {{ic|$XDG_CONFIG_HOME/xonsh/rc.xsh}}\n|-\n| {{Pkg|xournalpp}}\n| {{ic|~/.xournalpp}}\n|\n[https://github.com/xournalpp/xournalpp/commit/20db937f 20db937f]\n[https://github.com/xournalpp/xournalpp/releases/tag/1.1.0 1.1.0]\n|\n[https://github.com/xournalpp/xournalpp/issues/1101]\n[https://github.com/xournalpp/xournalpp/pull/1384]\n|-\n| {{Pkg|xsel}}\n| {{ic|~/.xsel.log}}\n| [https://github.com/kfish/xsel/commit/ee7b481 ee7b481]\n| [https://github.com/kfish/xsel/issues/10]\n|\n|-\n| [[Zim]]\n|\n| [https://github.com/zim-desktop-wiki/zim-desktop-wiki/commit/e42b8b0 e42b8b0]\n|\n|\n  $XDG_CONFIG_HOME/zim/preferences.conf\n  $XDG_CONFIG_HOME/zim/notebooks.list\n|-\n| {{Pkg|zoxide}}\n| {{ic|~/.zo}}\n| [https://github.com/ajeetdsouza/zoxide/releases/tag/v0.3.0 0.3.0]\n| [https://github.com/ajeetdsouza/zoxide/pull/47]\n|\n|}\n\n=== Partial ===\n\n{| class=\"wikitable sortable\" style=\"width: 100%\"\n! Application\n! Legacy Path\n! Supported Since\n! Discussion\n! Notes\n|-\n| {{AUR|abook}}\n| {{ic|~/.abook}}\n|\n|\n| {{ic|1=abook --config \"$XDG_CONFIG_HOME\"/abook/abookrc --datafile \"$XDG_DATA_HOME\"/abook/addressbook}}\n|-\n| {{Pkg|ack}}\n| {{ic|~/.ackrc}}\n|\n| [https://github.com/beyondgrep/ack2/issues/516]\n| {{ic|1=export ACKRC=\"$XDG_CONFIG_HOME/ack/ackrc\"}}\n|-\n| [[Ansible]]\n| {{ic|~/.ansible}}\n| [https://github.com/ansible/ansible/pull/76114 2.14]\n| [https://github.com/ansible/ansible/issues/52354] [https://github.com/ansible/ansible/issues/68587] [https://github.com/ansible/ansible/issues/75788]\n| {{bc|1=export ANSIBLE_HOME=\"${XDG_CONFIG_HOME}/ansible\"\nexport ANSIBLE_CONFIG=\"${XDG_CONFIG_HOME}/ansible.cfg\"\nexport ANSIBLE_GALAXY_CACHE_DIR=\"${XDG_CACHE_HOME}/ansible/galaxy_cache\"}} [https://docs.ansible.com/ansible/latest/reference_appendices/config.html]\nThe remote's {{ic|~/.ansible/tmp}} can be moved by setting {{ic|1=remote_tmp = ${XDG_CONFIG_HOME}/ansible/tmp}} in an appropriate {{ic|ansible.cfg}}. [https://docs.ansible.com/archive/ansible/2.4/intro_configuration.html#remote-tmp] [https://github.com/ayekat/localdir/issues/7#issuecomment-998286490]\n|-\n| {{AUR|asdf-vm}}\n| {{ic|~/.asdfrc}}, {{ic|~/.asdf/}}\n|\n| [https://github.com/asdf-vm/asdf/issues/687]\n| {{ic|1=export ASDF_CONFIG_FILE=\"${XDG_CONFIG_HOME}/asdf/asdfrc\"}}, {{ic|1=export ASDF_DATA_DIR=\"${XDG_DATA_HOME}/asdf\"}}\n|-\n| [[aspell]]\n| {{ic|~/.aspell.conf}}\n|\n| [https://github.com/GNUAspell/aspell/issues/560]\n| Very incomplete. The following re-locates the {{ic|en}} dictionaries, but additional possible dictionaries are not specificed here for brevity. {{ic|1=export ASPELL_CONF=\"per-conf $XDG_CONFIG_HOME/aspell/aspell.conf; personal $XDG_DATA_HOME/aspell/en.pws; repl $XDG_DATA_HOME/aspell/en.prepl\"}}\n|-\n| {{Pkg|aws-cli}}\n| {{ic|~/.aws}}\n| [https://github.com/aws/aws-cli/commit/fc5961ea2cc0b5976ac9f777e20e4236fd7540f5 1.7.45]\n| [https://github.com/aws/aws-cli/issues/2433]\n| {{ic|1=export AWS_SHARED_CREDENTIALS_FILE=\"$XDG_CONFIG_HOME\"/aws/credentials}}, {{ic|1=export AWS_CONFIG_FILE=\"$XDG_CONFIG_HOME\"/aws/config}}\n|-\n| {{Pkg|bash-completion}}\n| {{ic|~/.bash_completion}}\n|\n|\n| {{ic|1=export BASH_COMPLETION_USER_FILE=\"$XDG_CONFIG_HOME\"/bash-completion/bash_completion}}\n|-\n| {{AUR|bashdb}}\n| {{ic|~/.bashdbinit, ~/.bashdb_hist}}\n|\n|\n| Like documented at [https://bashdb.sourceforge.net/bashdb.html#Command-Files], you can specify a file to run commands from. Thus, move the init file to {{ic|XDG_CONFIG_HOME/bashdb/bashdbinit}} and create an alias {{ic|1=alias bashdb='bashdb -x ${XDG_CONFIG_HOME:-$HOME/.config}/bashdb/bashdbinit'}}. Unfortunately the history file is hardcoded [https://sourceforge.net/p/bashdb/code/ci/bash-5.1/tree/lib/hist.sh#l28].\n|-\n| [[bazaar]]\n| {{ic|~/.bazaar}}, {{ic|~/.bzr.log}}\n| [https://bugs.launchpad.net/bzr/+bug/195397/comments/15 2.3.0]\n| [https://bugs.launchpad.net/bzr/+bug/195397]\n| Discussion in upstream bug states that bazaar will use {{ic|~/.config/bazaar}} if it exists. The logfile {{ic|~/.bzr.log}} might still be written.\n|-\n| {{pkg|bogofilter}}\n| {{ic|~/.bogofilter}}\n| [https://gitlab.com/bogofilter/bogofilter/-/blob/main/bogofilter/NEWS.0#L2760 0.7.5]\n| [https://sourceforge.net/p/bogofilter/bugs/110/]\n| {{ic|1=export BOGOFILTER_DIR=\"$XDG_DATA_HOME\"/bogofilter}}\n|-\n| {{Aur|btpd-git}}\n| {{ic|~/.btpd/}}\n|\n| [https://github.com/btpd/btpd/issues/55]\n| {{ic|1=btpd -d \"$XDG_DATA_HOME\"/.btpd}}\n{{ic|1=HOME=\"$XDG_DATA_HOME\" btcli}}\n|-\n| {{Aur|bun}}\n| {{ic|~/.bun/}}\n|\n| [https://github.com/oven-sh/bun/issues/1678]\n| Bun will prioritize using {{ic|$XDG_CONFIG_HOME}}, {{ic|$XDG_CACHE_HOME}}, and/or {{ic|$XDG_DATA_HOME}} when these have explicitly been set. As an alternative, {{ic|1=export BUN_INSTALL=\"$XDG_DATA_HOME\"/bun}} can be used to set {{ic|bun}}'s main location for its directories.\n|-\n|  {{Pkg|calc}}\n|  {{ic|~/.calc_history}}\n|\n|\n|\n export CALCHISTFILE=\"$XDG_CACHE_HOME\"/calc_history\n|-\n| [[Rust#Cargo]]\n| {{ic|~/.cargo}}\n|\n| [https://github.com/rust-lang/cargo/issues/1734] [https://github.com/rust-lang/rfcs/pull/1615] [https://github.com/rust-lang/cargo/pull/5183]  [https://github.com/rust-lang/cargo/pull/148]\n| {{ic|1=export CARGO_HOME=\"$XDG_DATA_HOME\"/cargo}}\n|-\n| {{Pkg|cataclysm-dda}}\n| {{ic|~/.cataclysm-dda}}\n|[https://gitlab.archlinux.org/archlinux/packaging/packages/cataclysm-dda/-/commit/0947de440817c9c418cac615275edbf1cc0abdbb 0.D-1]\n|[https://github.com/CleverRaven/Cataclysm-DDA/issues/12315]\n| partial support due to required compile time option\n|-\n| [https://github.com/mollifier/cd-bookmark cd-bookmark]\n| {{ic|~/.cdbookmark}}\n|\n| [https://github.com/mollifier/cd-bookmark/issues/3]\n| {{ic|1=export CD_BOOKMARK_FILE=$XDG_CONFIG_HOME/cd-bookmark/bookmarks}}\nor use the fork that has native XDG support: [https://github.com/erikw/cd-bookmark/]\n|-\n| {{pkg|cgdb}}\n| {{ic|~/.cgdb}}\n| [On master branch, but no release yet]\n| [https://github.com/cgdb/cgdb/issues/203] [https://github.com/cgdb/cgdb/blob/master/NEWS]\n| Set {{ic|1=export CGDB_DIR=$XDG_CONFIG_HOME/cgdb}} and move the config file to {{ic|XDG_CONFIG_HOME/cgdb/cgdbrc}}\n|-\n| {{AUR|chez-scheme}}\n| {{ic|~/.chezscheme_history}}\n|\n|\n| {{ic|1=petite --eehistory \"$XDG_DATA_HOME\"/chezscheme/history}}\n|-\n| chktex in {{pkg|texlive-binextra}}\n| {{ic|~/.chktexrc}}\n|\n|\n| Move the config file to {{ic|$XDG_CONFIG_HOME/chktex/.chktexrc}} (mind the leading dot) and {{ic|1=export CHKTEXRC=$XDG_CONFIG_HOME/chktex}}\n|-\n| [[Chromium]]\n| {{ic|~/.chromium}}, {{ic|~/.pki}}\n| [https://src.chromium.org/viewvc/chrome?revision=23057&view=revision 23057]\n| [https://groups.google.com/forum/#!topic/chromium-dev/QekVQxF3nho] [https://code.google.com/p/chromium/issues/detail?id=16976] [https://bugs.chromium.org/p/chromium/issues/detail?id=1038587]\n| Deliberatly (according to these sources) clobbers {{ic|~/.config}} by writing hundreds of megabytes of '''cache''' data into it. Quite unsupported.\n|-\n| [https://www.cinelerra-gg.org/ cinelerra]\n| {{ic|~/.bcast5}}\n|\n| [https://cinelerra-gg.org/download/CinelerraGG_Manual/Environment_Variables_Custo.html]\n| {{ic|1=export CIN_CONFIG=\"$XDG_CONFIG_HOME\"/bcast5}}\n|-\n| [[conky]]\n| {{ic|~/.conkyrc}}\n| [https://github.com/brndnmtthws/conky/commit/00481ee9a97025e8e2acd7303d080af1948f7980 00481ee]\n| [https://github.com/brndnmtthws/conky/issues/144]\n| {{ic|1=conky --config=\"$XDG_CONFIG_HOME\"/conky/conkyrc}}\n|-\n| {{Pkg|claws-mail}}\n| {{ic|~/.claws-mail}}\n|\n| [https://lists.claws-mail.org/pipermail/users/2013-April/006087.html]\n| {{ic|1=claws-mail --alternate-config-dir \"$XDG_DATA_HOME\"/claws-mail}}\n|-\n| [[coreutils]]\n| {{ic|~/.dircolors}}\n|\n|\n| {{ic|1=eval $(dircolors \"$XDG_CONFIG_HOME\"/dircolors)}}\n|-\n| [http://www.dungeoncrawl.org/ crawl]\n| {{ic|~/.crawl}}\n|\n|\n| The trailing slash is required:\n\n{{ic|1=export CRAWL_DIR=\"$XDG_DATA_HOME\"/crawl/}}\n|-\n| {{Pkg|clusterssh}}\n| {{ic|~/.clusterssh/}}\n|\n|\n| {{ic|1=alias cssh=\"cssh --config-file '$XDG_CONFIG_HOME/clusterssh/config'\" }}\n{{hc|$XDG_CONFIG_HOME/clusterssh/config|2=\nextra_cluster_file=$HOME/.config/clusterssh/clusters\nextra_tag_file=$HOME/.config/clusterssh/tags\n}}\nDespite this, clusterssh will still create {{ic|~/.clusterssh/}}.\n|-\n| [[CUDA]]\n| {{ic|~/.nv}}\n|\n|\n| {{ic|1=export CUDA_CACHE_PATH=\"$XDG_CACHE_HOME\"/nv}}\n|-\n| [[dict]]\n| {{ic|~/.dictrc}}\n|\n|\n| {{ic|1=dict -c \"$XDG_CONFIG_HOME\"/dict/dictrc}}\n|-\n| [[discord]]\n| {{ic|1=${XDG_CONFIG_HOME}/discord}}\n|\n| \n| As of version 0.0.27:\nUndocumented, though actively used:\n{{ic|1=export DISCORD_USER_DATA_DIR=\"${XDG_DATA_HOME}\"}}\n\nSource: {{ic|1=<discord_system_package_root>/resources/app.asar}}.\n|-\n| [[Docker]]\n| {{ic|~/.docker}}\n|\n|\n| {{ic|1=export DOCKER_CONFIG=\"$XDG_CONFIG_HOME\"/docker}}\n|-\n| {{Pkg|docker-machine}}\n| {{ic|~/.docker/machine}}\n|\n|\n| {{ic|1=export MACHINE_STORAGE_PATH=\"$XDG_DATA_HOME\"/docker-machine}}\n|-\n| [[DOSBox]]\n| {{ic|~/.dosbox/dosbox-0.74-2.conf}}\n|\n| [https://www.vogons.org/viewtopic.php?t=29599]\n| {{ic|1=dosbox -conf \"$XDG_CONFIG_HOME\"/dosbox/dosbox.conf}}\n|-\n| {{Pkg|dub}}\n| {{ic|~/.dub}}\n| [https://github.com/dlang/dub/pull/2281 v1.30.0-beta.1]\n| \n| Dub uses the {{ic|~/.dub}} directory for both user settings and caching downloaded packages. The directory can only be moved as a whole, using {{ic|1=export DUB_HOME=\"path/to/new/dub\"}}.\n|-\n| [https://electrum.org Electrum Bitcoin Wallet]\n| {{ic|~/.electrum}}\n| [https://github.com/spesmilo/electrum/commit/c121230 c121230]\n|\n| {{ic|1=export ELECTRUMDIR=\"$XDG_DATA_HOME/electrum\"}}\n|-\n| [[ELinks]]\n| {{ic|~/.elinks}}\n|\n|\n| {{ic|1=export ELINKS_CONFDIR=\"$XDG_CONFIG_HOME\"/elinks}}\n|-\n| {{Pkg|elixir}}\n| {{ic|~/.mix}}, {{ic|~/.hex}}\n| [https://github.com/elixir-lang/elixir/commit/afaf889 afaf889]\n| [https://github.com/elixir-lang/elixir/pull/10028] [https://github.com/hexpm/hex/pull/841]\n| Elixir does not fully conform to XDG specs, it will use XDG only if the {{ic|1=MIX_XDG}} variable is set to a special value, otherwise it will by default use legacy path.\n{{ic|1=export MIX_XDG=\"true\"}}\n|-\n| [https://elm-lang.org/ Elm]\n| {{ic|~/.elm}}\n| \n| \n| {{ic|1=export ELM_HOME=\"$XDG_CONFIG_HOME\"/elm}}\n|-\n| {{Pkg|fceux}}\n| {{ic|~/.fceux/}}\n|\n| [https://github.com/TASEmulators/fceux/issues/412]\n| {{ic|1=export FCEUX_HOME=\"$XDG_CONFIG_HOME\"/fceux}}. Fceux will create {{ic|1=.fceux}} directory inside {{ic|1=$FCEUX_HOME}}.\n|-\n| [[FFmpeg]]\n| {{ic|~/.ffmpeg}}\n|\n|\n| {{ic|1=export FFMPEG_DATADIR=\"$XDG_CONFIG_HOME\"/ffmpeg}}\n|-\n| {{AUR|flutter}}\n| {{ic|~/.flutter}}, {{ic|~/.flutter_settings}}, {{ic|~/.flutter_tool_state}}, {{ic|~/.pub-cache}}\n|\n| [https://github.com/flutter/flutter/issues/59430]\n|\n|-\n| {{AUR|fzf-git}}\n| {{ic|~/.fzf.bash, ~/.fzf.zsh}}\n| \n| [https://github.com/junegunn/fzf/pull/1282]\n| The shell init files will be installed to {{ic|XDG_CONFIG_HOME/fzf}} if the installation script is called with {{ic|--xdg}} for example {{ic| /usr/local/opt/fzf/install --xdg}}.\n|-\n| {{Pkg|emscripten}}\n| {{ic|~/.emscripten}}, {{ic|~/.emscripten_sanity}}, {{ic|~/.emscripten_ports}}, {{ic|~/.emscripten_cache__last_clear}}\n|\n| [https://github.com/kripken/emscripten/issues/3624]\n| {{ic|1=export EM_CONFIG=\"$XDG_CONFIG_HOME\"/emscripten/config}}, {{ic|1=export EM_CACHE=\"$XDG_CACHE_HOME\"/emscripten/cache}}, {{ic|1=export EM_PORTS=\"$XDG_DATA_HOME\"/emscripten/cache}}, {{ic|emcc --em-config \"$XDG_CONFIG_HOME\"/emscripten/config --em-cache \"$XDG_CACHE_HOME\"/emscripten/cache}}\n|-\n| {{AUR|get_iplayer}}\n| {{ic|~/.get_iplayer}}\n|\n|\n| {{ic|1=export GETIPLAYERUSERPREFS=\"$XDG_DATA_HOME\"/get_iplayer}}\n|-\n| [[getmail]]\n| {{ic|~/.getmail/getmailrc}}\n|\n|\n| {{ic|1=getmail --rcfile=\"$XDG_CONFIG_HOME/getmail/getmailrc\" --getmaildir=\"$XDG_DATA_HOME/getmail\"}}\n|-\n| {{Pkg|ghc}}\n| {{ic|~/.ghci}}\n| [https://gitlab.haskell.org/ghc/ghc/-/commit/763d28551de32377a1dca8bdde02979e3686f400]\n| [https://ghc.haskell.org/trac/ghc/ticket/6077]\n| Supported upstream from 9.4.1 [https://downloads.haskell.org/~ghc/9.4.1/docs/users_guide/9.4.1-notes.html?highlight=xdg], but as of 2022-09-24 Arch package is 9.0.2 and not yet up-to-date.\n|-\n| {{AUR|ghcup-hs-bin}}\n| {{ic|~/.ghcup}}\n| [https://gitlab.haskell.org/haskell/ghcup-hs/-/commit/80603662b4fcc42fd936f45608dc3bc924c7e498]\n| [https://gitlab.haskell.org/haskell/ghcup-hs/issues/39]\n| {{ic|1=export GHCUP_USE_XDG_DIRS=true}}\nThe environment variable {{ic|GHCUP_USE_XDG_DIRS}} can be set to any non-empty value. See [https://www.haskell.org/ghcup/guide/#xdg-support].\n|-\n| {{AUR|gliv}}\n| {{ic|~/.glivrc}}\n|\n|\n| {{ic|1=gliv --glivrc=\"$XDG_CONFIG_HOME\"/gliv/glivrc}}\n|-\n| {{Pkg|gnuradio}}\n| {{ic|~/.gnuradio}}\n|\n| [https://github.com/gnuradio/gnuradio/issues/3631]\n| GNU Radio:\n{{ic|1=export GR_PREFS_PATH=\"$XDG_CONFIG_HOME\"/gnuradio}}\n\nGNU Radio Companion:\n{{ic|1=export GRC_PREFS_PATH=\"$XDG_CONFIG_HOME\"/gnuradio/grc.conf}}\n|-\n| [[GnuPG]]\n| {{ic|~/.gnupg}}\n|\n| [https://bugs.gnupg.org/gnupg/issue1456] [https://bugs.gnupg.org/gnupg/issue1018]\n| {{ic|1=export GNUPGHOME=\"$XDG_DATA_HOME\"/gnupg}}, {{ic|gpg2 --homedir \"$XDG_DATA_HOME\"/gnupg}}\nNote that this currently does not work out-of-the-box using systemd user units and socket-based activation, since the socket directory changes based on the hash of {{ic|$GNUPGHOME}}. You can get the new socket directory using {{ic|gpgconf --list-dirs socketdir}} and have to modify the systemd user units to listen on the correct sockets accordingly. You also have to use the following {{ic|gpg-agent.service}} drop-in file (or otherwise pass the GNUPGHOME env var to the agent running in systemd), or you might experience issues with \"missing\" private keys:\n\n [Service]\n Environment=\"GNUPGHOME=%h/.local/share/gnupg\"\n\nIf you [[GnuPG#SSH agent|use GPG as your SSH agent]], set {{ic|SSH_AUTH_SOCK}} to the output of {{ic|gpgconf --list-dirs agent-ssh-socket}} instead of some hardcoded value. \n|-\n| [[Go]]\n| {{ic|~/go}}\n| [https://github.com/golang/go/commit/ca8a055f5cc7c1dfa0eb542c60071c7a24350f76]\n|\n| {{ic|1=export GOPATH=\"$XDG_DATA_HOME\"/go}}, {{ic|1=export GOMODCACHE=\"$XDG_CACHE_HOME\"/go/mod}}\nIf {{ic|GOMODCACHE}} is not set, it defaults to {{ic|$GOPATH/pkg/mod}} (see [https://go.dev/ref/mod#environment-variables]).\n{{ic|GOCACHE}} is supported and defaults to {{ic|$XDG_CACHE_HOME/go-build}} (see [https://pkg.go.dev/cmd/go#hdr-Build_and_test_caching]).\n|-\n| [[Google Earth]]\n| {{ic|~/.googleearth}}\n|\n|\n| Some paths can be changed with the {{ic|KMLPath}} and {{ic|CachePath}} options in {{ic|~/.config/Google/GoogleEarthPlus.conf}}\n|-\n| {{Pkg|gopass}}\n| {{ic|~/.password-store}}\n|\n|\n| Override settings in {{ic|~/.config/gopass/config.yml}}:\n{{hc|~/.config/gopass/config.yml|\nroot:\npath: gpgcli-gitcli-fs+file:///home/<userid>/.config/password-store\n}}\n|-\n| {{Pkg|gpodder}}\n| {{ic|~/gPodder}}\n|\n|\n| {{ic|1=GPODDER_DOWNLOAD_DIR}} sets the download folder. {{ic|1=GPODDER_HOME}} - where config and database files are stored, downloads also if {{ic|1=GPODDER_DOWNLOAD_DIR}} is not set.\n|-\n| [https://sourceforge.net/projects/gqclient GQ LDAP client]\n| {{ic|~/.gq}}, {{ic|~/.gq-state}}\n| [https://sourceforge.net/p/gqclient/mailman/message/2053978 1.51]\n|\n| {{ic|1=export GQRC=\"$XDG_CONFIG_HOME\"/gqrc}}, {{ic|1=export GQSTATE=\"$XDG_DATA_HOME\"/gq/gq-state}}, {{ic|mkdir -p \"$(dirname \"$GQSTATE\")\"}}\n|-\n| [[Gradle]]\n| {{ic|~/.gradle}}\n|\n| [https://discuss.gradle.org/t/be-a-nice-freedesktop-citizen-move-the-gradle-to-the-appropriate-location-in-linux/2199]\n[https://github.com/gradle/gradle/issues/8262]\n| {{ic|1=export GRADLE_USER_HOME=\"$XDG_DATA_HOME\"/gradle}}\n|-\n| [[GTK]] 1\n| {{ic|~/.gtkrc}}\n|\n|\n| {{ic|1=export GTK_RC_FILES=\"$XDG_CONFIG_HOME\"/gtk-1.0/gtkrc}}\n|-\n| [[GTK]] 2\n| {{ic|~/.gtkrc-2.0}}\n|\n|\n| {{ic|1=export GTK2_RC_FILES=\"$XDG_CONFIG_HOME/gtk-2.0/gtkrc\":\"$XDG_CONFIG_HOME/gtk-2.0/gtkrc.mine\"}}\nIf '''Lxappearance''' is used, {{ic|~/.gtkrc-2.0}} may keep being created because it is where clicking \"Apply\" customizations writes to. The path is hardcoded in Lxappearance, but simply being an output file, the settings can be repeatedly moved to the location.\n|-\n| {{Pkg|hledger}}\n| {{ic|~/.hledger.journal}}\n|\n| [https://github.com/simonmichael/hledger/issues/1081]\n| {{ic|1=export LEDGER_FILE=\"$XDG_DATA_HOME\"/hledger.journal}}\n|-\n| [https://www.sidefx.com/products/houdini/ Houdini]\n| {{ic|~/houdini''MAJOR''.''MINOR'')}}\n|\n| [https://forums.odforce.net/topic/43138-changing-home-location/]\n[https://www.sidefx.com/docs/houdini/ref/env.html]\n| {{ic|1=export HOUDINI_USER_PREF_DIR=\"$XDG_CACHE_HOME\"/houdini__HVER__}}\nThe value of this variable must include the substring {{ic|__HVER__}}, which will be replaced at run time with the current {{ic|''MAJOR''.''MINOR''}} version string.\n|-\n| {{AUR|imapfilter}}\n| {{ic|~/.imapfilter}}\n|\n|\n| {{ic|1=export IMAPFILTER_HOME=\"$XDG_CONFIG_HOME/imapfilter\"}}\n|-\n| [[IPFS]]\n| {{ic|~/.ipfs}}\n|\n|\n| {{ic|1=export IPFS_PATH=\"$XDG_DATA_HOME\"/ipfs}}\n|-\n| [https://ruby-doc.org/3.2.2/stdlibs/irb/IRB.html irb]\n| {{ic|~/.irbrc}}\n|\n|\n| {{hc|1=~/.profile|2=$ export IRBRC=\"$XDG_CONFIG_HOME\"/irb/irbrc}}\n{{hc|1=\"$XDG_CONFIG_HOME\"/irb/irbrc|2=IRB.conf[:SAVE_HISTORY] {{!}}{{!}}= 1000\nIRB.conf[:HISTORY_FILE] {{!}}{{!}}= File.join(ENV[\"XDG_DATA_HOME\"], \"irb\", \"history\")}}\n|-\n| [[irssi]]\n| {{ic|~/.irssi}}\n|\n| [https://github.com/irssi/irssi/pull/511]\n| {{ic|1=irssi --config=\"$XDG_CONFIG_HOME\"/irssi/config --home=\"$XDG_DATA_HOME\"/irssi}}\n|-\n| [[isync]]\n| {{ic|~/.mbsyncrc}}\n|\n| [https://sourceforge.net/p/isync/feature-requests/14/]\n| {{ic|1=mbsync -c \"$XDG_CONFIG_HOME\"/isync/mbsyncrc}}\n|-\n| [[Java#OpenJDK]]\n| {{ic|~/.java/.userPrefs}}\n|\n| [https://bugzilla.redhat.com/show_bug.cgi?id=1154277]\n| {{ic|1=export _JAVA_OPTIONS=-Djava.util.prefs.userRoot=\"$XDG_CONFIG_HOME\"/java}}\n|-\n| [[jupyter]]\n| {{ic|~/.jupyter}}\n| [https://github.com/jupyter/jupyter_core/releases/tag/5.0.0rc0 5.0.0rc0]\n| [https://github.com/jupyter/jupyter_core/issues/185] [https://github.com/jupyter/jupyter_core/pull/292]\n| {{Pkg|python-jupyter-core}} < v5.0.0:\n\n{{ic|1=export JUPYTER_CONFIG_DIR=\"$XDG_CONFIG_HOME\"/jupyter}}\n\nv5.0.0 <= {{Pkg|python-jupyter-core}} < v6.0.0:\n\n{{ic|1=export JUPYTER_PLATFORM_DIRS=\"1\"}} (see [https://github.com/jupyter/jupyter_core/blob/3efd00e5804424198285c63ebc6dc6c085d8c857/jupyter_core/paths.py#L176-L181])\n\n{{Pkg|python-jupyter-core}} >= v6.0.0: full support (via {{Pkg|python-platformdirs}}) enabled by default\n|-\n| {{Pkg|k9s}}\n| {{ic|~/.k9s}}\n| [https://github.com/derailed/k9s/releases/tag/v0.20.4 0.20.4]\n| [https://github.com/derailed/k9s/issues/743]\n| {{ic|1=export K9SCONFIG=\"$XDG_CONFIG_HOME\"/k9s}}\n|-\n| [[KDE]]\n| {{ic|~/.kde}}, {{ic|~/.kde4}}\n|\n| [https://userbase.kde.org/KDE_System_Administration/KDE_Filesystem_Hierarchy#KDEHOME]\n| {{ic|1=export KDEHOME=\"$XDG_CONFIG_HOME\"/kde}}\n|-\n| {{Pkg|keychain}}\n| {{ic|~/.keychain}}\n| [https://github.com/funtoo/keychain/commit/d43099bcff315d24a2ca31ae83da85e115d22ef6]\n| [https://github.com/funtoo/keychain/issues/8]\n| {{ic|1=keychain --absolute --dir \"$XDG_RUNTIME_DIR\"/keychain}}\n|-\n| {{Pkg|kodi}}\n| {{ic|~/.kodi}}\n| [https://github.com/xbmc/xbmc/pull/14460]\n| [https://github.com/xbmc/xbmc/pull/6142]\n| {{ic|1=KODI_DATA=$XDG_DATA_HOME/kodi}}\n|-\n| {{AUR|kscript}}\n| {{ic|~/.kscript}}\n|\n| [https://github.com/holgerbrandl/kscript/issues/323]\n| {{ic|1=export KSCRIPT_CACHE_DIR=\"$XDG_CACHE_HOME\"/kscript}}\n|-\n| [[ledger]]\n| {{ic|~/.ledgerrc}}, {{ic|~/.pricedb}}\n|\n| [https://github.com/ledger/ledger/issues/1820]\n| {{ic|1=ledger --init-file \"$XDG_CONFIG_HOME\"/ledgerrc}}\n|-\n| [[Leiningen]]\n| {{ic|~/.lein}}, {{ic|~/.m2}}\n|\n|\n| {{ic|1=export LEIN_HOME=\"$XDG_DATA_HOME\"/lein}}\n\nto change the m2 repo location used by leiningen look here: [[Leiningen#m2_repo_location]]\n|-\n| {{Pkg|libdvdcss}}\n| {{ic|~/.dvdcss}}\n|\n| [https://mailman.videolan.org/pipermail/libdvdcss-devel/2014-August/001022.html]\n| {{ic|1=export DVDCSS_CACHE=\"$XDG_DATA_HOME\"/dvdcss}}\n|-\n| {{Pkg|libice}}\n| {{ic|~/.ICEauthority}}\n|\n| [https://gitlab.freedesktop.org/xorg/lib/libice/issues/2]\n| {{ic|1=export ICEAUTHORITY=\"$XDG_CACHE_HOME\"/ICEauthority}}\nMake sure {{ic|XDG_CACHE_HOME}} is set beforehand to directory user running [[Xorg]] has write access to.\n\n'''Do not''' use {{ic|XDG_RUNTIME_DIR}} as it is available '''after''' login. Display managers that launch [[Xorg]] (like [[GDM]]) will repeatedly fail otherwise.\n|-\n| [[Xorg|libx11]]\n| {{ic|~/.XCompose}}, {{ic|~/.compose-cache}}\n|\n|\n| {{ic|1=export XCOMPOSEFILE=\"$XDG_CONFIG_HOME\"/X11/xcompose}}, {{ic|1=export XCOMPOSECACHE=\"$XDG_CACHE_HOME\"/X11/xcompose}}\n|-\n| {{Pkg|ltrace}}\n| {{ic|~/.ltrace.conf}}\n|\n|\n| {{ic|1=ltrace -F \"$XDG_CONFIG_HOME\"/ltrace/ltrace.conf}}\n|-\n| {{Pkg|lynx}}\n| {{ic|/etc/lynx.cfg}}\n|\n|\n| {{ic|1=export LYNX_CFG=\"$XDG_CONFIG_HOME\"/lynx.cfg}}\n|-\n| [https://git.savannah.nongnu.org/cgit/m17n/m17n-db.git m17n-db]\n| {{ic|~/.m17n.d}}\n|\n| [https://savannah.nongnu.org/bugs/?63056]\n| \n|-\n| {{AUR|maptool-bin}}\n| {{ic|~/.maptool-rptools}}\n|\n| [https://github.com/RPTools/maptool/issues/2786]\n| {{hc|1=/opt/maptool/lib/app/MapTool.cfg|2=[JavaOptions]\n-DMAPTOOL_DATADIR=.local/share/maptool-rptools}}\nHowever, no way to change the location of this configuration file.\n|-\n| {{Pkg|maven}}\n| {{ic|~/.m2}}\n|\n| [https://issues.apache.org/jira/browse/MNG-6603]\n| {{ic|1=mvn -gs \"$XDG_CONFIG_HOME\"/maven/settings.xml}} and set {{ic|<localRepository>}} as appropriate in [https://maven.apache.org/settings.html#Simple_Values settings.xml]\n|-\n| [[Mathematica]]\n| {{ic|~/.Mathematica}}\n|\n|\n| {{ic|1=export MATHEMATICA_USERBASE=\"$XDG_CONFIG_HOME\"/mathematica}}\n|-\n| {{Pkg|maxima}}\n| {{ic|~/.maxima}}\n|\n|\n| {{ic|1=export MAXIMA_USERDIR=\"$XDG_CONFIG_HOME\"/maxima}}\n|-\n| {{Pkg|mednafen}}\n| {{ic|~/.mednafen}}\n|\n|\n| {{ic|1=export MEDNAFEN_HOME=\"$XDG_CONFIG_HOME\"/mednafen}}\n|-\n| {{Pkg|minikube}}\n| {{ic|~/.minikube}}\n|\n| [https://github.com/kubernetes/minikube/issues/4109]\n| {{ic|1=export MINIKUBE_HOME=\"$XDG_DATA_HOME\"/minikube}}\n\nCreates a further {{ic|.minikube}} directory in {{ic|MINIKUBE_HOME}} for whatever reason.\n|-\n| {{Pkg|mitmproxy}}\n| {{ic|~/.mitmproxy}}\n|\n|\n| {{ic|1=alias mitmproxy=\"mitmproxy --set confdir=$XDG_CONFIG_HOME/mitmproxy\"}}, {{ic|1=alias mitmweb=\"mitmweb --set confdir=$XDG_CONFIG_HOME/mitmproxy\"}}\n|-\n| [[MOC]]\n| {{ic|~/.moc}}\n|\n|\n| {{ic|1=mocp -M \"$XDG_CONFIG_HOME\"/moc}}, {{ic|1=mocp -O MOCDir=\"$XDG_CONFIG_HOME\"/moc}}\n|-\n| {{Pkg|monero}}\n| {{ic|~/.bitmonero}}\n|\n|\n| {{ic|1=monerod --data-dir \"$XDG_DATA_HOME\"/bitmonero}}\n|-\n| {{Pkg|most}}\n| {{ic|~/.mostrc}}\n|\n|\n| {{ic|1=export MOST_INITFILE=\"$XDG_CONFIG_HOME\"/mostrc}}\n|-\n| [[MPlayer]]\n| {{ic|~/.mplayer}}\n|\n|\n| {{ic|1=export MPLAYER_HOME=\"$XDG_CONFIG_HOME\"/mplayer}}\n|-\n| {{Pkg|mtpaint}}\n| {{ic|~/.mtpaint}}\n|\n| [https://github.com/wjaguar/mtPaint/issues/22]\n| {{hc|1=/etc/mtpaint/mtpaintrc|2=userINI = ~/.config/mtpaint}}\n|-\n| {{Pkg|mypy}}\n| {{ic|~/.config/mypy/config}}, {{ic|~/.mypy.ini}}, {{ic|~/.mypy_cache}}\n| [https://github.com/python/mypy/pull/6304 v0.670]\n| [https://github.com/python/mypy/issues/6065] [https://github.com/python/mypy/issues/8790]\n| {{ic|1=XDG_CONFIG_HOME/mypy/config}}, {{ic|1=export MYPY_CACHE_DIR=\"$XDG_CACHE_HOME\"/mypy}}\n|-\n| [[MySQL]]\n| {{ic|~/.mysql_history}}, {{ic|~/.my.cnf }}, {{ic|~/.mylogin.cnf}}\n|\n|\n| {{ic|1=export MYSQL_HISTFILE=\"$XDG_DATA_HOME\"/mysql_history}}\n\n{{ic|~/.my.cnf}} only supported for mysql-server, not mysql-client [https://dev.mysql.com/doc/refman/8.0/en/option-files.html]\n\n{{ic|~/.mylogin.cnf}} unsupported\n|-\n| {{Pkg|mysql-workbench}}\n| {{ic|~/.mysql/workbench}}\n|\n|\n| You can run MySQL Workbench with the {{ic|1=---configdir}} flag, such as {{ic|1=mysql-workbench --configdir=\"$XDG_DATA_HOME/mysql/workbench\"}}. The directory needs to be created manually, since MySQL Workbench default location is {{ic|1=$HOME/.mysql/workbench}} .\n|-\n|-\n| {{Pkg|ncurses}}\n| {{ic|~/.terminfo}}\n|\n|\n| Precludes system path searching:\n\n{{ic|1=export TERMINFO=\"$XDG_DATA_HOME\"/terminfo}}, {{ic|1=export TERMINFO_DIRS=\"$XDG_DATA_HOME\"/terminfo:/usr/share/terminfo}}\n|-\n| [https://github.com/tj/n n]\n| {{ic|/usr/local/n}}\n|\n|\n| {{ic|1=export N_PREFIX=$XDG_DATA_HOME/n\n}}\n|-\n| {{Pkg|ncmpc}}\n| {{ic|~/.ncmpc}}\n|\n|\n| {{ic|ncmpc -f \"$XDG_CONFIG_HOME\"/ncmpc/config}}\n|-\n| [[Netbeans]]\n| {{ic|~/.netbeans}}\n|\n| [https://bz.apache.org/netbeans/show_bug.cgi?id=215961]\n| {{ic|1=netbeans --userdir \"${XDG_CONFIG_HOME}\"/netbeans}}\n|-\n| [[Node.js]]\n| {{ic|~/.node_repl_history}}\n|\n| [https://nodejs.org/api/repl.html#repl_environment_variable_options]\n| {{ic|1=export NODE_REPL_HISTORY=\"$XDG_DATA_HOME\"/node_repl_history}}\n|-\n| {{Pkg|npm}}\n| {{ic|~/.npm}}, {{ic|~/.npmrc}}\n|\n| [https://github.com/npm/cli/issues/654]\n| {{ic|1=export NPM_CONFIG_USERCONFIG=$XDG_CONFIG_HOME/npm/npmrc}}\n{{hc|npmrc|<nowiki>\nprefix=${XDG_DATA_HOME}/npm\ncache=${XDG_CACHE_HOME}/npm\ninit-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js\nlogs-dir=${XDG_STATE_HOME}/npm/logs\n</nowiki>}}\n{{ic|prefix}} is unnecessary (and unsupported) if Node.js is installed by {{AUR|nvm}}.\n|-\n| {{Pkg|opam}}\n| {{ic|~/.opam}}\n|\n| [https://github.com/ocaml/opam/issues/3766]\n| {{ic|1=export OPAMROOT=\"$XDG_DATA_HOME/opam\"}}\nBoth configuration and state data are stored in {{ic|OPAMROOT}}, so this solution is not fully compliant.\n|-PKG_CONFIG_PATH\n| {{Pkg|pnpm}}\n| {{ic|~/.pnpm-store}}\n|\n|\n| Add the line {{ic|1=store-dir=${XDG_DATA_HOME}/pnpm-store}} to your {{ic|npmrc}}.\n|-\n| [[PuTTY]]\n| {{ic|~/.putty/}}\n| [https://git.tartarus.org/?p=simon/putty.git;a=commit;h=9952b2d5bd5c8fbac4f5731a805bce10fe4ce47c 9952b2d]\n|\n| Will use {{ic|$XDG_CONFIG_HOME/putty}} if it already exists. Creates {{ic|~/.putty}} if not. Prioritises {{ic|$XDG_CONFIG_HOME/putty}} if both exist. Tested in 0.74\n|-\n| {{AUR|python-easyocr}}\n| {{ic|~/.EasyOCR}}\n| \n|\n| {{ic|1=export EASYOCR_MODULE_PATH=\"$XDG_CONFIG_HOME/EasyOCR\"}}\n|-\n| {{AUR|spotdl}}\n| {{ic|~/.spotdl}}\n| [https://github.com/spotDL/spotify-downloader/releases/tag/v4.0.6 v4.0.6] ([https://github.com/spotDL/spotify-downloader/commit/3929caed5a2e8c2858a1dc3898ad75be263fdb96 3929cae])\n| [https://github.com/spotDL/spotify-downloader/issues/1651]\n| {{ic|1=mkdir \"$XDG_DATA_HOME\"/spotdl}}\n|-\n| {{Pkg|nuget}}\n| {{ic|~/.nuget/packages}}\n|\n| [https://docs.microsoft.com/en-us/nuget/consume-packages/managing-the-global-packages-and-cache-folders]\n| {{ic|1=export NUGET_PACKAGES=\"$XDG_CACHE_HOME\"/NuGetPackages}}\n|-\n| [[NVIDIA]]\n| {{ic|~/.nv}}\n|\n|\n| Uses {{ic|XDG_CACHE_HOME}} if set, otherwise improperly falls back to {{ic|~/.nv}} instead of {{ic|~/.cache}}.\n|-\n| {{Pkg|nvidia-settings}}\n| {{ic|~/.nvidia-settings-rc}}\n|\n| [https://github.com/NVIDIA/nvidia-settings/issues/30]\n| {{ic|1=nvidia-settings --config=\"$XDG_CONFIG_HOME\"/nvidia/settings}}\n|-\n| {{AUR|nvm}}\n| {{ic|~/.nvm}}\n|\n|\n| {{ic|1=export NVM_DIR=\"$XDG_DATA_HOME\"/nvm}}\n|-\n| [[Octave]]\n| {{ic|~/octave}}, {{ic|~/.octave_packages}}, {{ic|~/.octave_hist}}\n|\n|\n| {{ic|1=export OCTAVE_HISTFILE=\"$XDG_CACHE_HOME/octave-hsts\"}}, {{ic|1=export OCTAVE_SITE_INITFILE=\"$XDG_CONFIG_HOME/octave/octaverc\"}}\n\n{{hc|$XDG_CONFIG_HOME/octave/octaverc|<nowiki>\nsource /usr/share/octave/site/m/startup/octaverc;\npkg prefix ~/.local/share/octave/packages ~/.local/share/octave/packages;\npkg local_list /home/<your username>/.local/share/octave/octave_packages;\n</nowiki>}}\nThe {{ic|local_list}} option must be given an absolute path.\n|-\n| {{AUR|omnisharp-roslyn-bin}}\n| {{ic|~/.omnisharp/}}\n| [https://github.com/OmniSharp/omnisharp-roslyn/commit/e1353fb8ded7070d6e126b0b6030dac5d3d707ea]\n| [https://github.com/OmniSharp/omnisharp-roslyn/issues/953]\n| {{ic|1=export OMNISHARPHOME=\"$XDG_CONFIG_HOME/omnisharp\"}}\n|-\n| {{Pkg|openscad}}\n| {{ic|~/.OpenSCAD}}\n| [https://github.com/openscad/openscad/commit/7c3077b0f 7c3077b0f]\n| [https://github.com/openscad/openscad/issues/125]\n| Does not fully honour XDG Base Directory Specification, see [https://github.com/openscad/openscad/issues/373]\n\nCurrently it [https://github.com/openscad/openscad/blob/master/src/platform/PlatformUtils-posix.cc#L105 hard-codes] {{ic|~/.local/share}}.\n|-\n| {{Pkg|parallel}}\n| {{ic|~/.parallel}}\n| [https://git.savannah.gnu.org/cgit/parallel.git/commit/?id=685018f532f4e2d24b84eb28d5de3d759f0d1af1 20170422]\n|\n| {{ic|1=export PARALLEL_HOME=\"$XDG_CONFIG_HOME\"/parallel}}\n|-\n| [[pass]]\n| {{ic|~/.password-store}}\n|\n|\n| {{ic|1=export PASSWORD_STORE_DIR=\"$XDG_DATA_HOME\"/pass}}\n|-\n| [[Pidgin]]\n| {{ic|~/.purple}}\n|\n| [https://developer.pidgin.im/ticket/4911]\n| {{ic|1=pidgin --config=\"$XDG_DATA_HOME\"/purple}}\n|-\n| {{Pkg|platformio-core}}\n| {{ic|~/.platformio}}\n|\n| [https://github.com/platformio/platformio-core/issues/2872]\n| {{ic|1=export PLATFORMIO_CORE_DIR=\"$XDG_DATA_HOME\"/platformio}}\n|-\n| [[PostgreSQL]]\n| {{ic|~/.psqlrc}}, {{ic|~/.psql_history}}, {{ic|~/.pgpass}}, {{ic|~/.pg_service.conf}}\n| 9.2\n| [https://www.postgresql.org/docs/current/static/app-psql.html] [https://www.postgresql.org/docs/current/static/libpq-envars.html]\n| {{ic|1=export PSQLRC=\"$XDG_CONFIG_HOME/pg/psqlrc\"}}, {{ic|1=export PSQL_HISTORY=\"$XDG_STATE_HOME/psql_history\"}}, {{ic|1=export PGPASSFILE=\"$XDG_CONFIG_HOME/pg/pgpass\"}}, {{ic|1=export PGSERVICEFILE=\"$XDG_CONFIG_HOME/pg/pg_service.conf\"}}\n\nIt is required to create both directories: {{ic|1=mkdir \"$XDG_CONFIG_HOME/pg\" && mkdir \"$XDG_STATE_HOME\"}}\n|-\n| [[PulseAudio]]\n| {{ic|~/.esd_auth}}\n|\n|\n| Very likely generated by the {{ic|module-esound-protocol-unix.so}} module.  It can be configured to use a different location but it makes much more sense to just comment out this module in {{ic|/etc/pulse/default.pa}} or {{ic|\"$XDG_CONFIG_HOME\"/pulse/default.pa}}.\n|-\n| {{Pkg|pyenv}}\n| {{ic|~/.pyenv}}\n|\n| [https://github.com/pyenv/pyenv/issues/139] [https://github.com/pyenv/pyenv/issues/1789]\n| {{ic|1=export PYENV_ROOT=$XDG_DATA_HOME/pyenv}}\n|-\n| {{Pkg|azure-cli}}\n| {{ic|~/.azure}}\n|\n|\n| {{ic|1=export AZURE_CONFIG_DIR=$XDG_DATA_HOME/azure}}\n|-\n| [[python]]\n| {{ic|~/.python_history}}\n| [https://github.com/python/cpython/pull/13208#issuecomment-1877159768 v3.13]\n| [https://bugs.python.org/issue29779] [https://bugs.python.org/issue20886] [https://github.com/python/cpython/pull/13208]\n| All history from interactive sessions is saved to {{ic|~/.python_history}} by default since [https://bugs.python.org/issue5845 version 3.4] and {{ic|PYTHON_HISTORY}} since 3.13. This can still be customized the same way as in older versions (see [https://docs.python.org/3/library/readline.html?highlight=readline#example this example]), including to [https://bugs.python.org/msg318437 use a custom path] or [https://bugs.python.org/msg265568 disable history saving].\n\n[https://docs.python.org/3.13/using/cmdline.html#envvar-PYTHON_HISTORY PYTHON_HISTORY]: {{ic|1=export PYTHON_HISTORY=$XDG_STATE_HOME/python/history}}\n[https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPYCACHEPREFIX PYTHONPYCACHEPREFIX]: {{ic|1=export PYTHONPYCACHEPREFIX=$XDG_CACHE_HOME/python}}\n[https://docs.python.org/3/using/cmdline.html#envvar-PYTHONUSERBASE PYTHONUSERBASE]: {{ic|1=export PYTHONUSERBASE=$XDG_DATA_HOME/python}}\n|-\n| {{AUR|python-grip}}\n| {{ic|~/.grip}}\n|\n|\n| {{ic|1=export GRIPHOME=\"$XDG_CONFIG_HOME/grip\"}}\n|-\n| {{Pkg|python-setuptools}}\n| {{ic|~/.python-eggs}}\n|\n|\n| {{ic|1=export PYTHON_EGG_CACHE=\"$XDG_CACHE_HOME\"/python-eggs}}\n|-\n| {{Pkg|racket}}\n| {{ic|~/.racketrc}}, {{ic|~/.racket}}\n|\n| [https://github.com/racket/racket/issues/2740]\n| {{ic|1=export PLTUSERHOME=\"$XDG_DATA_HOME\"/racket}}\n|-\n| {{AUR|rbenv}}\n| {{ic|~/.rbenv}}\n|\n| [https://github.com/rbenv/rbenv/issues/811] [https://github.com/rbenv/rbenv/issues/1146]\n| {{ic|1=export RBENV_ROOT=\"$XDG_DATA_HOME\"/rbenv}}\n|-\n| {{AUR|nodenv}}\n| {{ic|~/.nodenv}}\n|\n|\n| {{ic|1=export NODENV_ROOT=\"$XDG_DATA_HOME\"/nodenv}}\n|-\n| [[readline]]\n| {{ic|~/.inputrc}}\n|\n|\n| {{ic|1=export INPUTRC=\"$XDG_CONFIG_HOME\"/readline/inputrc}}\n|-\n| {{Pkg|recoll}}\n| {{ic|~/.recoll}}\n|\n|\n| {{ic|1=export RECOLL_CONFDIR=\"$XDG_CONFIG_HOME/recoll\"}}\n|-\n| [[redis]]\n| {{ic|~/.rediscli_history}}, {{ic|~/.redisclirc}}\n|\n|\n|{{ic|1=export REDISCLI_HISTFILE=\"$XDG_DATA_HOME\"/redis/rediscli_history}}, {{ic|1=export REDISCLI_RCFILE=\"$XDG_CONFIG_HOME\"/redis/redisclirc}}\n|-\n| {{Pkg|ripgrep}}\n|\n|\n| [https://github.com/BurntSushi/ripgrep/blob/master/GUIDE.md#configuration-file]\n|{{ic|1=export RIPGREP_CONFIG_PATH=$XDG_CONFIG_HOME/ripgrep/config}}\n|-\n| {{Pkg|rlwrap}}\n| {{ic|~/.*_history}}\n|\n| [https://github.com/hanslub42/rlwrap/issues/25]\n| {{ic|1=export RLWRAP_HOME=\"$XDG_DATA_HOME\"/rlwrap}}\n|-\n| {{Aur|ruby-solargraph}}\n| {{ic|~/.solargraph/cache/}}\n|\n| [https://github.com/castwide/solargraph/blob/master/README.md]\n| {{ic|1=export SOLARGRAPH_CACHE=$XDG_CACHE_HOME/solargraph}}\n|-\n| {{Pkg|ruff}}\n| {{ic|.ruff_cache}}\n|\n| [https://github.com/charliermarsh/ruff/issues/1292]\n| {{ic|1=export RUFF_CACHE_DIR=$XDG_CACHE_HOME/ruff}}\n|-\n| [[Rust#Rustup]]\n| {{ic|~/.rustup}}\n|\n| [https://github.com/rust-lang-nursery/rustup.rs/issues/247]\n| {{ic|1=export RUSTUP_HOME=\"$XDG_DATA_HOME\"/rustup}}\n|-\n| {{Pkg|sbt}}\n| {{ic|~/.sbt}}\n{{ic|~/.ivy2}}\n|\n| [https://github.com/sbt/sbt/issues/3681]\n| {{ic|1=sbt -ivy \"$XDG_DATA_HOME\"/ivy2 -sbt-dir \"$XDG_DATA_HOME\"/sbt}} (beware [https://github.com/sbt/sbt/issues/3598])\n|-\n| [[SageMath]]\n| {{ic|~/.sage}}\n|\n|\n| {{ic|1=export DOT_SAGE=\"$XDG_CONFIG_HOME\"/sage}}\n|-\n| [[GNU Screen]]\n| {{ic|~/.screenrc}}\n|\n|\n| {{ic|1=export SCREENRC=\"$XDG_CONFIG_HOME\"/screen/screenrc}}\n|-\n| {{AUR|simplescreenrecorder}}\n| {{ic|~/.ssr/}}\n| [https://github.com/MaartenBaert/ssr/releases/tag/0.4.3 0.4.3]\n| [https://github.com/MaartenBaert/ssr/issues/407]\n[https://github.com/MaartenBaert/ssr/issues/813]\n| Will use {{ic|$XDG_CONFIG_HOME/simplescreenrecorder/}} ONLY if it already was created otherwise defaults to {{ic|~/.ssr}}\n\n{{ic|1=mv ~/.ssr \"$XDG_CONFIG_HOME\"/simplescreenrecorder}}\n|-\n| {{AUR|singularity-ce}}\n| {{ic|~/.singularity}}\n| [https://github.com/sylabs/singularity/releases/tag/v3.11.4 3.11.4]\n| \n| {{ic|1=export SINGULARITY_CONFIGDIR=\"$XDG_CONFIG_HOME/singularity\"}}, {{ic|1=export SINGULARITY_CACHEDIR=\"$XDG_CACHE_HOME/singularity\"}}\n|-\n| [https://www.spacemacs.org/ spacemacs]\n| {{ic|~/.spacemacs}}, {{ic|~/.spacemacs.d}}\n| [https://github.com/syl20bnr/spacemacs/commit/e1eed07c30ea395fb9cfebc8ec3376dcffbace11]\n| [https://github.com/syl20bnr/spacemacs/issues/3589]\n| Move the {{ic|~/.spacemacs}} file.\n\n{{ic|1=export SPACEMACSDIR=\"$XDG_CONFIG_HOME\"/spacemacs}}, {{ic|mv ~/.spacemacs \"$SPACEMACSDIR\"/init.el}}\n\nOther files need to be configured like Emacs.\n|-\n| {{Pkg|starship}}\n| {{ic|~/.config/starship}}, {{ic|~/.cache/starship}}\n| [https://github.com/starship/starship/pull/86] ([https://github.com/starship/starship/releases/tag/v0.2.0 v0.2.0]), [https://github.com/starship/starship/pull/1576] ([https://github.com/starship/starship/releases/tag/v0.45.0 v0.45.0])\n| [https://github.com/starship/starship/issues/896#issuecomment-952402978]\n| {{ic|1=export STARSHIP_CONFIG=\"$XDG_CONFIG_HOME\"/starship.toml}}, {{ic|1=export STARSHIP_CACHE=\"$XDG_CACHE_HOME\"/starship}}\n|-\n| [[subversion]]\n| {{ic|~/.subversion}}\n|\n| [https://issues.apache.org/jira/browse/SVN-4599] [https://mail-archives.apache.org/mod_mbox/subversion-users/201204.mbox/%3c4F8FBCC6.4080205@ritsuka.org%3e][https://mail-archives.apache.org/mod_mbox/subversion-dev/201509.mbox/%3C20150917222954.GA20331@teapot%3E]\n| {{ic|1=alias svn=\"svn --config-dir \\\"$XDG_CONFIG_HOME\\\"/subversion\"}}\n|-\n| {{Pkg|sudo}}\n| {{ic|~/.sudo_as_admin_successful}}\n| [https://www.sudo.ws/stable.html#1.9.6 1.9.6]\n| [https://github.com/sudo-project/sudo/issues/56] [https://www.sudo.ws/repos/sudo/rev/d77c3876fa95]\n| Only present when activated at compile-time (default none). An admin_flag parameter can be used in /etc/sudoers since 1.9.6.\n|-\n| {{Pkg|task}}\n| {{ic|~/.task}}, {{ic|~/.taskrc}}\n|\n|\n| {{ic|1=export TASKDATA=\"$XDG_DATA_HOME\"/task}}, {{ic|1=export TASKRC=\"$XDG_CONFIG_HOME\"/task/taskrc}}}}, {{ic|[https://github.com/GothenburgBitFactory/taskwarrior/pull/2316 Fully supported in version 2.6] (note $XDG_CONFIG_HOME/task/taskrc ''must'' exist, otherwise taskwarrior will offer to create sample config in legacy $HOME/.taskrc location, even if $XDG_CONFIG_HOME is set [https://github.com/GothenburgBitFactory/taskwarrior/pull/2316#issuecomment-732821437][https://github.com/GothenburgBitFactory/taskwarrior/blob/112ac54a57adfb3cc2e6e60dbbb1f5c7d9db3e18/doc/man/task.1.in#L1451])\n|-\n| Local [[TeX Live]] TeXmf tree, TeXmf caches and config\n| {{ic|~/texmf}}, {{ic|~/.texlive/texmf-var}}, {{ic|~/.texlive/texmf-config}}\n|\n|\n| {{ic|1=export TEXMFHOME=$XDG_DATA_HOME/texmf}}, {{ic|1=export TEXMFVAR=$XDG_CACHE_HOME/texlive/texmf-var}}, {{ic|1=export TEXMFCONFIG=$XDG_CONFIG_HOME/texlive/texmf-config}}\n|-\n| [https://www.texmacs.org/ TeXmacs]\n| {{ic|~/.TeXmacs}}\n|\n|\n| {{ic|1=export TEXMACS_HOME_PATH=$XDG_STATE_HOME/texmacs}}\n|-\n| {{AUR|tiptop}}\n| {{ic|~/.tiptoprc}}\n|\n|\n| This will still expect the {{ic|.tiptoprc}} file.\n{{ic|tiptop -W \"$XDG_CONFIG_HOME\"/tiptop}}\n|-\n| {{AUR|ruby-travis}}\n| {{ic|~/.travis/}}\n|\n| [https://github.com/travis-ci/travis.rb/issues/219]\n| {{ic|1=export TRAVIS_CONFIG_PATH=$XDG_CONFIG_HOME/travis}}\n|-\n| {{Pkg|uncrustify}}\n| {{ic|~/.uncrustify.cfg}}\n|\n|\n| {{ic|1=export UNCRUSTIFY_CONFIG=\"$XDG_CONFIG_HOME\"/uncrustify/uncrustify.cfg}}\n|-\n| [[Unison]]\n| {{ic|~/.unison}}\n|\n|\n| {{ic|1=export UNISON=\"$XDG_DATA_HOME\"/unison}}\n|-\n| {{AUR|units}}\n| {{ic|~/.units_history}}\n|\n|\n| {{ic|1=units --history \"$XDG_CACHE_HOME\"/units_history}}\n|-\n| [[rxvt-unicode/Tips and tricks#Daemon-client|urxvtd]]\n| {{ic|~/.urxvt/urxvtd-hostname}}\n|\n|\n| {{ic|1=export RXVT_SOCKET=\"$XDG_RUNTIME_DIR\"/urxvtd}}\n|-\n| [[Vagrant]]\n| {{ic|~/.vagrant.d}}, {{ic|~/.vagrant.d/aliases}}\n|\n| [https://www.vagrantup.com/docs/other/environmental-variables.html]\n| {{ic|1=export VAGRANT_HOME=\"$XDG_DATA_HOME\"/vagrant}}, {{ic|1=export VAGRANT_ALIAS_FILE=\"$XDG_DATA_HOME\"/vagrant/aliases}}\n|-\n| {{Pkg|vint}}\n| {{ic|~/.vintrc.yaml}}, {{ic|.vintrc.yml}}, {{ic|.vintrc}}\n| [https://github.com/Vimjas/vint/pull/235/commits/0f741ac2c 0f741ac2c]\n| [https://github.com/Vimjas/vint/pull/235]\n| Undocumented, but the code says {{ic|$XDG_CONFIG_HOME/.vintrc.yaml}} should work\n|-\n| [[virtualenv]]\n| {{ic|~/.virtualenvs}}\n|\n|\n| {{ic|1=export WORKON_HOME=\"$XDG_DATA_HOME/virtualenvs\"}}\n|-\n| [[Visual Studio Code]]\n| {{ic|~/.vscode-oss/}}\n|\n| [https://github.com/Microsoft/vscode/issues/3884]\n| You can use {{ic|1=export VSCODE_PORTABLE=\"$XDG_DATA_HOME\"/vscode}}, which is not documented and might break unexpectedly.\nSetting this makes the editor look for the contents of {{ic|1=.config/Code - OSS}} in {{ic|1=$VSCODE_PORTABLE/user-data}}.\n\nYou can also run Visual Studio with the {{ic|1=--extensions-dir}} flag, such as {{ic|1=code --extensions-dir \"$XDG_DATA_HOME/vscode\"}}. This is documented and probably will not break as unexpectedly, as it is {{ic|[https://github.com/microsoft/vscode/issues/329 has other use cases]}}.\n|-\n| {{AUR|VSCodium}}\n| {{ic|~/.vscode-oss/}}\n|\n| [https://github.com/VSCodium/vscodium/issues/561] [https://github.com/VSCodium/vscodium/issues/671]\n| You can run VSCodium with the {{ic|1=--extensions-dir}} flag, such as {{ic|1=vscodium --extensions-dir \"$XDG_DATA_HOME/vscode\"}}. This however won't prevent the creation of  {{ic|1=~/.vscode-oss/}} directory.\n|-\n| {{Pkg|w3m}}\n| {{ic|~/.w3m}}\n| [https://github.com/tats/w3m/commit/26284ff62781cbc14ff18593a8251409ca730098 26284ff]\n| [https://sourceforge.net/p/w3m/feature-requests/31/] [https://github.com/tats/w3m/issues/130]\n| {{ic|1=export W3M_DIR=\"$XDG_STATE_HOME/w3m\"}}\n|-\n| {{Pkg|wakatime}}\n| {{ic|~/.wakatime.cfg}}, {{ic|~/.wakatime.data}}, {{ic|~/.wakatime.db}}, {{ic|~/.wakatime.log}}\n|\n|\n| {{ic|1=export WAKATIME_HOME=\"$XDG_CONFIG_HOME/wakatime\"}}\n\nThe directory needs to be created manually\n\n{{ic|1=mkdir \"$XDG_CONFIG_HOME/wakatime\"}}\n\n|-\n| [[wget]]\n| {{ic|~/.wgetrc}}, {{ic|~/.wget-hsts}}\n|\n|\n| {{ic|1=export WGETRC=\"$XDG_CONFIG_HOME/wgetrc\"}} and add the following as an alias for wget: {{ic|1=wget --hsts-file=\"$XDG_CACHE_HOME/wget-hsts\"}}, or set the {{ic|1=hsts-file}} variable with an absolute path as wgetrc does not support environment variables: {{ic|1=echo hsts-file \\= \"$XDG_CACHE_HOME\"/wget-hsts >> \"$XDG_CONFIG_HOME/wgetrc\"}}\n|-\n| [[wine]]\n| {{ic|~/.wine}}\n|\n| [https://bugs.winehq.org/show_bug.cgi?id=20888]\n| [[Wine#Winetricks|Winetricks]] uses XDG-alike location below for [[Wine#WINEPREFIX|WINEPREFIX]] management:\n{{ic|1=mkdir -p \"$XDG_DATA_HOME\"/wineprefixes}}, {{ic|1=export WINEPREFIX=\"$XDG_DATA_HOME\"/wineprefixes/default}}\n|-\n| {{AUR|x3270}}\n| {{ic|~/.x3270pro}}, {{ic|~/.c3270pro}}\n|\n|\n| {{ic|1=export X3270PRO=\"$XDG_CONFIG_HOME\"/x3270/config}}, {{ic|1=export C3270PRO=\"$XDG_CONFIG_HOME\"/c3270/config}}\n\nApp also creates {{ic|~/.x3270connect}} but this is currently unsupported.\n|-\n| [[xbindkeys]]\n| {{ic|~/.xbindkeysrc}}\n|\n|\n| {{ic|1=xbindkeys -f \"$XDG_CONFIG_HOME\"/xbindkeys/config}}\n|-\n| {{Pkg|xorg-xauth}}\n| {{ic|~/.Xauthority}}\n|\n|\n| {{ic|1=export XAUTHORITY=\"$XDG_RUNTIME_DIR\"/Xauthority}}\n\nNote that [[LightDM]] does not allow you to change this variable. If you change it nonetheless, you will not be able to login. Use [[startx]] instead or [https://askubuntu.com/a/961459 configure LightDM]. According to [https://unix.stackexchange.com/a/175331] [[SLiM]] has {{ic|~/.Xauthority}} hardcoded.\n\nThe [[SDDM]] Xauthority path can be changed in its own configuration files as shown below. Unfortunately, it is relative to the home directory.\n{{hc|1=/etc/sddm.conf.d/xauth-path.conf|2=[X11]\nUserAuthFile=.Xauthority}}\n\nOn Wayland, overriding this may cause Xorg programs to fail to connect to the Xwayland server. For example, both {{pkg|kwin}} and {{pkg|mutter}} use a randomized name, so it cannot be set to a static value.\n|-\n| [[xinit]]\n| {{ic|~/.xinitrc}}, {{ic|~/.xserverrc}}\n|\n| [https://gitlab.freedesktop.org/xorg/app/xinit/issues/14]\n| {{ic|1=export XINITRC=\"$XDG_CONFIG_HOME\"/X11/xinitrc}}, {{ic|1=export XSERVERRC=\"$XDG_CONFIG_HOME\"/X11/xserverrc}}\n|-\n| {{Pkg|xorg-xrdb}}\n| {{ic|~/.Xresources}}, {{ic|~/.Xdefaults}}\n|\n|\n| Ultimately you [https://superuser.com/questions/243914/xresources-or-xdefaults should be] using {{ic|Xresources}} and since these resources are loaded via {{ic|xrdb}} you can specify a path such as {{ic|1=xrdb -load ~/.config/X11/xresources}}.\n|-\n| [[Xorg]]\n| {{ic|~/.xsession}}, {{ic|~/.xsessionrc}}, {{ic|~/.Xsession}}, {{ic|~/.xsession-errors}}\n|\n|\n| These can be added as part of your Xorg init script ({{ic|~/.xinitrc}}) or Xsession start script (which will often be based on {{ic|/etc/X11/Xsession}}).\nDepending on where you have configured your {{ic|$XDG_CACHE_HOME}}, you might need to expand the paths yourself.\n{{hc|# xsession start script|<nowiki>\nUSERXSESSION=\"$XDG_CACHE_HOME/X11/xsession\"\nUSERXSESSIONRC=\"$XDG_CACHE_HOME/X11/xsessionrc\"\nALTUSERXSESSION=\"$XDG_CACHE_HOME/X11/Xsession\"\nERRFILE=\"$XDG_CACHE_HOME/X11/xsession-errors\"\n</nowiki>}}\nUnlike most other examples in this table, actual X11 init scripts will vary a lot between installations.\n|-\n| {{Pkg|z}}\n| {{ic|~/.z}}\n|\n| [https://github.com/rupa/z/issues/267]\n| {{ic|1=export _Z_DATA=\"$XDG_DATA_HOME/z\"}}\n|-\n| {{Pkg|yarn}}\n| {{ic|~/.yarnrc}}, {{ic|~/.yarn/}}, {{ic|~/.yarncache/}}, {{ic|~/.yarn-config/}}\n| [https://github.com/yarnpkg/yarn/commit/2d454b5 2d454b5]\n| [https://github.com/yarnpkg/yarn/pull/5336] [https://github.com/yarnpkg/yarn/issues/2334]\n| {{ic|1=alias yarn='yarn --use-yarnrc \"$XDG_CONFIG_HOME/yarn/config\"'}}\n|-\n| [[zsh]]\n| {{ic|~/.zshrc}}, {{ic|~/.zprofile}}, {{ic|~/.zshenv}}, {{ic|~/.zlogin}}, {{ic|~/.zlogout}}, {{ic|~/.histfile}}, {{ic|~/.zcompdump}}, {{ic|~/.zcompcache}}\n| [https://www.zsh.org/mla/workers/2013/msg00692.html]\n|\n| {{ic|1=export ZDOTDIR=$HOME/.config/zsh}} to avoid the need of most [[Zsh#Startup/Shutdown files|zsh dotfiles]] in your home.\n{{hc|.config/zsh/.zshrc|output=\nHISTFILE=\"$XDG_STATE_HOME\"/zsh/history\n# Completion files: Use XDG dirs\n[ -d \"$XDG_CACHE_HOME\"/zsh ] <nowiki>||</nowiki> mkdir -p \"$XDG_CACHE_HOME\"/zsh\nzstyle ':completion:*' cache-path \"$XDG_CACHE_HOME\"/zsh/zcompcache\ncompinit -d \"$XDG_CACHE_HOME\"/zsh/zcompdump-$ZSH_VERSION \n}}\n\nFinally, if you use zsh as a login shell and chose to rely on either of the startup files {{ic|~/.zshenv}} ''or'', {{ic|~/.zprofile}} ''or'', {{ic|~/.zlogin}} to set important enviroment variables such as {{ic|ZDOTDIR}}, to bootstrap, there is no way around having the one file that sets {{ic|ZDOTDIR}} be in the default location. For context, an exception is if your wider system configuration does set the {{ic|ZDOTDIR}} enviroment variable before that.\n|}\n\n=== Hardcoded ===\n\n{| class=\"wikitable sortable\" style=\"width: 100%\"\n! Application\n! Legacy Path\n! Discussion\n! Notes\n|-\n| [[adb]] & [https://developer.android.com/studio/index.html Android Studio]\n| {{ic|~/.android/}}\n|\n| Despite [https://android.googlesource.com/platform/system/core/+/d5fcafaf41f8ec90986c813f75ec78402096af2d%5E%21/ appearances otherwise], adb will ''always'' generate {{ic|~/.android/adbkeys}}, though it will try keys in {{ic|ADB_VENDOR_KEYS}} as well.\n|-\n| {{Pkg|aegisub}}\n| {{ic|~/.aegisub/}}\n| [https://github.com/Aegisub/Aegisub/issues/226]\n|\n|-\n| [[alpine]]\n| {{ic|~/.pinerc}}, {{ic|~/.addressbook}}, {{ic|~/.pine-debug[1-4]}}, {{ic|~/.newsrc}}, {{ic|~/.mailcap}}, {{ic|~/.mime.types}}, {{ic|~/.pine-interrupted-mail}}\n| \n| {{ic|1=alias alpine=\"alpine -p $XDG_CONFIG_HOME/alpine/pinerc\"}}\nIn the above config file, some locations can be customized using options like {{ic|1=newsrc-path=}} and {{ic|1=address-book=}}.\n|-\n| [[aMule]]\n| {{ic|~/.aMule}}\n| [https://bugs.amule.org/view.php?id=1308] [http://forum.amule.org/index.php?topic=18056] [https://github.com/amule-project/amule/issues/254]\n|\n|-\n| [https://osdn.net/projects/anthy/ anthy]\n| {{ic|~/.anthy}}\n| [https://osdn.net/ticket/browse.php?group_id=14&tid=28397]\n|\n|-\n| [https://directory.apache.org/studio/ Apache Directory Studio]\n| {{ic|~/.ApacheDirectoryStudio}}\n|\n|\n|-\n| [https://christian.amsuess.com/tools/arandr/ ARandR]\n| {{ic|~/.screenlayout}}\n| [https://gitlab.com/arandr/arandr/-/issues/45]\n|\n|-\n| [[Arduino]]\n| {{ic|~/.arduino15}}, {{ic|~/.jssc}}\n| [https://github.com/arduino/Arduino/issues/3915 won't fix]\n|\n|-\n| {{Pkg|arduino-cli}}\n| {{ic|~.arduino15/}}\n| [https://github.com/arduino/arduino-cli/pull/140]\n| {{ic|1=mv ~/.arduino15 $XDG_CONFIG_HOME/arduino15}}\nSpecify the new directories used by Arduino CLI in arduino-cli.yaml as mentioned in the documentation [https://arduino.github.io/arduino-cli/latest/configuration/ here].\n{{ic|1=alias arduino-cli='arduino-cli --config-file $XDG_CONFIG_HOME/arduino15/arduino-cli.yaml'}}\n|-\n| [https://dotnet.microsoft.com/en-us/apps/aspnet ASP.NET Core]\n| {{ic|~/.aspnet}}\n| [https://github.com/dotnet/aspnetcore/issues/43278]\n|\n|-\n| [http://fixounet.free.fr/avidemux/ Avidemux]\n| {{ic|~/.avidemux6}}\n| [https://avidemux.org/smif/index.php/topic,19596.0.html]\n|\n|-\n| [[Bash]]\n| {{ic|~/.bashrc}}, {{ic|~/.bash_history}}, {{ic|~/.bash_profile}}, {{ic|~/.bash_login}}, {{ic|~/.bash_logout}}\n| [https://savannah.gnu.org/support/?108134 108134] [https://savannah.gnu.org/patch/?10431 10431]\n| {{ic|1=mkdir -p \"$XDG_STATE_HOME\"/bash}}\n{{ic|1=export HISTFILE=\"$XDG_STATE_HOME\"/bash/history}}\n\n{{ic|bashrc}} can be sourced from a different location in {{ic|/etc/bash.bashrc}}.\nSpecify {{ic|--init-file <file>}} as an alternative to {{ic|~/.bashrc}} for interactive shells.\n|-\n| [[Chef|Berkshelf]]\n| {{ic|~/.berkshelf/}}\n|\n|\n|-\n| {{AUR|chatty}}\n| {{ic|~/.chatty/}}\n| [https://github.com/chatty/chatty/issues/273]\n|\n|-\n| {{Pkg|cmake}}\n| {{ic|~/.cmake/}}\n| [https://gitlab.kitware.com/cmake/cmake/-/issues/22480]\n| Used for the user package registry {{ic|~/.cmake/packages/<package>}}, detailed in {{man|7|cmake-packages|User Package Registry}} and [https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Package-Registry the Package registry wiki page]. Looks like it's hardcoded, for example in [https://gitlab.kitware.com/cmake/cmake/blob/v3.12.1/Source/cmFindPackageCommand.cxx#L1221 cmFindPackageCommand.cxx].\n|-\n| {{Pkg|cmus}}\n| {{ic|~/.config/cmus}}\n| [https://github.com/cmus/cmus/pull/69]\n| [https://github.com/cmus/cmus/issues/1283]\n|-\n| [[Cinnamon]]\n| {{ic|~/.cinnamon/}}\n| [https://github.com/linuxmint/Cinnamon/issues/7807]\n|\n|-\n| {{AUR|conan}}\n| {{ic|~/.conan/}}\n| [https://github.com/conan-io/conan/issues/2526]\n| {{ic|1=export CONAN_USER_HOME=\"$XDG_CONFIG_HOME\"}} will set the directory in which {{ic|.conan/}} is created. It was [https://docs.conan.io/en/latest/reference/env_vars.html#conan-user-home designed to simplify CI], but can be used here too.\n|-\n| {{AUR|cryptomator}}\n| {{ic|~/.Cryptomator}}\n| [https://github.com/cryptomator/cryptomator/issues/710]\n|\n|-\n| {{Pkg|ctags}} (universal-ctags)\n| {{ic|~/.ctagsrc, .ctags.d}}\n| [https://github.com/universal-ctags/ctags/issues/89]\n|\n|-\n| [https://chrome.google.com/webstore/detail/cvim/ihlenndgcmojhcghmfjfneahoeklbjjh cVim]{{Dead link|2022|09|23|status=404}}\n| {{ic|~/.cvimrc}}\n| [https://github.com/1995eaton/chromium-vim/issues/750]\n|\n|-\n| [[darcs]]\n| {{ic|~/.darcs/}}\n| [http://bugs.darcs.net/issue2453]\n|\n|-\n| {{Pkg|dart}}\n| {{ic|~/.dart}}, {{ic|~/.dart-tool}}, {{ic|~/.dartServer}}\n| [https://github.com/dart-lang/sdk/issues/41560]\n|\n|-\n| [[dbus]]\n| {{ic|~/.dbus/}}\n| [https://gitlab.freedesktop.org/dbus/dbus/issues/46]\n| Consider using {{pkg|dbus-broker}}, as it does not create or use this directory.\n|-\n| {{Pkg|devede}}\n| {{ic|~/.devedeng}}\n|\n| Hardcoded [https://gitlab.com/rastersoft/devedeng/blob/f0893b3ff7b14723bd148db35bdfe2d284156d19/src/devedeng/configuration_data.py#L111 here]\n|-\n| [https://wiki.gnome.org/Apps/Dia Dia]\n| {{ic|~/.dia/}}\n|\n|\n|-\n| [https://man.archlinux.org/man/dig.1 dig]\n| {{ic|~/.digrc}}\n|\n|\n|-\n| {{Pkg|dotnet-sdk}}\n| {{ic|~/.dotnet/}}, {{ic|~/.templateengine}}\n| [https://github.com/dotnet/cli/issues/7569]\n|\n|-\n| [[dropbox]]\n| {{ic|~/.dropbox/}}\n|\n|\n|-\n| [[Eclipse]]\n| {{ic|~/.eclipse/}}\n| [https://bugs.eclipse.org/bugs/show_bug.cgi?id=200809]\n| Option {{ic|1=-Dosgi.configuration.area=@user.home/.config/..}} overrides but must be added to {{ic|\"$ECLIPSE_HOME\"/eclipse.ini\"}} rather than command line which means you must have write access to {{ic|$ECLIPSE_HOME}}. (Arch Linux hard-codes {{ic|$ECLIPSE_HOME}} in {{ic|/usr/bin/eclipse}})\n|-\n| {{Pkg|emacs-slime}}\n| {{ic|~/.slime/}}\n| [https://github.com/slime/slime/issues/610]\n[https://github.com/slime/slime/pull/787]\n|\n|-\n| {{AUR|equalx}}\n| {{ic|~/.equalx/}}\n| [https://bugs.launchpad.net/equalx/+bug/2014460]\n| \n|-\n| [https://www.fetchmail.info/ Fetchmail]\n| {{ic|~/.fetchmailrc}}\n|\n|\n|-\n| [[Firefox]]\n| {{ic|~/.mozilla/}}\n| [https://bugzil.la/259356] [https://phabricator.services.mozilla.com/D6995]\n|\n|-\n| [[Flatpak]]\n| {{ic|~/.var/}}\n| [https://github.com/flatpak/flatpak/issues/46] [https://github.com/flatpak/flatpak.github.io/issues/191] [https://github.com/flatpak/flatpak/issues/1651 won't fix]\n|\n|-\n| [https://github.com/rwestlund/freesweep freesweep]\n| {{ic|~/.sweeprc}}\n| [https://github.com/rwestlund/freesweep/issues/9]\n|\n|-\n| {{AUR|gftp}}\n| {{ic|~/.gftp/}}\n| [https://github.com/masneyb/gftp/issues/99#issuecomment-735030824]\n| Following the XDG spec is planned for gftp.\n|-\n| {{Pkg|ghidra}}\n|\n| [https://github.com/NationalSecurityAgency/ghidra/issues/908]\n|\n|-\n| {{AUR|gitkraken}}\n| {{ic|~/.gitkraken/}}\n| [https://feedback.gitkraken.com/suggestions/197923/support-for-moving-the-config-directory-on-linux]\n|\n|-\n| [[GoldenDict]]\n| {{ic|~/.goldendict/}}\n| [https://github.com/goldendict/goldendict/issues/151]\n|\n|-\n| {{Pkg|gphoto2}}\n| {{ic|~/.gphoto}}\n| [https://github.com/gphoto/gphoto2/issues/249]\n|\n|-\n| {{Pkg|gramps}}\n| {{ic|~/.gramps/}}\n| [https://gramps-project.org/bugs/view.php?id=8025]\n| 2022 Support XDG base directory specification (for next release Gramps 5.2 ) - Patch https://github.com/gramps-project/gramps/pull/1368\n|-\n| {{Pkg|groovy}}\n| {{ic|~/.groovy/}}\n|\n|\n|-\n| {{Pkg|grsync}}\n| {{ic|~/.grsync/}}\n| [https://sourceforge.net/p/grsync/feature-requests/15/]\n|\n|-\n| {{AUR|google-cloud-cli}}\n| {{ic|~/.gsutil/}}\n| [https://github.com/GoogleCloudPlatform/gsutil/issues/991]\n|\n|-\n| [https://recordmydesktop.sourceforge.net/about.php gtk-recordMyDesktop]\n| {{ic|~/.gtk-recordmydesktop}}\n|\n|\n|-\n| {{Pkg|hplip}}\n| {{ic|~/.hplip/}}\n| [https://bugs.launchpad.net/hplip/+bug/307152]\n|\n|-\n| {{Pkg|hydrogen}}\n| {{ic|~/.hydrogen/}}\n| [https://github.com/hydrogen-music/hydrogen/issues/643]\n|\n|-\n| [https://www.idris-lang.org/ idris]\n| {{ic|~/.idris}}\n| [https://github.com/idris-lang/Idris-dev/pull/3456]\n|\n|-\n| {{AUR|itch-setup-bin}}\n| {{ic|~/.itch}}\n| [https://github.com/itchio/itch/issues/2356 won't fix]\n| You can move the Game install location in the app settings.\n|-\n| [https://sourceforge.net/projects/jmol/ Jmol]\n| {{ic|~/.jmol/}}\n| [https://sourceforge.net/p/jmol/feature-requests/261/]\n|\n|-\n| {{AUR|lbdb}}\n| {{ic|~/.lbdbrc, ~/.lbdb/}}\n| [https://github.com/RolandRosenfeld/lbdb/blob/eb162aa9da36f699cf821c6487210c7979fcd8ee/TODO#L18]\n|\n|-\n| [[llpp]]\n| {{ic|~/.config/llpp.conf}}\n| [https://github.com/moosotc/llpp/issues/180]{{Dead link|2022|09|23|status=404}} (repo was deleted)\n| Added in [https://repo.or.cz/w/llpp.git/commit/3ab86f0 3ab86f0] but subsequently reverted in [https://repo.or.cz/w/llpp.git/commit/e253c9f1 old:e253c9f1]/[https://github.com/criticic/llpp/commit/e253c9f1ca971b4298cfee889820ad60bded54af new:e253c9f1]\n|-\n| [[Java]] OpenJDK\n| {{ic|~/.java/fonts}}\n| [https://bugzilla.redhat.com/show_bug.cgi?id=1154277]\n| {{ic|1=export _JAVA_OPTIONS=-Djava.util.prefs.userRoot=\"$XDG_CONFIG_HOME\"/java}}\n|-\n| [[Java]] OpenJFX\n| {{ic|~/.java/webview}}\n|\n|\n|-\n| {{Pkg|jgmenu}}\n| {{ic|~/.jgmenu-lockfile}}\n| [https://github.com/johanmalm/jgmenu/blob/3e48121dc28d06efb23c7901b7e138c2de167a84/src/lockfile.c#L11] [https://github.com/johanmalm/jgmenu/blob/4e45d04502fc5f77392bef0ff33b7bada0cf07d1/src/jgmenu_run#L7]\n|\n|-\n| {{AUR|jitsi-meet}}\n| {{ic|~/Downloads}}\n| [https://github.com/jitsi/libjitsi/issues/518 libjitsi#518]\n| Download dir hardcoded to {{ic|~/Downloads}} rather than {{ic|XDG_DOWNLOAD_DIR}} (from [[XDG user directories]])\n|-\n| [https://julialang.org/ julia]\n| {{ic|~/.juliarc.jl}}, {{ic|~/.julia_history}}, {{ic|~/.julia}}\n| [https://github.com/JuliaLang/julia/issues/4630] [https://github.com/JuliaLang/julia/issues/10016]\n| The trailing {{ic|:$JULIA_DEPOT_PATH}} is necessary. See [https://docs.julialang.org/en/v1/manual/environment-variables/#JULIA_DEPOT_PATH]\n export JULIA_DEPOT_PATH=\"$XDG_DATA_HOME/julia:$JULIA_DEPOT_PATH\"\n export JULIAUP_DEPOT_PATH=\"$XDG_DATA_HOME/julia\"\n|-\n| {{Pkg|kotlin}}\n| {{ic|~/.kotlinc_history}}\n|\n| Related Konan issue: [https://youtrack.jetbrains.com/issue/KT-40763]\n|-\n| [[Kubernetes]]\n| {{ic|~/.kube/}}\n| [https://github.com/kubernetes/kubectl/issues/942][https://github.com/kubernetes/kubernetes/issues/56402][https://github.com/kubernetes/kubernetes/issues/115522]\n| \n export KUBECONFIG=\"$XDG_CONFIG_HOME/kube\" \n export KUBECACHEDIR=\"$XDG_CACHE_HOME/kube\"\n|-\n| {{AUR|elan-lean}}\n| {{ic|~/.elan}}\n| [https://github.com/leanprover/elan/issues/75]\n|\n|-\n| {{AUR|librewolf}}\n| {{ic|~/.mozilla}}\n{{ic|~/.librewolf}}\n| [https://gitlab.com/librewolf-community/browser/linux/-/issues/129]\n|\n|-\n| [https://lldb.llvm.org/ lldb]\n| {{ic|~/.lldb}}, {{ic|~/.lldbinit}}\n|\n|\n|-\n| [[LMMS]]\n| {{ic|~/.lmmsrc.xml}}\n| [https://github.com/LMMS/lmms/issues/5869]\n|\n|-\n| [https://www.mathomatic.org/ mathomatic]\n| {{ic|~/.mathomaticrc}}, {{ic|~/.matho_history}}\n|\n| History can be moved by using {{ic|rlwrap mathomatic -r}} with the {{ic|RLWRAP_HOME}} environment set appropriately.\n|-\n| [[MediaWiki]]\n| {{ic|~/.mweval_history}} and {{ic|~/.mwsql_history}} (if $HOME is defined)\n|\n| If $HOME is not defined: {{ic|[MediaWiki]/maintenance/.mweval_history}} and {{ic|[MediaWiki]/maintenance/.mwsql_history}}.\n\nGenerated by the maintenance scripts [https://github.com/wikimedia/mediawiki/blob/master/maintenance/eval.php#L99-L100 eval.php] and [https://github.com/wikimedia/mediawiki/blob/master/maintenance/sql.php#L124-L125 sql.php].\n|-\n| [[Minecraft]]\n| {{ic|~/.minecraft/}}\n| [https://bugs.mojang.com/browse/MCL-2563 won't fix]\n|\n|-\n| [[Minetest]]\n| {{ic|~/.minetest/}}\n| [https://github.com/minetest/minetest/issues/864 won't fix] [https://github.com/minetest/minetest/issues/8151]\n|\n|-\n| {{Pkg|minicom}}\n| {{ic|~/.minirc.dfl}}\n|\n| Upstream has a TODO entry for supporting configuration files under {{ic|~/.config/minicom}}. [https://salsa.debian.org/minicom-team/minicom/-/blob/fe9ff103/TODO#L27]\n|-\n| [[Mono]]\n| {{ic|~/.mono/}}\n| [https://github.com/mono/mono/pull/12764]\n|\n|-\n| [https://www.mongodb.org/ mongodb]\n| {{ic|~/.mongorc.js}}, {{ic|~/.dbshell}}\n| [https://jira.mongodb.org/browse/DOCS-5652?jql=text%20~%20%22.mongorc.js%22]\n| [https://stackoverflow.com/questions/22348604/the-mongorc-js-is-not-found-but-there-is-one/22349050#22349050 This Stack Overflow thread] suggests a partial workaround using command-line switch {{ic|--norc}}.\n|-\n|\n| {{ic|~/.netrc}}\n|\n| Like {{ic|~/.ssh}}, many programs expect this file to be here.  These include projects like curl ({{ic|CURLOPT_NETRC_FILE}}), [[ftp]] ({{ic|NETRC}}), [[s-nail]] ({{ic|NETRC}}), etc.  While some of them offer alternative configurable locations, many do not such as w3m, wget and lftp.\n|-\n| {{pkg|nim}}\n| {{ic|~/.nimble}}\n| [https://github.com/nim-lang/nimble/issues/217]\n[https://github.com/nim-lang/Nim/issues/11340]\n| Nimble will [https://github.com/nim-lang/nimble/#configuration try to load] {{ic|~/.config/nimble/nimble.ini}} at startup, set {{ic|nimbleDir}} there. You will have to change {{ic|nimblepath}} in the Nim compiler [https://nim-lang.org/docs/nimc.html#compiler-usage-configuration-files configuration file] as well.\n|-\n| [[NetworkManager|nmcli]]\n| {{ic|~/.nmcli-history}}\n| [https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/64]\n| Hardcoded to {{ic|g_get_home_dir()}}[https://developer.gnome.org/glib/stable/glib-Miscellaneous-Utility-Functions.html#g-get-home-dir] [https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/main/src/nmcli/connections.c#L6598]\n|-\n| [[Networkmanager-openvpn]]\n| {{ic|~/.cert/nm-openvpn}}\n| [https://gitlab.gnome.org/GNOME/NetworkManager-openvpn/issues/35]\n|\n|-\n| {{Pkg|ollama}}\n| {{ic|~/.ollama}}\n| [https://github.com/jmorganca/ollama/issues/228]\n| Model locations can be set with:\n{{ic|1=export OLLAMA_MODELS=$XDG_DATA_HOME/ollama/models}}\n\nSource: [https://github.com/jmorganca/ollama/pull/897]\n|-\n| {{Pkg|openshot}}\n| {{ic|~/.openshot_qt}}\n| [https://github.com/OpenShot/openshot-qt/issues/2440] [https://github.com/OpenShot/openshot-qt/issues/4477]\n|\n|-\n| [[OpenSSH]]\n| {{ic|~/.ssh}}\n| [https://web.archive.org/web/20190925004614/https://bugzilla.mindrot.org/show_bug.cgi?id=2050 won't fix]\n| Assumed to be present by many ssh daemons and clients such as DropBear and OpenSSH.\n|-\n| [https://www.palemoon.org/ palemoon]\n| {{ic|~/.moonchild productions}}\n| [https://forum.palemoon.org/viewtopic.php?f=5&t=9639]\n|\n|-\n| {{AUR|parsec-bin}}\n| {{ic|~/.parsec}}\n|\n|\n|-\n| {{AUR|pcsxr}}\n| {{ic|~/.pcsxr}}\n|\n| A {{ic|-cfg}} flag exists, but can only be set relative to {{ic|~/.pcsxr}}.\n|-\n| [https://perf.wiki.kernel.org/index.php/Main_Page perf]\n| {{ic|~/.debug}}\n|\n| Hardcoded in [https://github.com/torvalds/linux/blob/7d42e98182586f57f376406d033f05fe135edb75/tools/perf/util/config.c#L35 tools/perf/util/config.c]. Commit: [https://github.com/torvalds/linux/commit/45de34bbe3e1b8f4c8bc8ecaf6c915b4b4c545f8]\n|-\n| [[perl]]\n| {{ic|~/.cpan}}, {{ic|~/perl5}}\n| [https://github.com/andk/cpanpm/issues/149]\n| Perl5's [https://github.com/andk/cpanpm CPAN] expects {{ic|~/.cpan}}\n|-\n| {{AUR|phoronix-test-suite}}\n| {{ic|~/.phoronix-test-suite}}\n| [https://github.com/phoronix-test-suite/phoronix-test-suite/issues/453]\n| Partial workaround: [https://github.com/phoronix-test-suite/phoronix-test-suite/blob/ebcde81fcd5cd63956e5f8db5664262b5fd4ceb9/pts-core/pts-core.php#L123]\n|-\n| [[PHP]]\n| {{ic|~/.php_history}}\n| [https://github.com/php/php-src/issues/8546]\n| PHP applications can read/write a custom file with [https://www.php.net/manual/en/function.readline-read-history.php readline_read_history] and [https://www.php.net/manual/en/function.readline-write-history.php readline_write_history].\n|-\n| {{AUR|portfolio-performance-bin}}\n| {{ic|~/.PortfolioPerformance/}}\n| [https://github.com/buchen/portfolio/issues/1922]\n| \n|-\n| various [[shell]]s and [[display manager]]s\n| {{ic|~/.profile}}\n|\n|\n|-\n| {{Pkg|psensor}}\n| {{ic|~/.psensor}}\n| [https://gitlab.com/jeanfi/psensor/-/issues/38]\n|\n|-\n| {{Pkg|pulumi}}\n| {{ic|~/.pulumi}}\n| [https://github.com/pulumi/pulumi/issues/2534]\n|\n|-\n| {{Pkg|python-tensorflow}}\n| {{ic|~/.keras}}\n| [https://github.com/tensorflow/tensorflow/issues/38831]\n| The issues is for {{ic|tf.keras}} module\n|-\n| {{Pkg|quilt}}\n| {{ic|~/.quiltrc}}\n| \n| Fallback to {{ic|/etc/quilt.quiltrc}} if {{ic|~/.quiltrc}} does not exist.\n|-\n| {{Pkg|qmmp}}\n| {{ic|~/.qmmp}}\n| [https://sourceforge.net/p/qmmp-dev/tickets/776]\n|\n|-\n| [https://doc.qt.io/qt-5/qtdesigner-manual.html Qt Designer]\n| {{ic|~/.designer}}\n| [https://bugreports.qt.io/browse/QTCREATORBUG-26093]\n|\n|-\n| [[R]]\n| {{ic|~/.Rprofile, ~/.Rdata, ~/.Rhistory}}\n| \n| \n R_HOME_USER=\"$HOME/.config/R\"\n R_PROFILE_USER=\"$HOME/.config/R/profile\"\n R_HISTFILE=\"$HOME/.config/R/history\"\n|-\n| [http://rednotebook.sourceforge.net/ RedNotebook]\n| {{ic|~/.rednotebook}}\n| [https://github.com/jendrikseipp/rednotebook/issues/404]\n|\n|-\n| [https://remarkableapp.github.io/linux.html Remarkable]\n| {{ic|~/.remarkable}}\n|\n|\n|-\n| {{Pkg|renderdoc}}\n| {{ic|~/.renderdoc}}\n| [https://github.com/baldurk/renderdoc/pull/1741 won't fix]\n|\n|-\n| [https://www.renpy.org/ Ren'Py]\n| {{ic|~/.renpy}}\n| [https://github.com/renpy/renpy/issues/1377#issuecomment-370118555 won't fix]\n|\n|-\n| [https://gerrit.googlesource.com/git-repo/ repo]\n| {{ic|~/.repoconfig}}\n| [https://bugs.chromium.org/p/gerrit/issues/detail?id=13997]\n|\n|-\n| {{Pkg|ripgrep-all}}\n| {{ic|~/.cache/rga}}\n| [https://github.com/phiresky/ripgrep-all/issues/87] [https://github.com/phiresky/ripgrep-all/issues/102] [https://github.com/phiresky/ripgrep-all/issues/129]\n| Support for writing the cache at {{ic|$XDG_CACHE_HOME/ripgrep-all}} (+ reading configuration from {{ic|$XDG_CONFIG_HOME/ripgrep-all/config.jsonc}}) was implemented in commit [https://github.com/phiresky/ripgrep-all/commit/963524bbf5ec861cc1d9d2b57e119eb60125751a 963524b], which has not yet been included in a release (as of v0.9.6).\n|-\n| [[rpm]]\n| {{ic|~/.rpmrc}} {{ic|~/.rpmmacros}}\n| [https://github.com/rpm-software-management/rpm/issues/2153 Backlog]\n| Workaround is to use --rcfile and --macros however this come with sideeffects.\n|-\n| [[SANE]]\n| {{ic|~/.sane/}}\n|\n| {{ic|scanimage}} creates a {{ic|.cal}} file there\n|-\n| {{Pkg|sbcl}}\n| {{ic|~/.sbclrc}}\n|\n| {{hc|/etc/sbclrc|\n(require :asdf)\n(setf sb-ext:*userinit-pathname-function*\n      (lambda () (uiop:xdg-config-home #P\"sbcl/sbclrc\")))\n}}\n\nNote that this requires root privileges and will change the location of {{ic|~/.sbclrc}} for all users. This can be mitigated by checking for an existing {{ic|~/.sbclrc}} inside the {{ic|lambda}} form.\n|-\n| [https://www.seamonkey-project.org/ SeaMonkey]\n| {{ic|~/.mozilla/seamonkey}}\n| [https://bugzil.la/726939]\n|\n|-\n| [https://signal.org/ Signal Desktop]\n| \n| [https://github.com/signalapp/Signal-Desktop/issues/4975]\n| Currently keeps messages in {{ic|~/.config/Signal}}\n|-\n| [[Snap]]\n| {{ic|~/snap/}}\n| [https://bugs.launchpad.net/ubuntu/+source/snapd/+bug/1575053]\n|\n|-\n| [https://www.gnu.org/software/solfege/solfege.html Solfege]\n| {{ic|~/.solfege}}, {{ic|~/.solfegerc}}, {{ic|~/lessonfiles}}\n| [https://savannah.gnu.org/bugs/index.php?50251]\n|\n|-\n| [https://spamassassin.apache.org/ SpamAssassin]\n| {{ic|~/.spamassassin}}\n|\n|\n|-\n| [[Steam]]\n| {{ic|~/.steam}}, {{ic|~/.steampath}}, {{ic|~/.steampid}}\n| [https://github.com/ValveSoftware/steam-for-linux/issues/1890]\n| Many game engines (Unity 3D, Unreal) follow the specification, but then individual game publishers hardcode the paths in [https://www.ctrl.blog/entry/flatpak-steamcloud-xdg Steam Auto-Cloud] causing game-saves to sync to the wrong directory.\n|-\n| {{AUR|stremio}}\n| {{ic|~/.stremio-server/|}}\n| [https://github.com/Stremio/stremio-features/issues/268]\n|\n|-\n| [https://github.com/spring-projects/sts4 sts4]\n| {{ic|~/.sts4}}\n| [https://github.com/spring-projects/sts4/issues/601]\n| Pass JVM arg {{ic|1=-Dlanguageserver.boot.symbolCacheDir=$XDG_CACHE_HOME/sts4/symbolCache}}\n|-\n| {{AUR|python-streamlit}}\n| {{ic|~/.streamlit}}\n| [https://github.com/streamlit/streamlit/issues/2068]\n| \n|-\n| {{Pkg|sweethome3d}}\n| {{ic|~/.eteks/sweethome3d}}\n| [https://sourceforge.net/p/sweethome3d/bugs/1256/]\n|\n|-\n| {{pkg|python-sympy}}\n| {{ic|~/.sympy-history}}\n| [https://github.com/sympy/sympy/issues/26363]\n| \n|-\n| [[TeamSpeak]]\n| {{ic|~/.ts3client}}\n|\n| {{ic|1=export TS3_CONFIG_DIR=\"$XDG_CONFIG_HOME/ts3client\"}}\n|-\n| {{Pkg|terraform}}\n| {{ic|~/.terraform.d/}}\n| [https://github.com/hashicorp/terraform/issues/15389]\n|\n|-\n| {{pkg|texinfo}}\n| {{ic|~/.infokey}}\n|\n| {{ic|info --init-file \"$XDG_CONFIG_HOME/infokey\"}}\n|-\n| [[Thunderbird]]\n| {{ic|~/.thunderbird/}}\n| [https://bugzil.la/735285]\n|\n|-\n| [[TigerVNC]]\n| {{ic|~/.vnc}}\n| [https://github.com/TigerVNC/tigervnc/issues/1195]\n|\n|-\n| [https://gitlab.archlinux.org/remy/texlive-localmanager tllocalmgr]\n| {{ic|~/.texlive}}\n|\n|\n|-\n| {{AUR|urlview}}\n| {{ic|~/.urlview}}\n|\n| Use fork {{AUR|urlview-xdg-git}} instead. The fork will use {{ic|XDG_CONFIG_HOME/urlview/config}}\n|-\n| {{AUR|vale}}\n| {{ic|~/.vale.ini}}\n| [https://github.com/errata-ai/vale/issues/152 won't fix]\n| {{ic|vale --config \"$XDG_CONFIG_HOME/vale/config.ini\"}}\n|-\n| {{AUR|viber}}\n| {{ic|~/.ViberPC}}\n|\n|\n|-\n| [http://www.vimperator.org/ vimperator]\n| {{ic|~/.vimperatorrc}}\n| [https://web.archive.org/web/20200514081339/http://www.mozdev.org/pipermail/vimperator/2009-October/004848.html]\n| {{ic|1=export VIMPERATOR_INIT=\":source $XDG_CONFIG_HOME/vimperator/vimperatorrc\"}}\n\n{{ic|1=export VIMPERATOR_RUNTIME=\"$XDG_CONFIG_HOME\"/vimperator}}\n|-\n| {{Pkg|visidata}}\n| {{ic|~/.visidata}}\n| [https://github.com/saulpw/visidata/issues/487]\n|\n|-\n| [https://w1.fi/ wpa_cli]\n| {{ic|~/.wpa_cli_history}}\n|\n|\n|-\n| {{AUR|wego}}\n| {{ic|~/.wegorc}}\n| [https://github.com/schachmat/wego/issues/116]\n|\n|-\n| {{AUR|x2goclient}}\n| {{ic|~/.x2goclient}}\n|\n| {{ic|1=alias x2goclient=\"x2goclient --home=$HOME/.config\"}}\n|-\n| {{Pkg|xpdf}}\n| {{ic|~/.xpdfrc}}\n|\n|\n|-\n| {{AUR|xrdp}}\n| {{ic|~/thinclient_drives}}\n|\n| For the directory {{ic|~/thinclient_drives}}, you may consider editing {{ic|/etc/xrdp/sesman.ini}} and modifying the section {{ic|[Chansrv]}} following the example config.\n|-\n| [https://github.com/XVimProject/XVim2 XVim2]\n| {{ic|~/.xvimrc}}\n| [https://github.com/XVimProject/XVim2/issues/389]\n|\n|-\n| [https://yardoc.org YARD]\n| {{ic|~/.yard}}\n| [https://github.com/lsegal/yard/issues/1230]\n| Would accept Pull Request if anyone want to implement it.\n|-\n| [https://nmap.org/zenmap/ zenmap] {{Pkg|nmap}}\n| {{ic|~/.zenmap}}\n| [https://seclists.org/nmap-dev/2012/q2/163] [https://github.com/nmap/nmap/issues/590]\n|\n|-\n| {{AUR|zoom}}\n| {{ic|~/.zoom}}\n|\n| Unrecommended: setting the following variable moves the contents of .zoom but the directory itself always gets created. Moreover, it breaks some functionalities eg. being able to start a meeting. {{ic|1=export SSB_HOME=\"$XDG_DATA_HOME\"/zoom}}\n|-\n| {{AUR|zotero-bin}}\n| {{ic|~/.zotero}} {{ic|~/Zotero}}\n| [https://github.com/zotero/zotero/issues/1203]\n|}\n\n== Tools ==\n\nThe tool {{aur|xdg-ninja}} detects unwanted files/directories in {{ic|$HOME}} which can be moved to XDG base directories. See [https://github.com/b3nj5m1n/xdg-ninja#xdg-ninja README] for examples.\n\n== Libraries ==\n\n; C\n: [https://github.com/Jorengarenar/libXDGdirs libXDGdirs]\n: [https://github.com/devnev/libxdg-basedir libxdg-basedir]\n: [https://github.com/Cloudef/chck/tree/master/chck/xdg C99: Cloudef's simple implementation].\n\n; C++\n: [https://github.com/azubieta/xdg-utils-cxx xdg-utils-cxx]\n: [https://sr.ht/~danyspin97/xdgpp xdgpp]\n\n; Go\n: [https://github.com/adrg/xdg adrg/xdg]\n: [https://github.com/ProtonMail/go-appdir go-appdir] (deprecated, archived)\n: [https://github.com/shibukawa/configdir configdir] (deprecated, abandoned)\n: [https://github.com/kyoh86/xdg kyoh86/xdg] (deprecated, archived)\n\n; Haskell\n: Officially in [https://hackage.haskell.org/package/directory directory] since 1.2.3.0 [https://github.com/haskell/directory/commit/ab9d0810ce ab9d0810ce].\n: [https://hackage.haskell.org/package/xdg-basedir xdg-basedir]\n\n; JVM: Java, Kotlin, Clojure, Scala, ...\n: [https://github.com/soc/directories-jvm directories-jvm]\n\n; Perl\n: [https://search.cpan.org/dist/File-BaseDir/lib/File/BaseDir.pm File-BaseDir]\n\n; Python\n: [https://freedesktop.org/wiki/Software/pyxdg/ pyxdg]\n: [https://github.com/ActiveState/appdirs appdirs] (abandoned)\n: [https://github.com/platformdirs/platformdirs platformdirs]\n\n; Ruby\n: [https://github.com/bkuhlmann/xdg bkuhlmann/xdg]\n: [https://github.com/rubyworks/xdg rubyworks/xdg] (deprecated, abandoned)\n\n; Rust\n: [https://github.com/soc/directories-rs directories-rs]\n: [https://github.com/whitequark/rust-xdg rust-xdg]\n\n; Swift\n: [https://github.com/Frizlab/swift-xdg swift-xdg]\n\n; Vala\n: Builtin support via [https://valadoc.org/#!api=glib-2.0/GLib.Environment GLib.Environment].\n: See {{ic|get_user_cache_dir}}, {{ic|get_user_data_dir}}, {{ic|get_user_config_dir}}, etc.\n\n== Tips and tricks ==\n\n=== Hiding unwanted directories ===\n\nFor directories which cannot be relocated, some desktop environments such as [[KDE]] allow you to hide them:\n\n $ echo ''path'' >> ~/.hidden\n\n''path'' is the path of the file/directory, relative to the parent directory of {{ic|.hidden}}.\n\n== See also ==\n\n* [https://wiki.gnome.org/Initiatives/GnomeGoals/XDGConfigFolders GNOME Goal: XDG Base Directory Specification Usage]\n* [https://web.archive.org/web/20180827160401/plus.google.com/+RobPikeTheHuman/posts/R58WgWwN9jp Rob Pike: \"Dotfiles\" being hidden is a UNIXv2 mistake].\n* {{man|1|systemd-path}}\n* {{man|7|file-hierarchy}}\n* [https://github.com/grawity/dotfiles/blob/master/.dotfiles.notes Grawity's notes on dotfiles].\n* [https://github.com/grawity/dotfiles/blob/master/.environ.notes Grawity's notes on environment variables].\n* [https://ploum.net/207-modify-your-application-to-use-xdg-folders/ ploum.net: Modify Your Application to use XDG Folders].\n* The [https://pcgamingwiki.com/wiki/Home PCGamingWiki] attempts to document whether or not Linux PC games follow the XDG Base Directory Specification."
                    }
                ]
            },
            "20574": {
                "pageid": 20574,
                "ns": 0,
                "title": "KeePass",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Password managers]]\n[[ja:KeePass]]\n[[pt:KeePass]]\n[[ru:KeePass]]\nKeePass is an encrypted password database format. It is an alternative to online password managers and is supported on all major platforms.\n\nThere are two versions of the format: ''KeePass 1.x (Classic)'' and ''KeePass 2.x''\n\n== Installation ==\n\nThere are three major implementations of KeePass available in the official repositories:\n\n* {{App|[[Wikipedia:KeePass|KeePass]]|A cross-platform password manager that has autotype and clipboard support when respectively {{Pkg|xdotool}} and {{Pkg|xsel}} are installed. It lets you import [https://keepass.info/help/base/importexport.html many formats] and has [https://keepass.info/plugins.html many plugins].|https://keepass.info|{{Pkg|keepass}}}}\n* {{App|[[Wikipedia:KeePassXC|KeePassXC]]|Fork of KeePassX that is actively maintained and has additional features like browser integration, support for SSH agent, secret service, Yubikey, finger-print reader, TOTP generator and KeeShare. Also provides a CLI.|https://keepassxc.org|{{Pkg|keepassxc}}}}\n* {{App|{{Pkg|secrets}}|A modern GNOME password manager built on top of of KeePass.|https://gitlab.gnome.org/World/secrets/|{{Pkg|secrets}}}}\n\nOther lesser-known alternatives can be found in the AUR:\n\n* {{App|keepassc|A curses-based password manager compatible to KeePass v.1.x and KeePassX. It uses {{ic|xsel}} for clipboard functions.|https://raymontag.github.io/keepassc/|{{AUR|keepassc}}}}\n* {{App|kpcli|A command line interface for KeePass database files {{ic|*.kdb}} or {{ic|*.kdbx}}.|https://sourceforge.net/projects/kpcli/|{{AUR|kpcli}}}}\n* {{App|keepmenu|Dmenu/Rofi frontend for Keepass database files.|https://github.com/firecat53/keepmenu|{{AUR|keepmenu}}}}\n* {{App|AuthPass|KeePass compatible password manager based on Flutter. Comes with default sync suport for Gdrive, Dropbox, and WebDav.|https://authpass.app|{{AUR|authpass-bin}}}}\n* {{App|keeweb|A web app (online / Electron) compatible with KeePass 2.x. KeeWeb comes with default Sync support for major cloud services, Gdrive, Onedrive, Dropbox etc. No active development since release of 1.18.7 on July 18th 2021.|https://keeweb.info|{{AUR|keeweb}} {{AUR|nextcloud-app-keeweb}} {{AUR|keeweb-desktop-bin}}}}\n* {{App|[[Wikipedia:KeePassX|KeePassX]]|Started as a Linux port of KeePass. {{AUR|keepassx2}} uses the KeePass 2.x format, but can import 1.x databases. It also lets you import PwManager and KWallet XML databases. It does not support plugins. [https://www.keepassx.org/faq] No active development since 2016. [https://dev.keepassx.org/projects/keepassx/repository/revisions] |https://www.keepassx.org/|{{AUR|keepassx}} {{AUR|keepassx2}}}}\n\n== Integration ==\n\nMany [https://keepass.info/plugins.html plugins and extensions] are available for integrating KeePass to other software. KeePassX and KeePassXC do not have a plugin interface, but KeePassXC has various integrations built-in.\n\n=== Plugin installation in KeePass ===\n\nKeePass is by default installed at {{ic|/usr/share/keepass/}}. Copy {{ic|plugin.plgx}} to a plugins sub-directory under the KeePass installation directory as demonstrated below:\n\n{{bc|\n# mkdir /usr/share/keepass/plugins\n# cp plugin.plgx /usr/share/keepass/plugins\n}}\n\n=== Browser integration ===\n\n==== keepassxc-browser for KeePassXC ====\n\n[https://github.com/keepassxreboot/keepassxc-browser keepassxc-browser] is the browser extension of KeePassXC\u2019s built-in browser integration using native-messaging and transport encryption using libsodium. It was developed to replace KeePassHTTP, as KeePassHTTP\u2019s protocol has fundamental security problems.\n\nThe developers provide the browser extension on\n\n* [https://addons.mozilla.org/firefox/addon/keepassxc-browser/ Firefox Add-ons] (for [[Firefox]] and [[Tor Browser]]) and\n* in the [https://chrome.google.com/webstore/detail/keepassxc-browser/oboonakemofpalcgghocfoadofidjkkk chrome web store] (for [[Chromium]], [[Google Chrome]], [[Vivaldi]] and [[List of applications/Internet#Privacy-focused chromium spin-offs|Brave]]).\n\nSupport for Firefox and Chromium forks is available. For {{AUR|librewolf}}, open KeePassXC, go to ''Tools'' > ''Settings'' > ''Browser Integration'' > ''Advanced'' > ''Config Location:'', and add {{ic|~/.librewolf/native-messaging-hosts}}.\n\nThe [https://github.com/keepassxreboot/keepassxc-browser source code and an explanation how it works] can be found on GitHub, the KeePassXC developers provide a [https://keepassxc.org/docs/KeePassXC_GettingStarted.html#_configure_keepassxc_browser configuration guide] on their website.\n\n==== keepassxc-browser for KeePass ====\n\n[https://github.com/keepassxreboot/keepassxc-browser keepassxc-browser] can also be used with KeePass through [https://github.com/smorks/keepassnatmsg Keepass-natmsg Plugin] from AUR ({{aur|keepass-natmsg}}) and is recommended as successor of KeePassHTTP.\n\n==== KeePassRPC and Kee ====\n\n[https://www.kee.pm/ Kee] ([https://github.com/kee-org/browser-addon GitHub repo]) is a browser extension for [[Firefox]] and [[Chromium]] which integrates KeePass through [https://github.com/kee-org/keepassrpc KeePassRPC], a KeePass plugin from the same developers.\n\nThe KeePass plugin is available from [https://github.com/kee-org/keepassrpc/releases GitHub] or from the AUR ({{aur|keepass-plugin-rpc}}).\n\nThe browser extension can be found on [https://github.com/kee-org/browser-addon/releases GitHub], [https://addons.mozilla.org/firefox/addon/keefox/ Firefox Add-ons] and the [https://chrome.google.com/webstore/detail/kee-password-manager/mmhlniccooihdimnnjhamobppdhaolme chrome web store].\n\n==== Via autotype feature ====\n\nAn alternative to having a direct channel between browser and KeePass(XC) is using the autotype feature.\n\nTo enable the autotype feature on Wayland, [[Textedit|edit]] {{ic|/usr/share/applications/org.keepassxc.KeePassXC.desktop}} and change the value of {{ic|Exec}} to {{ic|keepassxc -platform xcb}}. Alternatively, set the {{ic|1=QT_QPA_PLATFORM=xcb}} [[environment variable]] before launching KeePassXC. However, native Wayland applications will not work with autotype. For example, autotype works when running Firefox without Wayland, but not with.\n\nThere are browser extensions which support this way by putting the page URL into the window name:\n\n* [https://addons.mozilla.org/firefox/addon/keepass-helper-url-in-title/ KeePass Helper] or [https://addons.mozilla.org/firefox/addon/url-in-title/ TitleURL] for [[Firefox]]\n* [https://chrome.google.com/webstore/detail/url-in-title/ignpacbgnbnkaiooknalneoeladjnfgb URL in title] for [[Chromium]]\n\n=== Nextcloud ===\n\n* [https://github.com/jhass/nextcloud-keeweb Keeweb for Nextcloud] ({{aur|nextcloud-app-keeweb}})\n: Open Keepass stores inside Nextcloud\n\n=== Yubikey ===\n\n[[YubiKey]] can be integrated with KeePass thanks to contributors of KeePass plugins. KeepassXC provides built-in support for Yubikey Challenge-Response without plugins.\n\n==== Configuration with KeePass ====\n\n# StaticPassword\n#:Configure one of Yubikey slots to store static password. You can make the password as strong as 65 characters (64 characters with leading \"!\"). This password can then be used as master password for your KeePass database.\n# one-time passwords (OATH-HOTP)\n## Download plugin from KeePass website: https://keepass.info/plugins.html#otpkeyprov\n## Use {{AUR|yubikey-personalization-gui-git}} to setup OATH-HOTP\n## In advanced mode untick ''OATH Token Identifier''\n## In KeePass additional option will show up under ''Key file / provider'' called ''One-Time Passwords (OATH HOTP)''\n## Copy secret, key length (6 or 8), and counter (in Yubikey personalization GUI this parameter is called ''Moving Factor Seed'')\n## You may need to setup ''Look-ahead count'' option to something greater than 0, please see [https://forum.yubico.com/viewtopicf146.html?f=16&t=1120 this thread] for more information\n## See [https://vimeo.com/94352853 this video] for more help\n#Challenge-Response (HMAC-SHA1)\n## Get the plugin from AUR: {{AUR|keepass-plugin-keechallenge}}\n## In KeePass additional option will show up under ''Key file / provider'' called ''Yubikey challenge-response''\n## Plugin assumes slot 2 is used\n\n=== SSH agent ===\n\nKeePassXC offers SSH agent support, a similar feature is also available for KeePass using the [https://lechnology.com/software/keeagent/ KeeAgent] plugin.\n\nThe feature allows to store SSH keys in KeePass databases, KeePassXC/KeeAgent acts as OpenSSH Client and dynamically adds and removes the key to the Agent.\n\nThe feature in KeePassXC is documented in its [https://keepassxc.org/docs/#faq-ssh-agent-how FAQ]. First configure [[SSH agent]] to start on login and make sure the {{ic|SSH_AUTH_SOCK}} variable is set. Then logout and log back in. Now, in KeePassXC settings, enable SSH agent integration. The {{ic|SSH_AUTH_SOCK}} value exposed in the UI should correspond to what you configured earlier.\n\n{{Note|The [[GnuPG#SSH agent|SSH agent emulation of ''gpg-agent'']] does not support removing keys from the agent on demand using {{ic|ssh-add -d}} or {{ic|ssh-add -D}}, therefore KeePassXC/KeeAgent cannot remove them when locking the database. [https://github.com/keepassxreboot/keepassxc/issues/2029#issuecomment-395933402] [https://unix.stackexchange.com/questions/185393/gpg-agent-doesnt-remove-my-ssh-key-from-the-keyring]}}\n\n=== Secret Service ===\n\nKeePassXC contains a [https://specifications.freedesktop.org/secret-service/latest/ Freedesktop.org Secret Service] integration. It can be enabled by going into the settings (under the ''Tools'' menu), and selecting which group(s) you want to share ('''for each database''', open ''Database > Database Settings...'', then go to the ''Secret Service Integration'' tab).\n\nKeePassXC will refuse to enable its integration if it detects that another program (such as [[GNOME/Keyring]]) is already providing that service. You should first stop that program; for example, for {{Pkg|gnome-keyring}}, [[stop]]ping {{ic|gnome-keyring-daemon.service}} [[user unit]].\n\nNote that you will likely want to disable the program permanently, otherwise KeePassXC's integration will fail on the next reboot. Again, for {{Pkg|gnome-keyring}}, [[disabling]] the {{ic|gnome-keyring-daemon.socket}} (still for the [[systemd/User]]).\n\n==== Autostart ====\n\nKeePassXC will not be automatically started when an application requests secrets, which may cause them to break. [https://github.com/keepassxreboot/keepassxc/discussions/9009 A D-Bus auto-start file] can be [[create]]d:\n\n{{hc|${XDG_DATA_HOME:-$HOME/.local/share}/dbus-1/services/org.freedesktop.secrets.service|2=\n[D-BUS Service]\nName=org.freedesktop.secrets\nExec=/usr/bin/keepassxc\n}}\n\n{{Tip|The above will only apply to the user the commands are executed as. To apply the fix to ''all'' users, create the file as root in {{ic|/usr/local/share}}.}}\n\n{{Warning|Remember to delete this file if uninstalling {{Pkg|keepassxc}}. Otherwise, other applications may be unable to provide the Secret Service.}}\n\n== Tips and tricks ==\n\n=== Disable your clipboard manager ===\n\nIf you are an avid user of clipboard managers, you may need to disable your clipboard manager before you launch Keepass and then re-start your clipboard manager afterwards.\n\nKeePassXC implementations has the option to auto-clear the clipboard manager after an amount of time, enough to paste copied items.\n\n{{Tip|Some advanced clipboard managers like CopyQ have the option to ignore input from specified applications.}}\n\n=== Dark theme ===\n\nTo enable the dark theme for KeePass, install {{AUR|keepass-keetheme}}. After installation, the plugin will get compiled upon starting KeePass. It can then be activated via ''Tools > Dark Theme'', or by pressing {{ic|Ctrl+t}}.\n\n== Troubleshooting ==\n\n=== User interface scaling issues with KeePassXC 2.6 ===\n\nIf the user interface elements are not scaled properly, see [[HiDPI#Qt 5]] and [https://github.com/keepassxreboot/keepassxc/issues/5029 upstream bug report].\n\n=== Greyed-out options ===\n\nSome options like ''Start minimized and locked'' may appear greyed-out. According to a discussion on [https://sourceforge.net/p/keepass/discussion/329220/thread/5a14d949/ SourceForge], since version 2.31, KeePass has disabled two options because of their [https://sourceforge.net/p/keepass/bugs/1418/ broken behaviors] on Mono. \n\nTo force these features to be enabled, launch KeePass with the {{ic|-wa-disable:1418}} argument.\n\n=== Wrongly scaled tray icons ===\n\nIn some [[desktop environment]]s, the tray icon of KeePass may appear too big or too small due to Mono's bug, according to a bug report on [https://sourceforge.net/p/keepass/bugs/1733/#925e SourceForge].\n\n[https://github.com/dlech/Keebuntu/ Keebuntu] contains three plugins to provide desktop integration:\n\n* {{AUR|keepass2-plugin-tray-icon}}: For [[Cinnamon]] and [[MATE]];\n* {{AUR|keepass-plugin-statusnotifier-git}}: For [[Plasma]] and [[GNOME]] with {{Pkg|gnome-shell-extension-appindicator}};\n* [https://github.com/dlech/Keebuntu/#launcher-quicklist keepass2-plugin-launcher]: For the {{Pkg|plank}} dock.\n\nAfter installing one of these plugins, it is sometimes necessary to hide the original tray icon to prevent duplicate icons in the system tray.\n\n=== Secret Service Integration ===\n\nFirst, check that the group under which your passwords are stored is exposed; the ''Tools > Settings'' menu contains a list of groups enabled for each database. If a database isn't exposing the proper group, select its tab, open ''Database > Database Settings...'', then select the group in the ''Secret Service Integration'' tab).\n\nNote that [https://github.com/keepassxreboot/keepassxc/issues/9371 merging a database can cause it to stop exposing any groups].\n\n\n=== Graphical glitches with KeePassXC, Plasma6 and Wayland ===\n\nIf you are experiencing graphical glitches, install the {{Pkg|qt5-wayland}} package. KeePassXC (as of version v2.7.7) still uses Qt5.\n\n== See also ==\n\n* [[List of applications/Security#Password managers]]"
                    }
                ]
            },
            "21591": {
                "pageid": 21591,
                "ns": 0,
                "title": "Firejail",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Sandboxing]]\n[[ja:Firejail]]\n[[zh-hans:Firejail]]\n[[ru:Firejail]]\n{{Related articles start}}\n{{Related|Security}}\n{{Related|AppArmor}}\n{{Related|Bubblewrap}}\n{{Related articles end}}\n[https://firejail.wordpress.com/ Firejail] is an easy to use [[Setuid]] sandbox program that reduces the risk of security breaches by restricting the running environment of untrusted applications using Linux namespaces, seccomp-bpf and Linux capabilities.\n\n{{Warning|Running untrusted code is never safe, sandboxing cannot change this.}}\n\n== Installation ==\n\n[[Install]] either {{Pkg|firejail}}, or the {{aur|firejail-git}} package. A GUI application for use with Firejail is also available, {{Pkg|firetools}}.\n\n{{Note|For information about {{man|7|user_namespaces}} support in Arch Linux kernels, see [[Security#Sandboxing applications]]. [https://github.com/netblue30/firejail/issues/1842#issuecomment-376642039 Firejail can use it even if it is disabled].}}\n\n{{Warning|While upstream is gradually adopting whitelists (cf {{ic|/etc/firejail/firefox.profile}}), most of the supplied profiles still rely heavily on blacklists. This means that anything not explicitly forbidden by the profile will be accessible to the application. For example, if you have btrfs snapshots available in {{ic|/mnt/btrfs}}, a jailed program may be forbidden from accessing {{ic|$HOME/.ssh}}, but would still be able to access {{ic|/mnt/btrfs/@some-snapshot/$HOME/.ssh}}. Make sure to audit your profiles; see [[#Testing profiles]].}}\n\n== Configuration ==\n\nMost users will not require any custom configuration and can proceed to [[#Usage]].\n\nFirejail uses profiles to set the security protections for each of the applications executed inside of it - you can find the default profiles in {{ic|/etc/firejail/''application''.profile}}. Should you require custom profiles for applications not included, or wish to modify the defaults, you may place new rules or copies of the defaults in the {{ic|~/.config/firejail}} directory. You may have multiple custom profile files for a single application, and you may share the same profile file among several applications.\n\nIf firejail does not have a profile for a particular application, it uses its restrictive system-wide default profile. This can result in the application not functioning as desired, without first creating a custom and less restrictive profile.\n\nRefer to {{man|5|firejail-profile}}.\n\n== Usage ==\n\nTo execute an application using firejail's default protections for that application (the default profile), execute the following:\n\n $ firejail ''program_name''\n\nOne-time additions to the default profile can be added as command line options (see {{man|1|firejail}}). For example, to execute ''okular'' with seccomp protection, execute the following:\n\n $ firejail --seccomp okular\n\nYou may define multiple non-default profiles for a single program. Once you create your profile file, you can use it by executing:\n\n $ firejail --profile=''/absolute/path/to/profile program_name''\n\n=== Using Firejail by default ===\n\nTo use Firejail by default for all applications for which it has profiles, [https://github.com/netblue30/firejail/wiki/Frequently-Asked-Questions#a-program-isnt-firejailed run the firecfg tool with sudo]:\n\n $ sudo firecfg\n\nThis creates symbolic links in {{ic|/usr/local/bin/}} pointing to {{ic|/usr/bin/firejail}} for  programs for which Firejail has default or self-created profiles. Note that {{man|1|firecfg}} only symlinks the programs listed in {{ic|/etc/firejail/firecfg.config}}. Certain CLI programs are absent, such as: ''tar'', ''curl'', and ''git''. These need to be symlinked manually. See [https://github.com/netblue30/firejail/issues/2507 Profiles not in firecfg #2507] for why they are not included. ''firecfg'' additionally adds the current user to Firejail user access database and checks the {{ic|/usr/share/applications/*.desktop}} files if they contain the full path to the respective executable, removes the full path and copies them to {{ic|~/.local/share/applications/}}. This ensures that the symlinks in {{ic|/usr/local/bin/}} will be used, which prevents Firejail getting bypassed. If [[sudo]] is not installed on your system, you should execute:\n\n # firecfg\n\nas root and \n\n $ firecfg --fix\n\nas user in order to fix the ''.desktop'' files.\n\nThere may be cases for which you need to manually modify the {{ic|1=Exec=}} line of the ''.desktop'' file in {{ic|~/.local/share/applications/}} to explicitly call Firejail.\n\n{{Tip|A [[pacman hook]] can be used to automatically run ''firecfg'' on [[pacman]] operations:\n\n{{hc|/etc/pacman.d/hooks/firejail.hook|2=\n[Trigger]\nType = Path\nOperation = Install\nOperation = Upgrade\nOperation = Remove\nTarget = usr/bin/*\nTarget = usr/share/applications/*.desktop\n\n[Action]\nDescription = Configure symlinks in /usr/local/bin based on firecfg.config...\nWhen = PostTransaction\nDepends = firejail\nExec = /bin/sh -c 'firecfg >/dev/null 2>&1'\n}}\n\n}}\n\nTo manually map individual applications, execute:\n\n # ln -s /usr/bin/firejail /usr/local/bin/''application''\n\n{{Note|1=<nowiki/>\n* {{ic|/usr/local/bin}} must be set before {{ic|/usr/bin}} in the {{ic|PATH}} [[environment variable]]. The default Arch Linux {{ic|/etc/profile}} script satisfies this precondition [https://gitlab.archlinux.org/archlinux/packaging/packages/filesystem/-/blob/main/profile?ref_type=heads#L14-17].\n* To run a symbolic program with custom Firejail setting, simple prefix ''firejail'' as seen in [[#Usage]].\n* For a daemon, you will need to overwrite the systemd unit file for that daemon to call firejail, see [[systemd#Editing provided units]].\n* Symbolic links to ''gzip'' and ''xz'' interfere with ''makepkg''<nowiki/>'s ability to preload {{ic|libfakeroot.so}}. See [https://bbs.archlinux.org/viewtopic.php?id=230913 BBS#230913].\n}}\n\n=== Use with hardened_malloc ===\n\n{{Note|Some programs will not work using {{ic|libhardened_malloc.so}}, such as PyCharm, Firefox.}}\n\n{{AUR|hardened_malloc}} is a hardened implementation of glibc's {{ic|malloc()}} allocator, originally written for Android but extended for use on the desktop. While not integrated into glibc yet, it can be used selectively with {{ic|LD_PRELOAD}}. The proper way to launch an application within firejail using hardened_malloc is demonstrated below. To make it permanent, you would need to create your own entry in {{ic|/usr/local/bin/}} for the desired application.\n\n $ firejail --env=LD_PRELOAD='/usr/lib/libhardened_malloc.so' /usr/bin/firefox\n\nAlternatively, add the following to a custom profile:\n\n env LD_PRELOAD=/usr/lib/libhardened_malloc.so\n\nProfiles that have private-lib will need the following in custom profiles:\n\n private-lib /lib/libhardened_malloc.so\n\nThe various environment variables and settings that can be used to tune hardened_malloc can be found on its [https://github.com/GrapheneOS/hardened_malloc github page].\n\n=== Enable AppArmor support ===\n\nSince 0.9.60-1, Firejail has supported more direct integration with AppArmor through a generic AppArmor profile. During installation, the profile, {{ic|firejail-default}}, is placed in {{ic|/etc/apparmor.d}} directory, and needs to be loaded into the kernel by running the following command as root:\n\n # apparmor_parser -r /etc/apparmor.d/firejail-default\n\nSee {{man|1|firejail|APPARMOR}}.\n\nLocal customizations of the apparmor profile are supported by editing the file {{ic|/etc/apparmor.d/local/firejail-local}}\n\nAppArmor is already enabled for a [https://github.com/netblue30/firejail#profile-statistics large number] of Firejail profiles. There are several ways to enable [[AppArmor]] confinement on top of a Firejail security profile:\n\n* Pass the {{ic|--apparmor}} flag to Firejail in the command line, e.g. {{ic|$ firejail --apparmor firefox}}\n* Use a custom profile and add the {{ic|apparmor}} command.\n* Enable Apparmor globally in {{ic|/etc/firejail/globals.local}} and disable as needed through the use of {{ic|ignore apparmor}} in {{ic|/etc/firejail/''ProgramName''.local}}.\n\nNote that enabling AppArmor by above methods '''always''' means that {{ic|/etc/apparmor.d/firejail-default}} is used. If you rather want to use a ''specific'' AppArmor profile for an application, you have to use the above mentioned {{ic|ignore apparmor}} command. However, that is [https://github.com/netblue30/firejail/wiki/Frequently-Asked-Questions#how-does-it-compare-with-apparmor not recommended], as using both Firejail and AppArmor for the same applications often creates problems.\n\n=== Verifying Firejail is being used ===\n\n $ firejail --list\n\nA more comprehensive output is produced by\n\n $ firejail --tree\n\n== Creating custom profiles ==\n\n=== Whitelists and blacklists ===\n\n'''Blacklists''' are heavily used in various {{ic|/etc/firejail/*.inc}} files which are included in most profiles. Blacklists are permissive:\n\n* Deny access to a directory or file and permit everything else: {{ic|blacklist <directory/file>}}\n* Disable/undo/ignore blacklisting a directory or file already blacklisted, e.g., in an ''*.inc'' file: {{ic|noblacklist <directory/file>}}   \n\nThe order in which they appear in a profile is important: ''noblacklist'' directives must be added '''above''' ''blacklist'' directives.\n\n'''Whitelists''' block everything what is not ''explicitly'' whitelisted. They should not be used in profiles for applications that need access to random locations (e.g., text editors, image viewers/editors).  \n\n* Allow access to a directory or file and forbid everything else: {{ic|whitelist <directory/file>}}\n* Disable/undo/ignore whitelisting a directory or file already whitelisted, e.g., in an ''*.inc'' file: {{ic|nowhitelist <directory/file>}}\n\nThe order in which they appear in a profile is important: ''nowhitelist'' directives must be added '''above''' ''whitelist'' directives.\n\nWhitelisting is always done before blacklisting. As mentioned, a ''whitelist'' directive blacklists everything else. A ''blacklist'' directive is therefore a fallback if there are no ''whitelist'' directives or if a ''whitelist'' directive is too permissive.\n\n''(no)blacklist'' and ''(no)whitelist'' directives are often used in combination. Example: {{ic|/etc/firejail/disable-programs.inc}} (which is included in all profiles) contains the directive:\n\n blacklist ${HOME}/.mozilla\n\nin order to block access to that directory for all applications sandboxed by Firejail. {{ic|/etc/firejail/firefox.profile}} must disable this directive '''and''' must add a ''whitelist'' directive to allow access to that directory (as the Firefox profile is a whitelisted profile):\n\n{{bc|\nnoblacklist ${HOME}/.mozilla\nwhitelist ${HOME}/.mozilla\n}}\n\n=== Profile writing ===\n\nThe basic process is:\n\n# Copy {{ic|/usr/share/doc/firejail/profile.template}} to {{ic|/etc/firejail/}} or {{ic|~/.config/firejail/}} and rename it to {{ic|''ProfileName''.profile}} where ''ProfileName'' should match the name of the executable to be sandboxed\n# Change the line {{ic|include PROFILE.local}} to {{ic|include ProfileName.local}}\n# Gradually comment/uncomment the various options while checking at each stage that the application runs inside the new sandbox. Do not change the order of the sections in that template.\n# Detailed explanations of the possible options for a Firejail profile can be found in the {{man|5|firejail-profile}} man page\n# Test the profile for security holes, see [[#Testing profiles]]\n\nIf you want to create a whitelisted profile (i.e. a profile which contains ''whitelist'' directives), you can [https://firejail.wordpress.com/documentation-2/building-custom-profiles/#whitelisted build a whitelist] of permitted locations by executing\n\n $ firejail --build ''application''\n\nKeep in mind that a whitelisted profile is problematic for applications that need to access random locations (like text editors or file managers). \n\n{{Note|<nowiki></nowiki>\n* The idea is to be as restrictive as possible, while still maintaining usability. This may involve sacrificing potentially dangerous functionality and a change in cavalier work habits.\n* By default, seccomp filters work on a blacklist (which can be found in {{ic|/usr/share/doc/firejail/syscalls.txt}}). It is possible to use {{ic|seccomp.keep}} to build a custom whitelist of filters for an application. [https://firejail.wordpress.com/documentation-2/seccomp-guide/]. A convenient way to automate these steps is to execute {{ic|/usr/lib/firejail/syscalls.sh}}. If the application is still broken because of missing syscalls, you should follow the instructions at the bottom of {{ic|/usr/share/doc/firejail/syscalls.txt}}.\n}}\n\n==== Persistent local customisation ====\n\nThe standard profile layout includes the capability to make persistent local customisations through the inclusion of {{ic|.local}} files[https://github.com/netblue30/firejail/wiki/Creating-overrides]. Basically, each officially supported profile contains the lines {{ic|include ProgramName.local}} and {{ic|include globals.local}}. These ''*.local'' files might be located in {{ic|/etc/firejail/}} or in {{ic|~/.config/firejail/}}. Since the order of precedence is determined by which is read first, this makes for a very powerful way of making local customisations.\nFor example, with reference [https://github.com/netblue30/firejail/issues/1510#issuecomment-326443650 this firejail question], to globally enable Apparmor and disable Internet connectivity, one could simply create/edit {{ic|/etc/firejail/globals.local}} to include the lines\n\n # enable Apparmor and disable Internet globally\n net none\n apparmor\n\nThen, to allow, for example, \"curl\" to connect to the internet, yet still maintain its apparmor confinement, one would create/edit {{ic|/etc/firejail/curl.local}} to include the lines.\n\n # enable internet for curl\n ignore net\n\nSince {{ic|curl.local}} is read before {{ic|globals.local}}, {{ic|ignore net}} overrides {{ic|net none}}, and, as a bonus, the above changes would be persistent across future updates.\n\n=== Testing profiles ===\n\nIn order to test and audit a Firejail profile, you may find the following to be useful:\n\n# {{ic|firejail --debug $Program > $PathToOutputFile}} Gives a detailed breakdown of the sandbox\n# {{ic|firejail --debug-blacklists $Program}} and {{ic|firejail --debug-whitelists $Program}} show the blacklisted and whitelisted directories and files for the current profile.\n# {{ic|firejail --debug-caps}} gives a list of caps supported by the current Firejail software build. This is useful when building a [https://l3net.wordpress.com/2015/03/16/firejail-linux-capabilities-guide/ caps whitelist].\n# {{ic|firejail --help}} for a full list of {{ic|--debug}} options\n# {{ic|firemon PID}} monitors the running process. See {{ic|firemon --help}} for details\n# Executing {{ic|sudo jailcheck}} tests running sandboxes. See the {{man|1|jailcheck}} man page for details.\n# {{Pkg|checksec}} may also be useful in testing which standard security features are being used\n\n== Firejail with Xorg ==\n\n{{Accuracy|Why does sandboxing X11 require DNS?}} \n\nOn [[Xorg]] any program can listen to all keyboard input and record all screens. The purpose of sandboxing X11 is to restrict this behavior, which is especially problematic for complex programs working with potentially malicious input like browsers.\n\n[[Xephyr]] and [[Xpra]] allow you to sandbox Xorg. Although Xpra provides full clipboard support, it is recommended to use Xephyr due to the very notable and permanent lag with nested X11 sessions.\n\nFor a complete setup with (not ideal) clipboard support (clipboard is still always shared), see [[Gentoo:User:Sakaki/Sakaki's EFI Install Guide/Sandboxing the Firefox Browser with Firejail#Graphical Isolation via Xephyr|Sakaki's Gentoo guide]], especially the [[Gentoo:User:Sakaki/Sakaki's EFI Install Guide/Sandboxing the Firefox Browser with Firejail#Setting Up Clipboard Sharing and Display Rescaling for Xephyr|section about the clipboard and automatic rescaling]].\n\nAlternatively, if clipboard support is not needed but windows need to be managed, install a standalone [[window manager]] such as [[Openbox]].\n\n{{ic|xephyr-screen ''Width''x''Height''}} can be set in {{ic|/etc/firejail/firejail.config}} where {{ic|''Width''}} and {{ic|''Height''}} are in pixels and based on your screen resolution.\n\nTo open the sandbox:\n\n $ firejail --x11=xephyr --net=''device'' openbox\n\n{{ic|''device''}} is your active [[network interface]], which is needed to ensure that DNS works. Then right click and select your applications to run.\n\n{{Note|If you use [[Unbound]], [[dnsmasq]], [[Pdnsd]] or any other local resolver on 127.0.0.1, you would leave {{ic|1=--net=''device''}} out of the command as DNS should work automatically.}}\n\nSee the [https://firejail.wordpress.com/documentation-2/x11-guide/#configurexephyr Firejail Wordpress site] for a simpler guide.\n\nAccording to the guide:\n\n:The sandbox replaces the regular X11 server with Xpra or Xephyr server. This prevents X11 keyboard loggers and screenshot utilities from accessing the main X11 server.\n\nNote that the statement:\n\n:The only way to disable the abstract socket {{ic|@/tmp/.X11-unix/X0}} is by using a network namespace. If for any reasons you cannot use a network namespace, the abstract socket will still be visible inside the sandbox. Hackers can attach keylogger and screenshot programs to this socket.\n\nis incorrect, [[Xinit#xserverrc|xserverrc]] can be edited to {{ic|-nolisten local}}, which disables the abstract sockets of X11 and helps isolate it.\n\n=== Sandboxing a browser ===\n\n[[Openbox]] can be configured to start a certain browser at startup. {{ic|''program''.profile}} is the respective profile contained in {{ic|/etc/firejail}}, and {{ic|--startup \"''command''\"}} is the command line used to start the program. For example, to start Chromium in the sandbox:\n\n $ firejail --x11=xephyr --profile=/etc/firejail/chromium.profile openbox --startup \"chromium\"\n\nYou can control the size of the screen with the parameter:\n\n --xephyr-screen=400x250\n\n== Tips and tricks ==\n\n=== Hardening Firejail ===\n\nThe security risk of Firejail being a SUID executable can be mitigated by adding the line\n\n force-nonewprivs yes\n\nto {{ic|/etc/firejail/firejail.config}}. However, this can break specific applications. On Arch Linux, VirtualBox doesn't start anymore. With the {{Pkg|linux-hardened}} kernel Wireshark and Chromium-based browsers are also affected.\n\nFurther hardening measures include creating a special firejail group with adding the user to that group and changing the file mode for the firejail executable. For details see [https://firejail.wordpress.com/documentation-2/basic-usage/#suid here].\n\n{{Tip|you can add a pacman hook to automatically change firejail owner and mode:\n\n{{hc|/etc/pacman.d/hooks/firejail-permissions.hook|2=\n[Trigger]\nOperation = Install\nOperation = Upgrade\nType = Package\nTarget = firejail\n[Action]\nDepends = coreutils\nDepends = bash\nWhen = PostTransaction\nExec = /usr/bin/sh -c \"chown root:firejail /usr/bin/firejail && chmod 4750 /usr/bin/firejail\"\nDescription = Setting /usr/bin/firejail owner to \"root:firejail\" and mode \"4750\"\n}}\n\nMake sure to create the {{ic|firejail}} group and add your user to it.\n\n}}\n\n=== Paths containing spaces ===\n\nIf you need to reference, whitelist, or blacklist a directory within a custom profile, such as with {{aur|palemoon}}, you must do so using the absolute path, without encapsulation or escapes:\n /home/user/.moonchild productions\n\n=== Private mode ===\n\nFirejail also includes a one time private mode, in which no mounts are made in the chroots to your home directory. In doing this, you can execute applications without performing any changes to disk. For example, to execute okular in private mode, do the following:\n\n $ firejail --seccomp --private okular\n\n=== Experimental improved tools ===\n\nSome of the Firejail developers recognized issues with the tools it ships with and made their own, improved versions of them.\n\n{{Warning|As stated in some of the projects descriptions, these tools might be experimental.}}\n\n* [https://github.com/rusty-snake/firecfg.py firecfg.py], an improved version of {{ic|firecfg}}.\n* [https://github.com/rusty-snake/fjp fjp], a tool to interact with Firejail profiles.\n* [https://github.com/rusty-snake/fireurl fireurl], Fixing the firejail URL open issue.\n* [https://github.com/glitsj16/firejail-handler-http firejail-handler-http], which helps with opening HTTP(S) links properly when sandboxing applications.\n* [https://github.com/glitsj16/firejail-handler-extra firejail-handler-extra], like above but handles other protocols.\n\n== Troubleshooting ==\n\nFirejail can be hard to debug. The symptoms of a misconfigured or otherwise unfitting setup range from random segmentation faults and hangs in the applications to simple error messages.\n\nSome applications are harder to sandbox than others. For example [[web browsers]] and [[Electron]] applications tend to need more troubleshooting than others since there is much that can go wrong. It is crucial to check the [https://github.com/netblue30/firejail/wiki/Frequently-Asked-Questions FAQ] and [https://github.com/netblue30/firejail/issues open issues] first, since debugging can take quite some time.\n\n{{Tip|Also see the [https://github.com/netblue30/firejail/wiki upstream wiki], [https://debugging.works/blog/debugging-firejail/ this blog post] and especially its page on [https://github.com/netblue30/firejail/wiki/Debugging-Firejail debugging Firejail].}}\n\n=== Remove Firejail symbolic links ===\n\nTo remove Firejail created symbolic links (e.g. reset to default):\n\n # firecfg --clean\n\nIf you do not want to use Firejail for a specific application (e.g., because you prefer to rather confine it with AppArmor), you have to manually remove the related symbolic link:\n\n # rm /usr/local/bin/''application''\n\nAs a subsequent execution of ''firecfg'' would re-add the removed symlinks, the respective applications should be commented in {{ic|/etc/firejail/firecfg.config}}.\n\nVerify if any leftovers of [[Desktop entries]] are still overruled by Firejail.\n\n=== PulseAudio ===\n\n{{Note|Using PulseAudio version 9.0 or later should fix this issue.}}\n\nIf Firejail causes [[PulseAudio]] issues with sandboxed applications [https://github.com/netblue30/firejail/wiki/Frequently-Asked-Questions#pulseaudio-7080-issue], the following command may be used:\n\n $ firecfg --fix-sound\n\nThis commands creates a custom {{ic|~/.config/pulse/client.conf}} file for the ''current'' user with {{ic|1=enable-shm = no}} and possible other workarounds.\n\n=== hidepid ===\n\nIf the system uses the [[hidepid]] [[kernel parameter]], Firemon can only be run as root. This, among other things, will cause problems with the Firetools GUI incorrectly reporting \"Capabilities\", \"Protocols\" and the status of \"Seccomp\"[https://github.com/netblue30/firejail/issues/1564].\n\n=== Proprietary Nvidia drivers ===\n\nSome users report problems when using Firejail and proprietary graphic drivers from [[NVIDIA]] (e.g. [https://github.com/netblue30/firejail/issues/1753], [https://github.com/netblue30/firejail/issues/879] or [https://github.com/netblue30/firejail/issues/841]). This can often be solved by disabling the {{ic|noroot}} Firejail option in the application's profile file.\n\n=== --net options and Linux kernel >=4.20.0 ===\n\nThere is a bug on firejail 0.5.96 with linux >= 4.20.0, see [https://github.com/netblue30/firejail/issues/2314] and [https://github.com/netblue30/firejail/pull/2327]\n\nExample error message:\n\n $ firejail --noprofile --net=eth0 ls\n Parent pid 8521, child pid 8522\n Error send: arp.c:182 arp_check: Invalid argument\n Error: proc 8521 cannot sync with peer: unexpected EOF\n Peer 8522 unexpectedly exited with status 1\n\n=== Warning: Cannot confine the application using AppArmor ===\n\n{{Merge|#Enable AppArmor support|The requirement to enable AppArmor should be made explicit in the previous text.}}\n\nFor some applications (e.g. [[Firefox]]) starting with Firejail may result in warnings like:\n\n Warning: Cannot confine the application using AppArmor.\n Maybe firejail-default AppArmor profile is not loaded into the kernel.\n As root, run \"aa-enforce firejail-default\" to load it.\n\nWhen running the suggested command you might see:\n\n ERROR: Cache read/write disabled: interface file missing. (Kernel needs AppArmor 2.4 compatibility patch.)\n\nThis means that [[AppArmor]] is not enabled as a kernel parameter, so you have to set it according to [[AppArmor#Installation]].\n\n=== /usr/bin/patch: **** Can't open patch file ===\n\nThis means the {{ic|PKGBUILD}} uses {{ic|patch}} with the {{ic|-i}} argument so a whitelist for {{ic|$SRCDEST}} in {{ic|/etc/makepkg.conf}} is needed.\n\nCreate [[#Persistent local customisation|the override]] {{ic|patch.local}} with the value of your {{ic|$SRCDEST}}:\n\n whitelist ''/path/to/makepkg/sources''\n\nChanging the {{ic|PKGBUILD}} to use {{ic|stdin}} also works:\n\n patch -p1 < ../''file.patch''\n\n=== Daemonizing/backgrounded processes hang ===\n\nThere is a [https://github.com/netblue30/firejail/issues/3491 known issue] that prevents processes from daemonizing. There is currently no solution to this except not using Firejail to sandbox the affected application. Because it is a bug within Firejail, no configuration can solve this issue. Fortunately the applications mentioned in the issue usually do not have a large attack surface, so the risks of running them without a sandbox are comparatively low.\n\n== See also ==\n\n* [https://github.com/netblue30/firejail Firejail GitHub project page]\n* [https://wiki.gentoo.org/wiki/User:Sakaki/Sakaki%27s_EFI_Install_Guide/Sandboxing_the_Firefox_Browser_with_Firejail  Sakaki's EFI Install Guide/Sandboxing the Firefox Browser with Firejail] An step by step guide to isolate firefox"
                    }
                ]
            },
            "21657": {
                "pageid": 21657,
                "ns": 0,
                "title": "Localization/Indic",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:Localization]]\n{{Related articles start}}\n{{Related|Internationalization}}\n{{Related articles end}}\n\nThis page explains how setup your Arch installation in order to input [[Wikipedia:Indo-Aryan languages|Indic languages]].\n\n== All Indic ==\n\n=== Fonts ===\n\nThe following packages provide fonts for a variety of Indic scripts:\n\n* {{AUR|ttf-freebanglafont}} - Font for Bangla\n* {{Pkg|ttf-indic-otf}} - Indic OpenType Fonts collection (containing ttf-freebanglafont), provides the character [https://www.fileformat.info/info/unicode/char/ca0/index.htm U+0CA0] \"\u0ca0\"\n* {{AUR|lohit-fonts}} - Indic TrueType fonts from Fedora Project (containing Oriya Fonts and more)\n* {{AUR|ttf-devanagarifonts}} - Devanagari TrueType fonts (contains 283 fonts)\n* {{AUR|ttf-gurmukhi-fonts_sikhnet}} - TrueType Gurmukhi fonts (gurbaniwebthick,prabhki)\n* {{AUR|ttf-gurmukhi_punjabi}} - TTF Gurmukhi / Punjabi (contains 252 fonts)\n* {{AUR|ttf-gujrati-fonts}} - TTF Gujarati fonts (Avantika,Gopika,Shree768)\n* {{AUR|ttf-kannada-font}} - Kannada, the language of Karnataka state in India\n* {{AUR|ttf-lklug}} - Sinhala Unicode font\n* {{AUR|ttf-tamil}} - Tamil Unicode fonts\n* {{AUR|ttf-urdufonts}} - Urdu fonts (Jameel Noori Nastaleeq (+kasheeda), Nafees Web Naskh, PDMS Saleem Quran Font) and font configuration to set Jameel Noori Nastaleeq as default font for Urdu\n* {{AUR|ttf-malayalam-fonts-meta}} - Meta package providing all Malayalam Unicode Fonts released by [https://smc.org.in Swathanthra Malayalam Computing] packaged from upstream releases.\n\n{{Note|Some applications like [[Firefox]] and [[desktop environment]]s will use ''ttf-font'' ({{Pkg|ttf-dejavu}}, {{Pkg|ttf-liberation}}, {{Pkg|ttf-bitstream-vera}}, {{Pkg|ttf-droid}}, {{Pkg|gnu-free-fonts}}, {{Pkg|noto-fonts}}, {{Pkg|ttf-croscore}}, {{Pkg|ttf-ibm-plex}}, etc.) by default. The ''gnu-free-font'' package does not have full support for Indic characters alignment. Thus, consider using '''noto-fonts''' over ''ttf-dejavu'' or ''gnu-free-fonts'' as a ''ttf-font'' source.}}\n\n=== Locale ===\n\nSetting up the [[locale]] with the instructions from the dedicated page will ensure that applications use appropriate localization when available.\n\n=== Input methods ===\n\nSee [[Input method#List of available input method editors]].\n\n== Sinhalese ==\n\nThis section describes how to get [[Wikipedia:Sinhalese language|Sinhalese]] Unicode support and Sinhalese Unicode input to work using [[IBus]] (sayura-ibus) or [[scim]] (sayura-scim).\n\n=== Fonts ===\n\nFor Sinhala support, you can install any of these [[fonts]]:\n\n* {{Pkg|noto-fonts}} - Noto Sans Sinhala, a sans serif font.\n* {{Pkg|gnu-free-fonts}} - FreeSerif, a serif font.\n* {{AUR|ttf-lklug}} - LKLUG, a serif font.\n\n==== Guide to install Sinhala Unicode Font ====\n\nDownload http://sinhala.sourceforge.net/files/lklug.ttf and place it in {{ic|/usr/share/fonts}}.\n\nThen Run the following command\n fc-cache -fv\n\nAnd proceed to the below steps..\n\n=== Locale ===\n\nEdit /etc/locale.gen. Uncomment following line\n si_LK UTF-8\nRun following program\n locale-gen\n\nImmediately you will be able to read Sinhala Unicode in your programs (If not You may need to restart the relavent programs. eg: Firefox)\n\n=== Input methods ===\n\nSee [[Input method#List of available input method editors]].\n\n== See also ==\n\n* [http://sinhala.sourceforge.net/ sinhala linux] - sinhala linux's Official Homepage\n* [https://www.sayura.net/im/ sayura-scim] - sayura-scim's Official Homepage\n* [https://web.archive.org/web/20121109082936/http://www.lug.lk/ LKLUG] - Lanka Linux User Group (Sinhala Linux Mailing List)\n* [https://groups.google.com/group/Sinhala-Unicode Sinhala Unicode Group (\u0dc3\u0dd2\u0d82\u0dc4\u0dbd \u0dba\u0dd4\u0db1\u0dd2\u0d9a\u0ddd\u0da9\u0dca \u0dc3\u0db8\u0dd6\u0dc4\u0dba)]\n* [https://www.nongnu.org/sinhala/doc/howto/sinhala-howto.html Enabling Unicode Sinhala in GNU/Linux HOWTO]"
                    }
                ]
            },
            "23077": {
                "pageid": 23077,
                "ns": 0,
                "title": "Extended attributes",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:File systems]]\n[[ja:\u62e1\u5f35\u5c5e\u6027]]\n[[ru:Extended attributes]]\n{{Related articles start}}\n{{Related|File permissions and attributes}}\n{{Related|Capabilities}}\n{{Related articles end}}\n\nFrom {{man|7|xattr}}: \"Extended attributes are name:value pairs associated permanently with files and directories\". There are four extended attribute classes: security, system, trusted and user.\n\n{{Warning|By default, extended attributes are not preserved by [[cp]], [[rsync]], and other similar programs, see [[#Preserving extended attributes]].}}\n\nExtended attributes are also used to set [[Capabilities]].\n\n== User extended attributes ==\n\nUser extended attributes can be used to store arbitrary information about a file. To create one:\n\n $ setfattr --name=user.checksum --value=\"3baf9ebce4c664ca8d9e5f6314fb47fb\" file.txt\n\nUse getfattr to display extended attributes:\n\n{{hc|1= $ getfattr --encoding=text --dump file.txt|2=\n# file: file.txt\nuser.checksum=\"3baf9ebce4c664ca8d9e5f6314fb47fb\"\n}}\n\nTo remove an extended attribute:\n\n $ setfattr --remove=user.checksum file.txt\n\nTo find files with certain extended attributes use {{AUR|rawhide}}:\n\n $ rh ''/path/to/dir'' '\"''XATTR_REGEX''\".reea'\n\nSome other user extended attributes include:\n\n* {{ic|user.mime_type}}: helps programs know mimetype and set it with less guesswork.\n* {{ic|user.charset}}: used by the Apache httpd module [http://0pointer.de/lennart/projects/mod_mime_xattr mod_mime_xattr].\n* {{ic|user.creator}}: The name of the application that created the file.\n\nXDG also proposes a set of standardized extended attributes to be used by programs:\n\n* {{ic|user.xdg.comment}}: supported by Dolphin and other file managers.\n* {{ic|user.xdg.origin.url}}: for files downloaded from a url.\n* {{ic|user.xdg.robots.index}}: \"true\" if a file is included in indexing, \"false\" otherwise\n* {{ic|user.xdg.robots.backup}}: \"true\" if a file is included in backup, \"false\" otherwise\n* {{ic|user.xdg.language}}\n* {{ic|user.xdg.creator}}\n* {{ic|user.xdg.publisher}}\n* {{ic|user.xdg.origin.email.subject}}\n* {{ic|user.xdg.origin.email.from}}\n* {{ic|user.xdg.origin.email.message-id}}\n\n{{ic|user.xdg.tags}} is not part of the official standard, but it has become a \"de facto\" standard as several popular programs have implemented support for it (see [[#Software]]). It is implemented as a [[w:Comma-separated values|CSV]] list of user-specified tags for each file.\n\n== Preserving extended attributes ==\n\n{| class=wikitable\n! Command || Preserves by default?/Required flag\n|-\n| {{ic|cp}} || {{ic|--archive}}/{{ic|1=--preserve=all}}/{{ic|1=--preserve=xattr}}\n|-\n| {{ic|mv}} || {{Yes}}<sup>1</sup>\n|-\n| {{ic|tar}} || {{ic|--xattrs}} for creation and {{ic|1=--xattrs-include='*'}} for extraction\n|-\n| {{ic|bsdtar}} || {{ic|-p}} for extraction\n|-\n| [[rsync]] || {{ic|-X, --xattrs}}\n|-\n| {{pkg|cpio}} || {{No}}\n|-\n| {{pkg|gzip}} || {{No}}\n|-\n| {{pkg|pax}} || {{No}}\n|-\n| [[syncthing]] || by enabling [https://docs.syncthing.net/advanced/folder-sync-xattrs syncXattrs]\n|}\n\n# mv silently discards extended attributes when the target file system does not support them.\n\nTo preserve extended attributes with [[text editor]]s you need to configure them to truncate files on saving instead of using {{man|2|rename}}. [https://unix.stackexchange.com/questions/45407]\n\nJust like you should do for any other data you do not want to lose, you should make regular [[System maintenance#Backup|backups]] of your extended attributes. To make a full backup of the extended attributes of all files in the current directory (recursively):\n\n $ getfattr --dump --recursive . > backup.txt\n\nTo restore a backup:\n $ setfattr --restore=backup.txt\n\n== Support ==\n\n=== File systems ===\n\nAll major Linux [[file systems]] including [[Ext4]], [[Btrfs]], [[ZFS]], and [[XFS]] support extended attributes. The kernel allows to have extended attribute names of up to 255 bytes and values of up to 64 KiB, but [[Ext4]] and [[Btrfs]] might impose smaller limits, requiring extended attributes to be within a \"filesystem block\".\n\n[[NTFS]] uses Alternative Data Streams to store user. The mount option {{ic|user_xattr}} or {{ic|streams_interface{{=}}xattr}} should be used by default. However, it might not be supported if mount option {{ic|streams_interface{{=}}windows}} is used. {{pkg|ntfs-3g}} supports mapping Alternative Data Streams to extended attributes in FUSE.\n\n[[NFS]] supports extended attributes [https://www.phoronix.com/news/Linux-5.9-NFS-Server-User-Xattr since Linux 5.9].\n\n=== Software ===\n\n{| class=\"wikitable\"\n! Application\n! Supported extended attributes\n! Notes\n|-\n| [[baloo]]\n| {{bc|\nuser.xdg.tags\nuser.baloo.rating\n}}\n|\n|-\n| {{pkg|caja}}\n| {{Yes}}\n| Supported by caja-xattr-tags and caja.eiciel extensions.\n|-\n| [[Chromium]]\n| {{No|1=https://chromium.googlesource.com/chromium/src/+/a9b4fb70b4318b220deee0da7b1693d16b8ed071}}\n| Used to support referrer and URL, but was disabled due to privacy and security concerns. See also [https://cve.circl.lu/cve/CVE-2018-20483 CVE-2018-20483].\n|-\n| {{AUR|brave}}\n| {{No|1=https://github.com/brave/brave-browser/issues/2766}}\n|\n|-\n| [[CURL]]\n| {{bc|\nuser.xdg.origin.url\nuser.xdg.referrer.url\n}}\n| Enabled with {{ic|--xattrs}} flag.\n|-\n| [[Dolphin]]\n| {{bc|\nuser.baloo.rating\nuser.xdg.comment\nuser.xdg.tags\n}}\n| Dolphin provides comprehensive support for file tagging, including the ability to add tags to files through the context menu, and support for searching by file tags. Tags are stored as CSV in the {{ic|user.xdg.tags}} attribute. See also [[Dolphin#File tagging]].\n\n[https://bugs.kde.org/show_bug.cgi?id=322922], [https://bugs.kde.org/show_bug.cgi?id=116617]\n|-\n| [[Dropbox]]\n| {{ic|user.com.dropbox.attributes}}\n|\n|-\n| [[emacs|emacs-vm]]\n| {{No}}\n| Resets mbox xattrs.\n|-\n| [[Epiphany]]\n| {{No|1=https://gitlab.gnome.org/GNOME/epiphany/-/issues/2165}}\n|\n|-\n| [[Exiftool]]\n| {{No|1=https://exiftool.org/forum/index.php?topic=12762}}\n|\n|-\n| {{pkg|fd}}\n| {{No|1=https://github.com/sharkdp/fd/issues/830}}\n|\n|-\n| {{pkg|findutils}}\n| {{No|1=https://savannah.gnu.org/bugs/?64605}}\n|\n|-\n| [[Firefox]]\n| {{No|1=https://bugzilla.mozilla.org/show_bug.cgi?id=665531}}\n|\n|-\n| {{AUR|gallery-dl}}\n| {{No|1=https://github.com/mikf/gallery-dl/issues/4472}}\n|\n|-\n| [[Gwenview]]\n| {{ic|user.xdg.tags}}\n|\n|-\n| {{pkg|kfind}}\n| {{No|1=https://bugs.kde.org/show_bug.cgi?id=473864}}\n|\n|-\n| {{pkg|konqueror}}\n| {{No|1=https://bugs.kde.org/show_bug.cgi?id=473809}}\n|\n|-\n| kio\n| [https://bugs.kde.org/show_bug.cgi?id=116617]\n|\n|-\n| [[Nautilus]]\n| {{No|1=https://discourse.gnome.org/t/16892}}\n| Full extended file attributes support can be added by the Nautilus extension from {{AUR|eiciel}}. \n|-\n| {{pkg|rclone}}\n| {{No|1=https://forum.rclone.org/t/910}}\n|\n|-\n| {{pkg|recoll}}\n| {{ic|user.xdg.tags}}\n|\n|-\n| {{AUR|tagspaces}}\n| {{No|1=https://trello.com/c/iapsXZZe/64-option-to-store-tags-in-file-using-extended-attributes-xattr}}\n|\n|-\n| {{AUR|tmsu}}\n| {{No|1=https://github.com/oniony/TMSU/issues/10}}\n|\n|-\n| [[Thunar]]\n| {{No|1=https://gitlab.xfce.org/xfce/thunar/-/issues/1195}}\n|\n|-\n| {{AUR|youtube-dl}}, [[yt-dlp]]\n| {{bc|\nuser.xdg.referrer.url\nuser.dublincore.title\nuser.dublincore.date\nuser.dublincore.description\nuser.dublincore.contributor\nuser.dublincore.format\n}}\n| Enabled with {{ic|--xattrs}} flag.\n|-\n| [[Wget]]\n| {{bc|\nuser.xdg.origin.url\nuser.xdg.referrer.url\n}}\n| Enabled with {{ic|--xattrs}} flag.\n|-\n| [[w:webkit|webkit]]\n| {{No|1=https://bugs.webkit.org/show_bug.cgi?id=260778}}\n|\n|}\n\n== Other tagging systems ==\n\nIt might not be possible to use extended attributes due to lack of support of either the file system or software. For this reason, many media formats store metadata included in the file format that can be viewed using programs like [[Exiftool]] or more specified ones like {{AUR|id3}} for audio.\n\n* For all files: [[Exiftool]]\n* For audio: [[List of applications/Multimedia#Audio tag editors|Audio tag editors]]\n* For video: {{man|1|ffprobe}} from [[FFmpeg]]\n\n=== gvfs ===\n\nAnother filesystem-independent workaround is Gnome virtual filesystem: {{pkg|gvfs}} which is used to store metadata (gvfsd-metadata). For example, Firefox [https://hg.mozilla.org/mozilla-central/file/tip/toolkit/components/downloads/DownloadPlatform.cpp stores metadata] this way and can be viewed with:\n\n $ gio info --attributes=metadata:: ''downloaded.html''\n\nOther programs that use this approach include:\n* [[Thunar]]: to save file color highlights.\n\n== See also ==\n\n* [https://www.freedesktop.org/wiki/CommonExtendedAttributes XDG guidelines for extended attributes]\n* [[wikipedia:Extended file attributes#Linux]]\n* [https://www.lesbonscomptes.com/pages/extattrs.html Extended attributes: the good, the not so good, the bad.]"
                    }
                ]
            },
            "23202": {
                "pageid": 23202,
                "ns": 0,
                "title": "GNOME/Tips and tricks",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:GNOME]]\n[[es:GNOME]]\n[[it:GNOME (Italiano)/Tips and tricks]]\n[[ja:GNOME/\u30d2\u30f3\u30c8\u3068\u30c6\u30af\u30cb\u30c3\u30af]]\n[[pt:GNOME]]\n== Keyboard ==\n\n=== Turn on NumLock on login ===\n\nSee [[Activating numlock on bootup#GNOME]]\n\n=== Hotkey alternatives ===\n\nA lot of hotkeys can be changed via GNOME Settings. For example, to re-enable the show desktop keybinding:  \n\n''Settings > Keyboard > Customize Shortcuts > Navigation > Hide all normal windows''\n\nHowever, certain hotkeys cannot be changed directly via Settings. In order to change these keys, use ''dconf-editor'' or ''gsettings''. An example of particular note is the hotkey {{ic|Alt+`}} (the key above {{ic|Tab}} on US keyboard layouts). In GNOME Shell it is pre-configured to cycle through windows of an application, however it is also a hotkey often used in the [[Emacs]] editor. It can be changed by using one of the aforementioned tools to modify the ''switch-group'' key found in {{ic|org.gnome.desktop.wm.keybindings}}.\n\n=== XkbOptions keyboard options ===\n\nUsing the '''dconf-editor''', navigate to the {{ic|xkb-options}} key under the {{ic|org.gnome.desktop.input-sources}} schema and add desired XkbOptions (e.g. ''caps:swapescape'') to the list.\n\nSee {{ic|/usr/share/X11/xkb/rules/xorg}} for all XkbOptions and {{ic|/usr/share/X11/xkb/symbols/*}} for the respective descriptions.\n\n=== De-bind the Super key ===\n\nBy default, the {{ic|Super}} key will open the GNOME Shell overview mode. You can unbind this key by running the command below:\n\n <nowiki>$ gsettings set org.gnome.mutter overlay-key ''</nowiki>\n\n=== Modify Nautilus hotkeys ===\n\nSince 3.15 it is not possible to use the '''accel''' file anymore, but it is possible to rebind keys by utilizing {{Pkg|python-nautilus}}. Install the package and add the following file:\n\n{{hc|~/.local/share/nautilus-python/extensions/modify_keybindings.py|<nowiki>\nimport os, gi\ngi.require_version('Nautilus', '3.0')\nfrom gi.repository import GObject, Nautilus, Gtk, Gio, GLib\n\ndef rebind():\n    app = Gtk.Application.get_default()\n    # Search for open_accels and nautilus_application_set_accelerators in:\n    #   https://github.com/GNOME/nautilus/blob/master/src/nautilus-files-view.c\n    app.set_accels_for_action( \"win.back\", [\"<alt>Left\", \"BackSpace\"] )\n\n    # if you want to figure out which hotkey belongs to which action try this:\n    # print(f'Alt+Left is: {app.get_actions_for_accel(\"<alt>Left\")}')\n\nclass BackspaceBack(GObject.GObject, Nautilus.LocationWidgetProvider):\n    def __init__(self):\n        pass\n\n    def get_widget(self, uri, window):\n        rebind()\n        return None\n\n</nowiki>}}\n\nRestart Nautilus:\n\n $ nautilus -q; nautilus\n\n== Disks ==\n\nGNOME provides a disk utility to manipulate storage drive settings. These are some of its features:\n\n* '''Enable write cache''' is a feature that most hard drives provide. Data is cached and allocated at chosen times to improve system performance. You most likely have this feature already enabled by default (not through disk utility). To check, use {{ic|hdparm -W /dev/sdX}}.\n: ''Settings > Drive Settings > Write Cache > '''On'''''\n: {{Warning|This performance boost comes with the possibility of data loss in case of a sudden power loss, take that into consideration before enabling write cache.}}\n* '''User Session Defaults''' Enable to use your own options in {{ic|/etc/fstab}}, and disable to automatically add default and recommended mount options to drives and partitions that are GPT-based.\n: ''Partition Settings > Edit Mount Options > Automatic Mount Options > '''On'''''\n: {{Warning|This setting erases related [[fstab]] entries.}}\n\n== Hiding applications from the menu ==\n\n{{Tip|\n*Desktop entries can be hidden by editing the ''.desktop'' files themselves. See [[Desktop entries#Hide desktop entries]].\n*{{AUR|Menulibre}} provides a menu editor without GNOME dependencies.\n}}\n\nUse the ''Main Menu'' application (provided by the {{Pkg|alacarte}} package) to hide any applications you do not wish to show in the menu.\n\n== Screencast recording ==\n\nGNOME features built-in screencast recording with the {{ic|Ctrl+Shift+Alt+r}} key combination. A red circle is displayed in the right side of the top bar near the system status area, while the recording is in progress. After the recording is finished, a file named {{ic|Screencast from %d%u-%c.webm}} is saved in the {{ic|Videos}} directory.\n\n{{Note|The recording filename may be translated depending on your system's language.}}\n\nIn order to use the screencast feature, some [https://archlinux.org/packages/?q=gst-plugin gst-plugin packages] need to be installed. For example, the [https://gitlab.gnome.org/GNOME/gnome-shell/-/blob/main/js/dbusServices/screencast/screencastService.js#L26 screencast pipeline] depends on the [https://gstreamer.freedesktop.org/documentation/vpx/vp8enc.html?gi-language=c#vp8enc-page vp8enc] and [https://gstreamer.freedesktop.org/documentation/matroska/webmmux.html?gi-language=c webmmux] elements from {{Pkg|gst-plugins-good}}. If you get an error about missing \"pipewiresrc\" module when trying to record, install {{Pkg|gst-plugin-pipewire}}.\n\n{{Tip|Use [https://github.com/EasyScreenCast/EasyScreenCast EasyScreenCast] for a convenient way to \"configure various settings of the desktop recording\" (including customizing the aforementioned [[GStreamer]] pipeline). EasyScreenCast is also available as {{AUR|gnome-shell-extension-easyscreencast}}.}}\n\nThe maximum screencast length is 30 seconds by default. This can be changed as follows:\n\n $ gsettings set org.gnome.settings-daemon.plugins.media-keys max-screencast-length ''length_in_seconds''\n\nSet {{ic|''length_in_seconds''}} to {{ic|0}} for unlimited length (per the description of {{ic|max-screencast-length}}).\n\n== Screenshot ==\n\n{{Pkg|gnome-screenshot}} by default saves the image in the directory of the last save, which you can query:\n\n $ gsettings get org.gnome.gnome-screenshot last-save-directory\n\nInstead of using the above directory, you can set an auto save  directory. e.g. for automatically saving screenshots to the {{ic|''user''}}'s desktop directory:\n\n $ gsettings set org.gnome.gnome-screenshot auto-save-directory file:///home/''user''/Desktop\n\nCheck the {{man|1|gnome-screenshot}} man page for more options.\n\n== Log out delay ==\n\nTo eliminate the default 60 second delay when logging out:\n\n $ gsettings set org.gnome.SessionManager logout-prompt false\n\n== Change animation speed ==\nGnome shell animation speed may be configured via a \"slow down factor\". Greater than 1.0 will slow down animations, between 0.0 & 1.0 speeds them up.\n\n=== Set slow down factor ===\nTo set temporarily open looking glass with '''Alt-F2''' enter {{ic|lg}} then run, e.g. to speed up animations:\n{{bc|\nSt.Settings.get().slow_down_factor {{=}} 0.4\n}}\n\nAlternatively use {{AUR|gnome-shell-extension-impatience-git}}\n\nSlow down factor may be set permanently without an extension with environment variable {{ic|GNOME_SHELL_SLOWDOWN_FACTOR}}, e.g.\n\n{{hc|/etc/environment|GNOME_SHELL_SLOWDOWN_FACTOR{{=}}0.4}}\n\n=== Disable animations ===\n\nAnimations may be disabled via the GUI by toggling ''Settings > Accessibility > Seeing > Reduce Animation''.\n\n== Retina (HiDPI) display support ==\n\nGNOME introduced HiDPI support in version 3.10. If your display does not provide the correct screen size through EDID, this can lead to incorrectly scaled UI elements. As a workaround you can open ''dconf-editor'' and find the key {{ic|scaling-factor}} in {{ic|org.gnome.desktop.interface}}. Set it to {{ic|1}} to get the standard scale.\n\nAlso see [[HiDPI]].\n\n== Passwords and keys (PGP Keys) ==\n\nYou can use the Passwords and Keys program {{Pkg|seahorse}} to create a PGP key as it is a front end for [[GnuPG]] and installs it as dependency. This may be useful in the future (for instance if to encrypt a file). Create a key as shown below (the process may take about 10 minutes):\n\n''File > New > PGP Key > Name > Email > Defaults > Passphrase''.\n\n== Terminal ==\n\n=== Change default terminal size ===\n\nThe default size of a new terminal can be adjusted in your profile's preferences. Select ''Preferences'' from the menu and select your profile under ''Profiles'' to access the settings to change the initial terminal size.\n\n=== New terminals adopt current directory ===\n\nNew terminals open in the {{ic|$HOME}} directory by default. You can configure the terminal to [https://unix.stackexchange.com/questions/93476/gnome-terminal-keep-track-of-directory-in-new-tab adopt the current working directory] by adding {{ic|source /etc/profile.d/vte.sh}} to your shell configuration file.\n\n=== Pad the terminal ===\n\nTo pad the terminal (create a small, invisible border between the window edges and the terminal contents) create the file below:\n\n{{hc|~/.config/gtk-3.0/gtk.css|<nowiki>\nvte-terminal,\nterminal-window {\n    padding: 10px 10px 10px 10px;\n    -vte-terminal-inner-border: 10px 10px 10px 10px;\n}</nowiki>}}\n\n=== Disable blinking cursor ===\n\nTo disable the blinking cursor in GNOME 3.8 and above use:\n\n $ gsettings set org.gnome.desktop.interface cursor-blink false\n\nTo disable the blinking cursor in Terminal only use:\n\n $ gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:$(gsettings get org.gnome.Terminal.ProfilesList default | tr -d \\')/ cursor-blink-mode off\n\nNote that {{ic|gnome-settings-daemon}}, from the package of the same name, must be running for this and other settings changes to take effect in GNOME applications - see [[GNOME#Configuration]].\n\n=== Disable confirmation window when closing Terminal ===\n\nThe Terminal will always display a confirmation window when trying to close the window while one is logged in as root. To avoid this, execute the following:\n $ gsettings set org.gnome.Terminal.Legacy.Settings confirm-close false\n\n=== Color palette ===\n\nThe Terminal has support to change its color palette to your liking. Simply, go to '''Preferences''', select your profile and finally edit the color palette.\n\n==== Terminal color scheme ====\n\nInstall the {{AUR|gogh-git}} package, which provides a set of custom schemes made for the GNOME Terminal. After you [https://gogh-co.github.io/Gogh/ choose a scheme (or more than one)], run {{ic|gogh}} and input the number(s) of the scheme(s) that you chose.\n\n{{Warning|Do not install all color schemes at once with gogh when prompted, as they would be very hard to remove. Install individual schemes by selection instead.}}\n\nAfter installation, go to '''Preferences''' of the Terminal, go to the '''Colors''' tab and select the name of the color scheme you installed from the left side of the window. You will see a small arrow next to the name, click it and select '''Set as default'''.\n\nFrom here, further configuration can be taken. You may easily change certain colors you do not like.\n\nTo remove a scheme, make another one your default if you had that scheme as your default. Then select its name and click '''Delete'''.\n\n== Middle mouse button ==\n\n{{Out of date|The {{ic|org.gnome.settings-daemon.peripherals.mouse}} key doesn't exist anymore in Gnome 4x, this apply only to GNOME 3}}\n\nBy default, GNOME 3 disables middle mouse button emulation regardless of [[Xorg]] settings ('''Emulate3Buttons'''). To enable middle mouse button emulation use:\n\n $ gsettings set org.gnome.settings-daemon.peripherals.mouse middle-button-enabled true\n\n== Enable button and menu icons ==\n\nSince GTK 3.10, the GSettings key 'menus-have-icons' has been deprecated. Icons in buttons and menus can still be enabled by setting the following overrides:\n $ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides \"{'Gtk/ButtonImages': <1>, 'Gtk/MenuImages': <1>}\"\n\n== Use custom colours and gradients for desktop background ==\n\nTo use custom colours and gradients for your desktop background, you will first need to set either a transparent picture or else a non-existent picture as your desktop background. For instance, the command below will set a non-existent picture as the background.\n\n $ gsettings set org.gnome.desktop.background picture-uri none\n\nAt this point, the desktop background should be a flat colour - the default colour setting is for a deep blue.\n\nFor a different flat colour you need only change the primary colour setting:\n $ gsettings set org.gnome.desktop.background primary-color <my color>\nwhere <my color> is a hex value (such as ''ffffff'' for white).\n\nFor a colour gradient, you will also need to change secondary colour setting {{ic|org.gnome.desktop.background secondary-color}} and select a shading type. For instance, if you want a horizontal gradient, execute the following:\n $ gsettings set org.gnome.desktop.background color-shading-type horizontal\n\nIf you are using a transparent picture as your background, you can set the opacity by executing the following:\n $ gsettings set org.gnome.desktop.background picture-opacity <value>\nwhere value is a number between 1 and 100 (100 for maximum opacity).\n\n== Transitioning backgrounds ==\n\nGNOME can transition between different wallpapers at specific time intervals. This is done by creating an XML file specifying the pictures to be used and the time interval. For more information on creating such files, see the following [https://www.linuxjournal.com/content/create-custom-transitioning-background-your-gnome-228-desktop article].\n\nAlternatively, a number of tools are available to automate the process:\n\n* {{App|mkwlppr|This script creates XML files that can act as dynamic wallpapers for GNOME by referring to multiple wallpapers.|https://pastebin.com/019G2rCy{{Dead link|2023|07|30|status=404}}|see [https://pastebin.com/019G2rCy mkwlppr]{{Dead link|2023|07|30|status=404}}}}\n\n== Custom GNOME sessions ==\n\nIt is possible to create custom GNOME sessions which use the GNOME session manager but start different sets of components ([[Openbox]] with [[tint2]] instead of GNOME Shell for example).\n\nTwo files are required for a custom GNOME session: a session file in {{ic|/usr/share/gnome-session/sessions/}} which defines the components to be started and a [[desktop entry]] in {{ic|/usr/share/xsessions}} which is read by the [[display manager]]. An example session file is provided below:\n\n{{hc|/usr/share/gnome-session/sessions/gnome-openbox.session|2=\n[GNOME Session]\nName=GNOME Openbox\nRequiredComponents=openbox;tint2;gnome-settings-daemon;\n}}\n\nAnd an example desktop file:\n\n{{hc|/usr/share/xsessions/gnome-openbox.desktop|2=\n[Desktop Entry]\nName=GNOME Openbox\nExec=gnome-session --session=gnome-openbox\n}}\n\n{{Note|GNOME Session calls upon the ''.desktop'' files of each of the components to be started. If a component you wish to start does not provide a ''.desktop'' file, you must create a suitable [[desktop entry]] entry in a directory such as {{ic|/usr/local/share/applications}}.}}\n\n== Redirect certain URLs to specific web browsers ==\n\nThis shows how to use [[Chromium]] for certain types of URLs while maintaining [[Firefox]] as default browser for all other tasks.\n\nMake sure {{Pkg|pcre}} is [[install]]ed, to use ''pcregrep''.\n\nSetup custom ''xdg-open'':\n\n{{hc|/usr/local/bin/xdg-open|<nowiki>\n#!/bin/bash\nDOMAIN_LIST_FILE=~/'domains.txt'\nOTHER_BROWSER='/usr/bin/chromium-browser'\nBROWSER_OPTIONS='' # Optional, for command line options passed to browser\nXDG_OPEN='/usr/bin/xdg-open'\nDEFAULT_BROWSER='/usr/bin/firefox'\n\nif echo \"$1\" | pcregrep -q '^https?://'; then\n    matching=0\n    while read domain; do\n\tif echo \"$1\" | pcregrep -q \"^https?://${domain}\"; then\n\t    matching=1\n\t    break\n\tfi\n    done < \"$DOMAIN_LIST_FILE\"\n\n    if [[ $matching -eq 1 ]]; then\n\t\"$OTHER_BROWSER\" $BROWSER_OPTIONS ${*}\n\texit 0\n    fi\n\n    \"$DEFAULT_BROWSER\" ${*}\n    exit 0\nelse\n    \"$XDG_OPEN\" ${*}\nfi\n</nowiki>}}\n\nConfigure domains for redirect to ''Chromium'':\n\n{{hc|$HOME/domains.txt|<nowiki>\nstackexchange.com\nstackoverflow.com\nsuperuser.com\nwww.youtube.com\ngithub.com\n</nowiki>}}\n\nSetup ''xdg-open web'' as desktop application:\n\n{{hc|$HOME/.local/share/applications/xdg-open-web.desktop|2=\n[Desktop Entry]\nVersion=1.0\nName=xdg-open web\nGenericName=Web Browser\nExec=xdg-open %u\nTerminal=false\nType=Application\nMimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https;\nStartupNotify=true\nCategories=Network;WebBrowser;\nKeywords=web;browser;internet;\nActions=new-window;new-private-window;\n}}\n\n $ update-desktop-database $HOME/.local/share/applications/\n\nSet ''xdg-open web'' as default Web application in GNOME settings: Go to ''GNOME Settings > Default Applications'' and  set ''Web'' to ''xdg-open web''.\n\n== Removing film holes/film strip from video thumbnails in Nautilus ==\n\nNautilus (Files) overlays the film holes/film strip effect on video thumbnails since Gnome 3.12. To remove or override this effect, the environment variable {{ic|G_RESOURCE_OVERLAYS}} can be used to reference the path of a compiled resource (in this instance {{ic|filmholes.png}}) and specify the path for the relevant overlay. This environment variable has only been available since GLib 2.50 and will have no effect on versions before this.\n\nExtract {{ic|filmholes.png}} from Nautilus:\n\n $ gresource extract /usr/bin/nautilus /org/gnome/nautilus/icons/filmholes.png > filmholes.png\n\nEdit {{ic|filmholes.png}} using your preferred editor and remove the film effect from the image, leaving the transparency and dimensions intact, then overwriting the extracted image.\n\nCopy or move the extracted image where desired, such as {{ic|/usr/share/icons/}} and edit {{ic|~/.profile}}, adding the following export, changing {{ic|/usr/share/icons/}} as needed to the location you placed the file:\n\n export G_RESOURCE_OVERLAYS=/org/gnome/nautilus/icons/filmholes.png=/usr/share/icons/filmholes.png\n\nIf {{Pkg|ffmpegthumbnailer}} has been installed as a dependency for another file manager that may generate thumbnails, the {{ic|Exec}} line in {{ic|/usr/share/thumbnailers/ffmpegthumbnailer.thumbnailer}} should be modified removing the {{ic|-f}} flag.\n\nTo ensure that no thumbnails remain that may already have the film effect embedded, remove the thumbnail cache:\n\n $ rm -r ~/.cache/thumbnails\n\nLog out and back in to your session and you should no longer have the film holes/film strip effect on your thumbnails in Nautilus.\n\n== GNOME Software integration with pacman ==\n\n{{Pkg|packagekit}} integration was previously available through a package named ''gnome-software-packagekit-plugin'' but has been [https://gitlab.archlinux.org/archlinux/packaging/packages/gnome-software/-/commit/df4431b3707e05832e49b9b9c3164ac53e0e3a6f voluntarily disabled] and is [https://github.com/archlinux/archinstall/issues/1321#issuecomment-1151343223 considered unsupported].\n\n== Increase volume above and beyond 100% ==\n\nInstall the extension [https://extensions.gnome.org/extension/858/volume-mixer/ volume mixer]. Then use the mouse to scroll above the volume icon in the top panel to increase the volume above and beyond 100%.\n\nAlternatively, open GNOME Tweaks and toggle ''General > Over-Amplification''.\n\n== Adjust volume in smaller steps ==\n\nBy default, pressing the keyboard's volume keys adjusts the volume by 6%. If smaller steps are desired, holding {{ic|Shift}} while pressing the volume keys adjusts the volume in 2% steps.\n\nAlso, as of GNOME 3.36, it is now possible to directly adjust the volume step via a dconf setting. For example, to set the volume step to 2% execute the following:\n\n $ gsettings set org.gnome.settings-daemon.plugins.media-keys volume-step 2\n\n== Show volume sound percentage next to top panel icon ==\n\nInstall the extension [https://github.com/maoschanz/sound-percentage-gs-extension sound percentage] to display the current output volume level next to the sound icon in the top panel.\n\n== Launch on discrete GPU ==\n\nInstall {{Pkg|switcheroo-control}} or {{AUR|switcheroo-control-git}} and [[start/enable]] {{ic|switcheroo-control.service}}.\n\n== Window list ==\n\nIf you like having a tasks list on the bottom but dislike the default black color of this extension, first copy its directory:\n\n $ cp -r /usr/share/gnome-shell/extensions/window-list@gnome-shell-extensions.gcampax.github.com/ ~/.local/share/gnome-shell/extensions/\n\nThen edit the CSS to your liking. For example, to make the window list transparent, edit {{ic|stylesheet.css}} as follows:\n\n '''.bottom-panel {'''\n '''  background: transparent;'''\n '''}'''\n ...\n .window-button > StWidget,\n .window-picker-toggle > StWidget {\n   color: #bbb;\n   '''background-color: transparent;'''\n   ...\n\n== Navigation ==\n\nTo mimic the behavior of Windows when switching between windows, first disable the default which restricts the window switching to those in the current workspace: \n\n $ gsettings set org.gnome.shell.app-switcher current-workspace-only false\n\nthen, bind {{ic|Alt+Tab}} and {{ic|Alt+Shift+Tab}} to switch between windows, and not applications: \n\n $ gsettings set org.gnome.desktop.wm.keybindings switch-windows \"['<Alt>Tab']\"\n $ gsettings set org.gnome.desktop.wm.keybindings switch-windows-backward \"['<Shift><Alt>Tab']\"\n\nadditionally, one can rebind the switching between applications (this example uses {{ic|Super}} instead of the default {{ic|Alt}}): \n\n $ gsettings set org.gnome.desktop.wm.keybindings switch-applications \"['<Super>Tab']\"\n $ gsettings set org.gnome.desktop.wm.keybindings switch-applications-backward \"['<Shift><Super>Tab']\"\n\n== Image Viewer ==\n\n[[Install]] {{Pkg|libheif}} to add support for HEIC image file format install `libheif`.  Image Viewer uses `gdk-pixbuf2` library which lists `libheif` as one of the optional dependencies."
                    }
                ]
            },
            "23536": {
                "pageid": 23536,
                "ns": 0,
                "title": "Vivaldi"
            },
            "23552": {
                "pageid": 23552,
                "ns": 0,
                "title": "Hardware video acceleration"
            },
            "24253": {
                "pageid": 24253,
                "ns": 0,
                "title": "Man page (Bahasa Indonesia)"
            },
            "24583": {
                "pageid": 24583,
                "ns": 0,
                "title": "Mooltipass"
            },
            "25219": {
                "pageid": 25219,
                "ns": 0,
                "title": "Man page (Portugu\u00eas)"
            },
            "25282": {
                "pageid": 25282,
                "ns": 0,
                "title": "Electronic identification"
            },
            "25662": {
                "pageid": 25662,
                "ns": 0,
                "title": "Locale (Portugu\u00eas)"
            },
            "25944": {
                "pageid": 25944,
                "ns": 0,
                "title": "ICC profiles (\u0420\u0443\u0441\u0441\u043a\u0438\u0439)"
            },
            "26049": {
                "pageid": 26049,
                "ns": 0,
                "title": "Comparison of desktop environments"
            },
            "26108": {
                "pageid": 26108,
                "ns": 0,
                "title": "Default applications"
            },
            "26267": {
                "pageid": 26267,
                "ns": 0,
                "title": "Domain name resolution (Portugu\u00eas)"
            },
            "26583": {
                "pageid": 26583,
                "ns": 0,
                "title": "Browser extensions"
            },
            "27084": {
                "pageid": 27084,
                "ns": 0,
                "title": "File manager functionality (Portugu\u00eas)"
            },
            "27344": {
                "pageid": 27344,
                "ns": 0,
                "title": "Mozilla Firefox"
            },
            "27715": {
                "pageid": 27715,
                "ns": 0,
                "title": "Transport Layer Security"
            },
            "28150": {
                "pageid": 28150,
                "ns": 0,
                "title": "Language checking"
            },
            "28157": {
                "pageid": 28157,
                "ns": 0,
                "title": "PDF, PS and DjVu"
            },
            "28241": {
                "pageid": 28241,
                "ns": 0,
                "title": "Language checking (Portugu\u00eas)"
            },
            "28258": {
                "pageid": 28258,
                "ns": 0,
                "title": "Language checking (Espa\u00f1ol)"
            },
            "29056": {
                "pageid": 29056,
                "ns": 0,
                "title": "KDE (Portugu\u00eas)"
            },
            "29340": {
                "pageid": 29340,
                "ns": 0,
                "title": "XDG Base Directory (Portugu\u00eas)"
            },
            "30166": {
                "pageid": 30166,
                "ns": 0,
                "title": "Fcitx5"
            },
            "30182": {
                "pageid": 30182,
                "ns": 0,
                "title": "KeePass (Portugu\u00eas)"
            },
            "31046": {
                "pageid": 31046,
                "ns": 0,
                "title": "Dark mode switching"
            },
            "31148": {
                "pageid": 31148,
                "ns": 0,
                "title": "Vi (Portugu\u00eas)"
            },
            "31390": {
                "pageid": 31390,
                "ns": 0,
                "title": "MPRIS"
            },
            "32414": {
                "pageid": 32414,
                "ns": 0,
                "title": "Firefox (\u010cesky)"
            },
            "32927": {
                "pageid": 32927,
                "ns": 0,
                "title": "Locale (Fran\u00e7ais)"
            },
            "33067": {
                "pageid": 33067,
                "ns": 0,
                "title": "Firefox (Fran\u00e7ais)"
            },
            "33109": {
                "pageid": 33109,
                "ns": 0,
                "title": "Localization/Bengali"
            },
            "33312": {
                "pageid": 33312,
                "ns": 0,
                "title": "Firefox (\u6b63\u9ad4\u4e2d\u6587)"
            },
            "34132": {
                "pageid": 34132,
                "ns": 0,
                "title": "Fonts (\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430)"
            },
            "34345": {
                "pageid": 34345,
                "ns": 0,
                "title": "Zoom Meetings"
            },
            "34374": {
                "pageid": 34374,
                "ns": 0,
                "title": "Hyprland"
            },
            "34775": {
                "pageid": 34775,
                "ns": 0,
                "title": "Localization/Arabic"
            },
            "34788": {
                "pageid": 34788,
                "ns": 0,
                "title": "Bidirectional text"
            },
            "35183": {
                "pageid": 35183,
                "ns": 0,
                "title": "Bubblewrap/Examples"
            },
            "35392": {
                "pageid": 35392,
                "ns": 0,
                "title": "V4l2loopback"
            },
            "35458": {
                "pageid": 35458,
                "ns": 0,
                "title": "Bubblejail"
            },
            "35657": {
                "pageid": 35657,
                "ns": 0,
                "title": "XDG Desktop Portal"
            },
            "35956": {
                "pageid": 35956,
                "ns": 0,
                "title": "JPEG XL"
            }
        }
    }
}