Visual Studio Code

Code
is a cross-platform
text editor
developed by Microsoft, built on the
Electron
framework.
Visual Studio Code
is a binary distribution of the MIT-licensed
Code - OSS
repository, with Microsoft specific customizations and released under a
proprietary license
. For details on the mixed licensing, see
this GitHub comment
. There is also a community-driven, MIT-licensed binary release called
VSCodium
with
telemetry
disabled by default.
Installation
The following flavors of Visual Studio Code are available:
Code - OSS
— Official Arch Linux open-source release. Ships a configuration enabling
Open VSX
.
https://github.com/microsoft/vscode
||
code
Visual Studio Code
— Proprietary Microsoft-branded release.
https://code.visualstudio.com/
||
visual-studio-code-bin
AUR
VSCodium
— Community open-source release. Nullifies telemetry in the source code
[1]
, also ships configuration with Open VSX.
https://vscodium.com/
||
vscodium
AUR
These different flavors are all built from the
Code - OSS repository
, but with different licensing and default configurations. Notably, only the proprietary builds are permitted to use Microsoft's marketplace and use Microsoft proprietary extensions such as the
OmniSharp C# Debugger
. The latter is enforced by a handshake mechanism, and cannot be circumvented. For more info on the differences between open source and proprietary "Visual Studio Code" branded builds, consult the
Code - OSS GitHub wiki
.
Extensions support
One of Code's main strengths is its flexible API and rich extension ecosystem hosted on the
Visual Studio Marketplace
. However, the
terms of use of the marketplace
only permit it to be used with the Microsoft branded releases. As a result, the Code - OSS source does not include a configured marketplace. The open-source releases above add the Open VSX extension registry, but this does not offer the same breadth of extensions. It is possible to bypass this limitation.
Warning
Some language extensions developed by Microsoft now strictly require the proprietary Visual Studio Code release to work
[2]
. Tweaking
product.json
does not seem to help. Currently
C/C++
and
C# Dev Kit
are known to be affected.
Known workarounds are:
ask the maintainer to upload its extension to the
Open VSX registry
;
add the Microsoft Visual Studio Code Marketplace by using
code-marketplace
AUR
(or
vscodium-marketplace
AUR
for VSCodium). The package installs a
Pacman hook
that patches
product.json
as shown in
this Github comment
after every package update.
Tip
It is useful to enable a
keyboard shortcut to reload the IDE
when experimenting with changing
product.json
.
Usage
Run
code
to start the application (or
codium
for VSCodium).
If for any reason you wish to launch multiple instances of Visual Studio Code, the
-n
flag can be used.
Configuration
Launch configuration
Per-user configuration can be set in the following files. Note that this is specific to these packages, as they use a patched loader script that reads these options.
Using these files, one can add flags for
Visual Studio Code
,
Electron
, or
Chromium
.
Package
Location
code
~/.config/code-flags.conf
visual-studio-code-bin
AUR
~/.config/code-flags.conf
vscodium
AUR
Not supported
Application configuration
Note
Packages like
code-features
AUR
that patch
product.json
can override the
nameShort
and
dataFolderName
variables, making the below section inaccurate.
VSC stores settings in
$XDG_CONFIG_HOME/
nameShort
/User/settings.json
and the extension data in an
XDG-nonstandard
$HOME/
dataFolderName
directory, using variables from
product.json
.
This translates to the following default paths in various versions:
code
stores settings in
~/.config/Code - OSS/User/settings.json
and extensions in
~/.vscode-oss
visual-studio-code-bin
AUR
stores settings in
~/.config/Code/User/settings.json
and extensions in
~/.vscode
vscodium
AUR
stores settings in
~/.config/VSCodium/User/settings.json
and extensions in
~/.vscode-oss
When migrating from Code to Codium (or vice versa), the settings directory can be copied or moved. Since they share most of their codebase, the settings are compatible.
Integrated terminal
This article or section is out of date.
Reason:
Fish v4 has moved from -d 3 to --debug categories (Discuss in
Talk:Visual Studio Code
)
View > Integrated Terminal
or
Ctrl + `
opens up an integrated terminal.
By default,
Bash
is used with no additional arguments, although this can be changed.
terminal.integrated.shell.linux
sets the default shell to be used and
terminal.integrated.shellArgs.linux
sets the arguments to be passed to the shell.
Example:
~/.config/Code/User/settings.json
"terminal.integrated.shell.linux": "/usr/bin/fish",
"terminal.integrated.shellArgs.linux": ["-l","-d 3"]
You might face weird prompts after setting the integrated shell arguments with an external terminal. Remove the line to solve the problem or use an external terminal.
External terminal
If you are using
Terminator
as default terminal for Arch and you have an error on Visual Studio Code:
Unable to launch debugger worker process (vsdbg) through the terminal. spawn truecolor ENOENT
, you can change the terminal that will be used by Visual Studio to another terminal (e.g.
gnome-terminal
).
"terminal.external.linuxExec": "Your alternative terminal"
sets the default terminal to be used for exec debug.
Example:
~/.config/Code/User/settings.json
"terminal.external.linuxExec": "gnome-terminal"
Running natively under Wayland
Visual Studio Code uses Electron, see
Wayland#Electron
for more information on how to run it natively under Wayland.
Keep in mind that some applications bring their own copy of Electron and will not read the standard Electron flags file. You can set flags separately in each application's
configuration file
.
vscodium
AUR
does not load config files. It provides a dedicated
vscodium-wayland.desktop
desktop entry
file, which appears as "VSCodium - Wayland" in the menu.
Native file dialog
If using Plasma, by default VS Codium opens GTK file dialogs. To fix that, ensure that KDE
desktop portal
(
xdg-desktop-portal-kde
) is installed and set the
GTK_USE_PORTAL=1
environment variable
.
Remote SSH
The official "Remote - SSH" extension is not working with
code
(VSCode-OSS).
There are two options:
install
code-features
AUR
install the
Open Remote-SSH extension
(there is a
PR to make it work with VSCode-OSS
).
Troubleshooting
Global menu not working in KDE/Plasma
Visual Studio Code uses DBus to pass the menu to Plasma, try installing
libdbusmenu-glib
.
[3]
Unable to move items to trash
By default,
Electron
applications use
gio
to delete files.
kioclient5
is automatically selected instead if
Plasma
is detected. Different trash implementations can be used by setting the
ELECTRON_TRASH
environment variable
.
For example, for deleting files using
trash-cli
:
$ ELECTRON_TRASH=trash-cli code
At the time of writing, Electron supports
kioclient5
,
kioclient
,
trash-cli
,
gio
(default) and
gvfs-trash
(deprecated). More info is available at this
documentation page
.
Unable to debug C#
If you want to debug C#
.NET
(using the
OmniSharp extension
) then you need to install the Microsoft branded release (from the AUR).  This is apparently because the .NET Core debugger is only licensed to be used with official Microsoft products - see
this github discussion
.
When using the open-source package, debugging fails fairly quietly. The debug console will just show the initial message:
You may only use the Microsoft .NET Core Debugger (vsdbg) with
Visual Studio Code, Visual Studio or Visual Studio for Mac software
to help you develop and test your applications.
For debugging with the open-source package,
netcoredbg
AUR
can be used. To run it in VS Code, add this configuration to .NET Core launch configuration of the project:
./.vscode/launch.json
"configurations": [
    {
...
    "pipeTransport": {
        "pipeCwd": "${workspaceFolder}",
        "pipeProgram": "/usr/bin/bash",
        "pipeArgs": ["-c"],
        "debuggerPath": "/usr/bin/netcoredbg"
    }
...
This is stable, actively maintained, and the preferred method for open-source VS Code users.
Unable to open .csproj with OmniSharp server, invalid Microsoft.Common.props location
You have to switch from mono to proper SDK version props.
/opt/dotnet/sdk/{VERSION}/Sdks/Microsoft.NET.Sdk/Sdk/Sdk.props
$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props
Modify import to look like this:
/opt/dotnet/sdk/{VERSION}/Sdks/Microsoft.NET.Sdk/Sdk/Sdk.props
/opt/dotnet/sdk/{VERSION}/Current/Microsoft.Common.props
Error from OmniSharp that MSBuild cannot be located
It is noted in the
OmniSharp introduction
that Arch Linux users should install the
mono-msbuild
package.  Without it, you might get an error like:
OmniSharp Log
[info]: OmniSharp.MSBuild.Discovery.MSBuildLocator
        Registered MSBuild instance: StandAlone 15.0 - "~/.vscode/extensions/ms-vscode.csharp-1.18.0/.omnisharp/1.32.11/omnisharp/msbuild/15.0/Bin"
            MSBuildExtensionsPath = /usr/lib/mono/xbuild
            BypassFrameworkInstallChecks = true
            CscToolPath = ~/.vscode/extensions/ms-vscode.csharp-1.18.0/.omnisharp/1.32.11/omnisharp/msbuild/15.0/Bin/Roslyn
            CscToolExe = csc.exe
            MSBuildToolsPath = ~/.vscode/extensions/ms-vscode.csharp-1.18.0/.omnisharp/1.32.11/omnisharp/msbuild/15.0/Bin
            TargetFrameworkRootPath = /usr/lib/mono/xbuild-frameworks
System.TypeLoadException: Could not load type of field 'OmniSharp.MSBuild.ProjectManager:_queue' (13) due to: Could not load file or assembly 'System.Threading.Tasks.Dataflow, Version=4.5.24.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies.
...
You might be able to build anyway (possibly depending whether you have
mono
installed too).
Omnisharp ships with its own mono version, so, if it is unable to locate the installed one, if you want to tell omnisharp to look for a "global" mono installed in your machine, put this in your settings.json:
settings.json
"omnisharp.useGlobalMono:"always"
Saving with "Retry as Sudo" does not work
This feature does not work in the
code
package, because Microsoft does not support the way the Arch package is packaged (native instead of bundled Electron). See
FS#61516
and the
upstream bug report
for more information.
The binary release
visual-studio-code-bin
AUR
does not have this issue, and the feature works there.
Keyboard variants or keymappings do not map
As per the
wiki on GitHub
:
Switching keyboard layouts under some Linux window managers does not result in a change in the low level X window APIs VS Code uses to read the current keyboard layout. This means that VS Code ends up sometimes reading one of the other configured keyboard layouts and not the current active one. PR welcome...
Per the wiki, there are two possible solutions:
make sure
setxkbmap -query
returns as the first keyboard layout the one you want to work with in VS Code.
use
"keyboard.dispatch": "keyCode"
in your settings and restart VS Code. This will prevent VS Code from trying to determine your keyboard layout whatsoever.
Command "..." not found
In the Microsoft branded releases, the
product.json
file lists the extensions that are allowed to use certain proposed APIs accessed by extensions. Code - OSS and VSCodium distributions lack these values, though this does not appear to be due to licensing. Unlike the forced Marketplace enabling, this workaround
is
endorsed by Microsoft
[4]
.
This issue can be resolved by installing a Pacman hook that patches the file on every package update:
For
code
,
install
code-features
AUR
For
vscodium
AUR
, install
vscodium-features
AUR
You can also manually add the relevant entries to the
extensionAllowedProposedApi
section in the
product.json
file:
For
code
, edit
/usr/lib/code/product.json
For
vscodium
AUR
, edit
/usr/share/vscodium/resources/app/product.json
An example of a manual configuration that would make Live Share work is
[5]
:
product.json
...
  "extensionAllowedProposedApi": [
    "ms-vsliveshare.vsliveshare",
    "ms-vscode.node-debug",
    "ms-vscode.node-debug2"
  ]
...
Finally, you can also enable these options using command line flags,
as described for the GitHub pull request extension
.
VS Live Share missing API
Use either the solution above by editing the
product.json
, or open VS Code with:
$ code --enable-proposed-api ms-vsliveshare.vsliveshare
Also note that for this extension to work, you need to install dependencies listed here
[6]
.
Command 'remote-containers.openFolder' not found
Open VS Code enabling remote-containers API as commented in
FS#63374
:
$ code-oss --enable-proposed-api ms-vscode-remote.remote-containers
Command 'GitHub Pull Requests: Configure Remotes...' resulted in an error (command 'pr.configureRemotes' not found)
Open VS Code with:
$ code --enable-proposed-api GitHub.vscode-pull-request-github
Git: ssh_askpass: exec(/usr/lib/ssh/ssh-askpass): No such file or directory
This error is a result of an encrypted ssh-key and inability to use ssh agent, see
bug report
. The issue can be solved by installing a dialogue provider like
SSH keys#x11-ssh-askpass
or the alternatives listed there (e.g.
ksshaskpass
for KDE).
One thing to note is that for
ksshaskpass
you would either need to link it from
/usr/lib/ssh/ssh-askpass
to get VSCode to find it:
# ln /usr/bin/ksshaskpass /usr/lib/ssh/ssh-askpass
or set the following
environment variables
for your shell, see
[7]
:
GIT_ASKPASS=ksshaskpass
SSH_ASKPASS=ksshaskpass
SSH_ASKPASS_REQUIRE=prefer
To disable VSCode's internal
git-askpass
, add:
~/.config/Code - OSS/User/settings.json
{
    "git.useIntegratedAskPass": false
}
Cutoff characters in integrated Terminal
Characters that are too wide can end up clipping. For example the italic bold text of Deno stack-traces.
This can be avoided by setting "terminal.integrated.rendererType" to "experimentalWebgl".
Blurry text under Wayland
Visual Studio Code defaults to run under Xwayland, which may cause blurry text if you are using HiDPI screens. To fix this issue, try forcing Electron to run under Wayland—see
#Running natively under Wayland
.
Alternatively, if your Wayland environment provides the option to run Xwayland applications unscaled, you can circumvent this issue. You may then run Visual Studio Code with the
--force-device-scale-factor=
option to achieve an appropriate scale for your screen.
For example, for a scaling factor of 2:
$ code --force-device-scale-factor=2
No such interface“org.freedesktop.Secret.Collection”
See
settings-sync#_troubleshooting-keychain-issues
Authentication with Github failed while using VSCodium
When connecting a Github account, change "vscodium" to "vscode" in the URL as seen in
this comment
. Then copy the identification token into VSCodium. Should it still fail, install a keyring like
gnome-keyring
or create a new keyring as mentioned here
in the Visual Studio Code docs
and here
on Github
.
An OS keyring couldn't be identified
On some desktop environments like i3, VSCode fails to detect the keyring. If you are using gnome-keyring, you can add the following line to force VSCode to use that keyring:
~/.vscode-oss/argv.json
{
    ...
    "password-store": "gnome-libsecret",
}
The example path above is for the official
code
package. You might have to adjust the
.vscode-oss
directory path depending if you have a different one installed.
Interface fonts differ from the fonts chosen in the system settings
To render its interface VSCode uses the
fonts
chosen in the system settings. If you are using OTF fonts, try TTF ones.