web-dev-qa-db-fra.com

pourquoi le terminal tactile Ubuntu ne peut pas exécuter l'application

mon téléphone Buntu est Nexus 4. Le code suivant n'est pas en cours d'exécution.

Code

#include <stdio.h>
#include <stdlib.h>

int main()
{
    printf("Hello world!\n");
    return 0;
}

Compiler

$ arm-linux-gnueabihf-g++ -static -o hello main.c
  • Je copie des fichiers dans le répertoire /home/phablet/Downloads
  • terminal téléphonique ouvert ubuntu,
  • Modifier les attributs de fichier (chmod a+x ./hello)
  • exécuter ./hello

mais l'invite téléphonique ubuntu donne l'erreur suivante

./hello permission denied

pourquoi?

6
suer

J'ai compris quelque chose. La raison pour laquelle vous ne pouvez pas exécuter les fichiers binaires à partir de votre répertoire de base est que le profil apparmor du terminal l’empêche. Si vous regardez la sortie de dmesg après avoir essayé de lancer un binaire, vous devriez voir quelque chose comme:

[140792.471956] type=1400 audit(1431182253.050:175): apparmor="DENIED" operation="exec" profile="com.ubuntu.terminal_terminal_0.7.70" name="/home/phablet/apps/git/usr/bin/git" pid=28134 comm="bash" requested_mask="x" denied_mask="x" fsuid=32011 ouid=32011

Ce qui vous indique simplement qu'apparmor a refusé le terminal pour exécuter votre programme, et entre autres choses, il vous indique le nom du profil apparmor (com.ubuntu.terminal_terminal_0.7.70) du terminal. Pour permettre l'exécution de fichiers binaires arbitraires, nous devons modifier ce profil.

Normalement, vous trouverez des profils apparmor dans /etc/apparmor.d, mais ce n’est pas toujours le cas sur le téléphone Ubuntu. Il semble en particulier que les paquets de clic (dont le terminal est l'un des leurs) agissent à leur guise et mettent des fichiers à des endroits différents. J'ai trouvé plusieurs emplacements pour le profil de terminal apparmor et le bon à modifier semble être:

Sudo vi /var/lib/apparmor/profiles/click_com.ubuntu.terminal_terminal_0.7.70

Il devrait y avoir une section comme celle-ci:

# autopilot runs things in out of ~/autopilot/fakeenv, so lets allow running
# things pretty much everywhere but avoid exec conflicts with the autopilot
# include file which has this rule:
# owner @{HOMEDIRS}/autopilot/fakeenv/*/.local/share/@{APP_PKGNAME}/** mrwklix,
/[^h]** pix,
/[^h][^o][^m][^e]** pix,
@{HOMEDIRS}/*/autopilot/[^f][^a][^k][^e]*/** pix,

Ce qui devrait déjà permettre à peu près tout d'être exécuté sous/home si je le comprends correctement. Le commentaire semble impliquer la même chose. Pourtant, pour des raisons qui m'échappent, cela ne fonctionne pas. Donc, pour que cela fonctionne, vous pouvez simplement supprimer (ou commenter) toute cette section et la remplacer par:

/** pix,

Cela devrait permettre à l'application de terminal de toujours tout exécuter, de partout. Ensuite, redémarrez apparmor:

Sudo service apparmor restart

et vous devriez être bon pour aller.

6
rakete