A variável de ambiente $ PATH de um ambiente de desktop é diferente daquela em um shell?

1

Estou tentando encontrar o arquivo .desktop para qtcreator, então escrevo isto:

$ for p in ${XDG_DATA_DIRS//:/ }; do
    grep -rni 'qtcreator' $p;
done

E aqui estão as linhas mais relevantes:

/usr/share/app-install/desktop/qtcreator-plugin-ubuntu:ubuntusdk.desktop:2:X-AppInstall-Package=qtcreator-plugin-ubuntu
/usr/share/app-install/desktop/qtcreator-plugin-ubuntu:ubuntusdk.desktop:6:Exec=qtcreator %F
/usr/share/app-install/desktop/qtcreator-plugin-ubuntu:ubuntusdk.desktop:7:Icon=ubuntu-qtcreator
/usr/share/app-install/desktop/qtcreator:qtcreator.desktop:2:X-AppInstall-Package=qtcreator
/usr/share/app-install/desktop/qtcreator:qtcreator.desktop:6:Exec=qtcreator %F
/usr/share/app-install/desktop/qtcreator:qtcreator.desktop:7:Icon=QtProject-qtcreator
/usr/share/app-install/desktop/qhimdtransfer:qhimdtransfer.desktop:12:#Icon=qtcreator_logo_32

Acho que o qtcreator:qtcreator.desktop é a entrada para o QtCreator, então abro e descubro:

[Desktop Entry]
X-AppInstall-Package=qtcreator
X-AppInstall-Popcon=292
X-AppInstall-Section=universe

Exec=qtcreator %F
Icon=QtProject-qtcreator
Type=Application
Terminal=false
Name=Qt Creator
GenericName=Integrated Development Environment
MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.nokia.qt.qmakeprofile;application/vnd.nokia.xml.qt.resource;
Categories=Qt;Development;IDE;
InitialPreference=9

X-Ubuntu-Gettext-Domain=app-install-data

qtcreator não está na variável $ PATH do shell . Mas ainda posso lançar o QtCreator na unidade gnome.

Das freedesktop-exec-variables Eu notei

If no full path is provided the executable is looked up in the $PATH environment variable used by the desktop environment.

Pergunta

A variável de ambiente $ PATH de um ambiente de área de trabalho diferente daquela é um shell?

Se sim, onde está o arquivo de configuração contendo a variável $ PATH para o ambiente desktop?

Eu instalo uma versão mais recente do QtCreator e, em seguida, inicio o QtCreator no desktop e descubro referências à versão mais recente sem alterar o arquivo qtcreator:qtcreator.desktop . Eu acho que tem algo a ver com o caminho do qt?

Ambiente de desktop: gnome

OS: ubuntu16.04

Editar

O problema real que eu encontrei não foi sobre o $ PATH (veja minha resposta). A resposta de Gilles é, na verdade, a resposta para 'A variável de ambiente $ PATH de um ambiente de desktop é diferente daquela em um shell?' então eu aceitei no caso de alguém ter a mesma dúvida que eu.

    
por Charles 01.07.2018 / 02:36

2 respostas

2

Is $PATH environment variable of a desktop environment different from that is a shell?

Pode ser.

O ambiente de um programa não vem de um arquivo, a menos que o programa faça todo o possível para ler as variáveis de ambiente de um arquivo. Cada processo herda o ambiente de seu pai. A leitura de variáveis de ambiente de um arquivo faz parte do trabalho do programa executado no login (um shell ao efetuar login no modo de texto, um gerenciador de sessão ou o programa que age como tal ao efetuar login em um ambiente gráfico). Então, normalmente, se você usar o ambiente de área de trabalho e abrir um shell em um terminal, esse shell terá o mesmo ambiente que o ambiente de área de trabalho.

No entanto, na prática, isso pode não ser o caso, porque há uma tonelada de conselhos na Web dizendo às pessoas para colocar as definições de variáveis de ambiente em .bashrc . Essa é uma má idéia porque significa que essas variáveis de ambiente não estão disponíveis para programas iniciados diretamente da GUI, em vez de serem iniciados a partir de um terminal. Mas se você fez isso, você pode achar que você tem diferentes variáveis de ambiente em um terminal em comparação com o que você tem no ambiente de desktop e em programas não iniciados a partir de um terminal.

Colocar definições de variáveis de ambiente em ~/.profile funciona na maioria dos sistemas. Eu acho que funciona para o Gnome no Ubuntu 16.04, desde que você não ative o Wayland (que quebra muitas coisas, incluindo configurações de login, e nem sempre oferece uma maneira de recuperar).

Em qualquer caso, os sintomas comuns de colocar variáveis de ambiente no local errado são que as variáveis de ambiente estão presentes em um terminal, mas ausentes no ambiente de área de trabalho. Para que seja o contrário, você teria que ter algo incomum em seus arquivos de inicialização do shell.

qtcreator is not in the variable $PATH of the shell.

Eu duvido muito, se estiver instalado. O Ubuntu envia qtcreator em /usr/bin , que é onde a maioria dos programas está localizada.

Mas observe que $PATH não tem nada a ver com a localização do arquivo .desktop . $PATH é para programas aplicativos, não para .desktop files. Se você está procurando o arquivo .desktop para qtcreator , e você tem o pacote qtcreator instalado, você pode apenas procure o arquivo :

$ locate qtcreator.desktop
/usr/share/applications/qtcreator.desktop

/usr/share/applications é o local padrão para .desktop arquivos.

Se você instalou sua própria versão do QtCreator além da versão do Ubuntu, certifique-se de que qtcreator esteja no caminho de pesquisa do comando, ou seja, $PATH . Se você o instalou em todo o sistema, deverá disponibilizá-lo como /usr/local/bin/qtcreator , que está no caminho de pesquisa do comando antes de /usr/bin , para que você obtenha sua versão de preferência em relação à do sistema. Se você o instalou em sua conta, crie um link simbólico de onde o qtcreator executável for para ~/bin/qtcreator , ou seja, para o diretório bin em seu diretório inicial (se esse diretório não existir, crie-o). O .profile padrão do Ubuntu adiciona ~/bin à frente de $PATH .

    
por 01.07.2018 / 10:14
0

Acontece que $XDG_DATA_DIRS não é o único caminho de pesquisa para o arquivo *.desktop . Então eu encontrei o arquivo de entrada do desktop QtCreator errado.

Veja a Especificação de diretório base do XDG

There is a single base directory relative to which user-specific data files should be written. This directory is defined by the environment variable $XDG_DATA_HOME.

$XDG_DATA_HOME defines the base directory relative to which user specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used.

$XDG_DATA_DIRS defines the preference-ordered set of base directories to search for data files in addition to the $XDG_DATA_HOME base directory. The directories in $XDG_DATA_DIRS should be seperated with a colon ':'.

Encontrei o verdadeiro arquivo de entrada da área de trabalho do QtCreator ~/.local/share/application/DigiaQt-qtcreator-community.desktop .

A linha Exec é Exec=/home/user/Qt/Tools/QtCreator/bin/qtcreator , portanto, o problema não é sobre $PATH .

Instalei a versão mais antiga e mais recente do QtCreator a partir do código-fonte. Existe um diretório InstallationLog.txt under Qt. A ação de copiar o arquivo da área de trabalho para ~/.local/share está documentada lá.

    
por 01.07.2018 / 09:11