Не запускаются приложения linux
Почему кажется, что я не могу открыть исполняемый файл, созданный на C++, дважды щелкнув по нему.
У меня есть файл, который я запустил из IDE, и я хотел бы знать, есть ли способ установить этот файл для открытия терминала при щелчке по нему, как это делает файл .exe в Windows.
Код C++, который я мог бы добавить в свой исходный код, который позволит это.
Настройте Мой ПК, чтобы открыть его.
Я стараюсь избегать наборов инструментов, насколько это возможно. Недавно я скомпилировал приложение для Windows (спасибо моему двоюродному брату, у него есть компьютер с Windows)
И было бы замечательно, если бы можно было сделать то же самое, что можно сделать в Windows на Linux, потому что у нас есть 2 Release Folders.
И я хотел бы, чтобы это простое приложение на основе терминала могло работать без необходимости быть экспертом.
Я добавил эту строку:
Он открывается на терминале, но просто показывает путь к файлу, а не саму программу.
Я ожидаю, что вам нужно установить "исполняемый" бит в файле, который выводится компилятором Linux C++, я не думаю, что это делается по умолчанию из соображений безопасности.
Просто "cd" в каталог, в котором находится ваш сгенерированный исполняемый файл.
Заменив "myexecutable" на имя вашего вывода компилятора.
Затем попробуйте запустить его с ./myexecutable
Я считаю, что это также должно сделать программу "работоспособной" с помощью щелчка мыши и консоли.
Точно так же, если вам нужно запустить "скрипт" из команд, вы можете попробовать следующее в файле скрипта, сохранить его как «myexe.sh» или что-то подобное:
Затем снова используйте
чтобы сделать так, чтобы вы могли запустить скрипт, нажав на него.
Я думаю, что корень вашей проблемы в том, что вы на самом деле не понимаете различия между эмулятором терминала и оболочкой и тем, как Linux выясняет, как запускать процессы.
Во-первых, это "Terminal Emulator", в среде на основе Gnome это обычно Gnome Terminal.
Затем есть "Shell", в Linux это обычно bash, хотя возможны и другие оболочки.
"Shell" работает внутри "Terminal Emulator". Это различие связано с возрастом физических терминалов, где физический терминал - это аппаратное обеспечение, которое принимает данные, пишет текст в цветах и т.д., А Shell - это программное обеспечение, которое обрабатывает пользовательские команды и управляет другими процессами на основе заданных команд.
В настоящее время у нас есть экран общего назначения, который может отображать любые изображения, поэтому мы больше не используем физический терминал, а вместо этого имеем "эмуляторы терминала", программное обеспечение, которое эмулирует работу физических терминалов, и оболочку, которая по-прежнему является та же самая оболочка, что и раньше (ну, современные оболочки используют преимущество программного эмулятора терминала, например, не ограничиваются физическим ограничением бумаги и т. д., но разрыв остается).
"Оболочка" не всегда работает внутри эмулятора терминала; Существуют также графические оболочки, такие как Nautilus (подсказка, Nautilus - название морского существа с большой раковиной) или Windows Explorer (не путать с Internet Explorer).
Как в оболочке командной строки, например, bash, так и в графической оболочке, например, Nautilus, исполняемый файл помечается установленным битом execute .
В командной строке вы можете использовать ls -l для просмотра битов прав доступа к файлу, например, rwxrwxrwx означает, что каждый может читать / писать / выполнять программу; rwxr-xr-- означает, что владелец имеет полное разрешение, люди в группе файла могут читать и выполнять, но не могут писать, а другие могут только читать файл. В Nautilus вы можете щелкнуть правой кнопкой мыши файл> Свойства> вкладка Разрешения. На странице свойств Разрешения вы можете получить разрешение для файла, подобное тому, которое есть в командной строке.
Файл с установленным битом выполнения рассматривается как исполняемый файл и может быть выполнен с помощью ./filename (оболочка командной строки) или двойного щелчка (графическая оболочка).
Наконец, есть несколько других тонкостей того, как оболочка выполняет файл. В большинстве оболочек Linux вы можете "выполнить" скрипт, написанный на python/perl/php/bash, который не является скомпилированным исполняемым файлом. Поскольку эти файлы не являются скомпилированными в исходном коде исполняемыми файлами, для их выполнения требуется интерпретатор (например, интерпретатор python). В отличие от оболочки Windows (Explorer), которая определяет интерпретатор для вызова через расширение файла; Оболочки Linux определяют правильного интерпретатора, глядя на строку "hashbang", которая выглядит следующим образом
когда бит выполнения файла установлен, и у файла есть эта строка hashbang, оболочка вызовет интерпретатор /usr /bin /python с текущим файлом в качестве аргумента.
Nautilus также может распознать, когда программа является приложением командной строки, и предложит вам запустить приложение в Терминале. Когда вы дважды щелкнете по исполняемому скрипту, Nautilus спросит, хотите ли вы запустить его в терминале, запустить без терминала или отредактировать файл в текстовом редакторе.
почти все программы перестали запускаться [РЕШЕНО]
почти все программы перестали запускаться [РЕШЕНО]
Вчера я определился с тем, что Роса остается жить на моем компе. Всвязи с чем форматировал жесткие диски и переустановил систему уже на постоянку.
Что я делал :
Ssd диск Sda 1 - стоит винда, пока оставил ее жить.
2- swap
3 - /
4 - /home
Обычные sdb форматнул в ntfs ( будет общий для Росы и винды)
Sdc1 - ntfs
2 - ext4 если вдруг еще какой дистр. захочу поставить.
Систему установил, вошел на драйверах vesa, не обновляя поставил ядро 3.18.
Загрузился на 3.18 , установил первую партию обновлений. Система сказала нужна перезагрузка. До перезагрузки зашел в настройки, установил в автозапуск clementine , скрипт к нему clementine -p.
Потомм зашел в настройки внешних носителей, включил автомонтирование и поставил галки на sda1 sdb sdc1, на корневой и home ставить не стал, т. к. я подумал что это система, итак монтируется.
Перезагрузился : кликая на иконки программ ни одна не запускалась. Запустился только установщик программ. При этом на рабочем столе пкм срабатывает, меню открывается. Иконки из simple перетаскиваются. К инету подключается. Ctr*alt*f2 срабатывает. Попытался в tty2 запустить системные настройки введя команду, которая прописана в иконке на запуск настроек ( пкм - свойства на иконке работало) , выдалочто-то нет коннекта с хсервером. Ради пробы попробовал XFdrake, в консоле включился.
Какое мнение ГУРУ? Что можете подсказать еще?
До компа доберусь завтра, после работы.
войти в папку
/.kde4/share/config/ и удалить файлы kded_device_automounterrc и device_automounter_kcmrc.
А потом уже войти в графику.
И мне было не очень смешно KA-25 писал(а): Ну я сомневаюсь что это шутка от разработчиков))) а беда случилась еще 31 марта в ночь на 1 апреля)
И мне было не очень смешно Надеюсь, что всё исправится после удаления файлов, о которых написал выше.
Монтировать автоматически ntfs c установленной там системой,
не лучшее решение.
Кто знает, что там у вас.
А если винда в спящем режиме, как вы её подключите?
Хотя на первый взгляд по признакам, проблемы с правами на файлы в домашнем каталоге.
Когда удалите файлы, будет видно. Там нужные файлы)) гибернация, сон и прочая хрень виндовая отключена. Винду выкючаю через скрипт, чтоб эта зараза правильно выключалась и диски не блокировала) KA-25 писал(а): Там нужные файлы)) гибернация, сон и прочая хрень виндовая отключена. Винду выкючаю через скрипт, чтоб эта зараза правильно выключалась и диски не блокировала) Я не спорю.
Просто привык считать как аксиому, что автоматическое подключение ntfs может привести к проблемам.
Там и падающие иксы и ещё фик знает что.
Но не могли же вы сломать права, что могло бы блокировать запуск приложений.
Как удалите эти два файла и будет отключено автоподключение дисков,
будет ясно, виновато ли это. Я грешу на не установленные галочки диск с корневой системой и диск /home , ибо с автомонтированием почти неделю просидел, когда Росу изучал. Завтра отпишусь как и что. KA-25 писал(а): Я грешу на не установленные галочки диск с корневой системой и диск /home Это совершенно не влияет и зависит не от вас.
Эти диски монтируются на уровне системы. KA-25 писал(а): Если у кого есть желание, можете повторить процедуру с автомонтированием методом исключения будет ясно, оно виновато или не оно)))
то ли лыжи не едут, то ли я .
Теперь по порядку:
1. Включаю комп,ни чего не изменилось, кроме rpmdrake ничего не запускалось, обои меняются (папка на диске с виндой, который автомонтировался), при нажатии на иконку питания в системном лотке, жесткое зависание. Выключаю питанием системного блока.
2. Загружаюсь в режиме восстановления ( как раз чтобы графика не запускалась, я прав ? ), Делаю пробу. Запускаю mc, нахожу device_automounter_kcmrc, просматриваю, там три числа, мне это ничего не сказало - удалил. Нахожу kded_device_automounterrc, просмотр, тут уже мне понятно что к чему . Удалять не стал. По порядку каждому диску прописал false и делал перезагрузку. чтоб методом исключения вычислить негодяя, если в нем дело. Изменений нет. ( после отключения монтирования диска с виндой, обои не загрузились, что есть правильно).
3. Удалил из автозагрузки скрипт на запуск клементине. На всякий случай.
4. Напряг память что еще делал. Я включил автовход. Пытался найти в конфигах файл по названию подходящему по смыслу. Не нашел ( познаний не хватило)
5. После очередной обычной загрузки нажал alt+ctrl+back_space. попал на окно входа в систему. Нажал на шестеренку выбрал режим "упрощенный". Вошло. Прописал dolphin. Он запустился. Уже обрадовался. В юзер/бин нашел систем сеттинг. Запустил. Еще раз обрадовался. Полез в настройки автовхода чтобы выключить. тут облом. Ошибка 4. Окно с вводом пароля не вышло. Ну думаю ладно. В папке юзер/бин в долфине нажал пкм, открыл консоль. В консоле клавиатура работать отказалась ( хотел запустить системсеттинг в режиме су).
7. Шестеренка-вход после сбоя Х сервера. Загрузился. Опять тишина и. секунд через 20 просрался, открылись программы которые успел нажать в эти 20 сек, запустился клементине из автозапуска, проиграла мелодия входа в систему, диски кстати приавтомонтировались. Короче заработал. Сделал пробу.
По сути операционная система состоит из ядра и огромного набора программ, которые предназначены для выполнения различных задач, обслуживания системы и удовлетворения потребностей пользователя. Почти все взаимодействие пользователя и операционной системы выполняется с помощью программ. Поэтому новичкам важно понять как запустить программу на Linux, что происходит во время запуска и какие есть способы запуска.
Дальше мы рассмотрим виды программ, их запуск программ на Linux различными способами и другие полезные для новичков вещи, опытным пользователям это все и так уже известно.
Виды программ в Linux
Перед тем, как мы перейдем к запуску программ, нужно сначала понять что представляет из себя программа. В Linux программы отличаются от других файлов только тем, что для них установлен флаг исполняемости. Я уже подробно писал об этом в статье что такое исполняемость поэтому не буду повторяться.
Все программы можно поделить на несколько типов:
- Бинарные программы - содержат инструкции процессору уже готовые к выполнению, большинство программ находятся в таком формате, они быстрые и выполняются сразу же системой;
- Программы на байт-коде - это уже не процессорные инструкции, а инструкции определенной виртуальной машины, которая может их выполнять, без виртуальной машины такие команды не могут быть выполнены. Такие программы потребляют больше ресурсов, но тоже достаточно быстрые, их преимущество в том, что они могут выполняться без изменения везде где может работать виртуальная машина. К таким программам можно отнести программы на Java.
- Скриптовые программы - эти программы состоят из набора команд в виде обычного текста, которые выполняет специальный интерпретатор. Такие программы более медленные, но зато они проще в разработке и их код можно легко и быстро изменить.
А теперь перейдем к запуску программ.
Запуск программ в терминале
Изначально в операционных системах Unix и Linux не было графического интерфейса, поэтому программы запускались командами из терминала. Сейчас это тоже возможно и достаточно активно используется опытными пользователями. Синтаксис запуска программы выглядит таким образом:
/путь/к/файлу/программы параметры
Параметры указываются только, когда они нужны, но всегда оболочка должна знать полный путь к программе. Все что после имени программы и пробела - это параметры. Вы, наверное, уже заметили, что обычно мы не указываем полный путь при выполнении программ. Это было бы очень долго и неудобно.
Разработчики придумали обходной путь. Была создана переменная PATH, в которой хранятся все пути к папкам где обычно находятся программы - /bin, /sbin, /usr/bin, /usr/sbin и так далее. Вы можете посмотреть ее содержимое командой:
И можно передать параметры после пробела:
Когда программа находится не в этих каталогах, нужно указать к ней полный путь:
Если же вы хотите запустить программу через терминал ubuntu, которая находится в текущей папке, то ситуация будет немного другой. Система выполняет только поиск по папкам из переменной PATH, в текущей директории она не ищет. Поэтому, если вы наберете имя исполняемого файла, то получите ошибку. Нужно указывать полный путь, как вы помните путь к текущей папке будет ./:
Иногда возникает необходимость передать программе, какие-либо особые переменные окружения. Например, переменная EDITOR указывает какой текстовый редактор нужно использовать по умолчанию. Вы можете указать имя переменной и ее значение перед именем команды используя синтаксис:
имя_переменной = значение команда
По умолчанию эта команда открывает настройки утилиты sudo в редакторе Vim, но с этой переменной окружения настройки откроются в редакторе nano.
Запуск программ от имени другого пользователя
Вы уже знаете как запустить программу в терминале linux, а что насчет других пользователей? В Windows достаточно часто используется запуск программ от имени администратора чтобы программа могла получить больше прав доступа в системе. В Linux для этого используется утилита sudo. Ее имя можно расшифровать как switchuserdo - изменить пользователя и выполнить. По умолчанию утилита выполняет команду от имени суперпользователя root:
sudo команда
sudo whoami
sudo -u имя_пользователя команда
sudo -u postgres whoami
Команда whoami (кто я) выводит имя текущего пользователя.
Как запустить программу в фоне
Иногда возникает необходимость запустить долго выполняющуюся программу в терминале так, чтобы она не мешала дальше работать. Для этого можно использовать запуск программы в фоновом режиме linux:
dd if=/dev/zero of=
Система выведет PID, уникальный идентификатор программы, который вы потом можете использовать чтобы закрыть ее командой kill:
Как запустить скрипт в Linux
Мы уже говорили, что программы делятся на бинарные и интерпретируемые. Раньше мы говорили только про бинарные программы. Для запуска интерпретируемых нужен непосредственно интерпретатор, к таким программам относятся написанные на таких языках, как Java, Python, Perl, Ruby, PHP, NodeJS и многих других. Синтаксис запуска такой программы отличается:
интерпретатор /путь/к/файлу/программы параметры
Разные интерпретаторы ведут себя по разному, поэтому лучше сразу указывать полный путь к программе. Python обычно подхватывает скрипты из текущей папки без указания полного пути:
А Java программы нужно запускать так:
java -jar program.jar
Для файлов интерпретируемых программ флаг исполняемости необязательный, поскольку они передаются в виде параметра основной программе. Только Bash скрипты составляют исключение. Вы можете запустить скрипт интерпретатором:
Или же просто набрать путь к скрипту:
Оболочка сама определяет свои скрипты по флагу исполняемости и выполняет их. Если флаг исполняемости не установлен, то его стоит добавить:
sudo chmod u+x ./script.sh
Поэтому то и для большинства интерпретируемых программ созданы простые sh скрипты которыми их можно быстро запустить.
Запуск программ Linux в графическом интерфейсе
Намного удобнее запускать программы через графический интерфейс. Если консольные программы так запускать невозможно, то для всех графических утилит существуют ярлыки, которые вы можете найти в главном меню системы:
Кроме того, вы можете запустить программу из файлового менеджера, двойным кликом мышью, но тогда для нее обязательно должен быть установлен флаг исполняемости.
Точно так же работает запуск скриптов в графическом интерфейсе. Вы можете найти все ярлыки из меню в каталоге /usr/share/applications/. Любую программу можно запустить двойным щелчком отсюда. Но давайте посмотрим что находится внутри ярлыка, для этого откройте его в текстовом редакторе:
Кроме всего прочего, в строке Exec указана команда, которая выполняет запуск программы linux, когда вы делаете двойной клик на ярлыке. Вы можете взять один из существующих ярлыков и сделать на его основе свой. Здесь указано просто имя программы. Но важно заметить, что лучше указывать полный путь в таких местах, как ярлыки, скрипты, cron и так далее это уменьшит количество ошибок, поскольку вы не можете знать проверяет ли система в этом случае PATH или ищет программу только в текущем каталоге. Теперь вы знаете все о том как запустить программу на linux.
Выводы
В этой статье мы рассмотрели как запустить программу через терминал ubuntu или в других дистрибутивах Linux. Несмотря на то, что это кажется очень простой темой, тут есть свои интересные моменты, которые могут быть полезны. Но вы о них уже знаете. Если у вас остались вопросы, спрашивайте в комментариях!
В Ubuntu 17.10 используется сеанс Wayland по умолчанию, а Xorg, как альтернатива, и поэтому многие графические приложения, которые должны запускаться от root-пользователя, не работают в Wayland.
И это уже не новинка, и все вы уже давно слышали об этом. Также вы наверняка знаете, что вы можете в любой момент переключится на использование Xorg, на экране входа в систему.
Не удалось запустить grub-customizer в качестве пользователя root. Не удалось скопировать файл Xauthorization пользователя.
А если вы попробуете запустить графическое приложение с помощью sudo, окно терминала вам выдаст ошибку:
No protocol specified
Unable to init server: Не удалось подключиться к: В соединении отказано
Для этого, откройте терминал(Ctrl+Alt+T), и выполните команду:
После запуска команды, вы сможете временно запускать эти графические приложения с помощью sudo, gksu, pkexec команд, пока вы не выйдете из системы.
А чтобы у вас была возможность всегда запускать эти приложения, добавьте эту команду в автоматически запускаемые приложения.
Далее, нажмите на кнопку добавить программу
имя: Любое имя
команда: xhost si:localuser:root
Описание: Любое описание
И можете спокойно запускать эти приложения.
Если вы знаете какой-нибудь другой способ запуска этих приложений, то поделитесь пожалуйста в комментариях ниже.
Читайте также: