Что делает восклицательный знак в начале значения в конфигурационных файлах KDE, делают?

Нет никаких перераспределенных секторов, потому что им не удалось перераспределить. Ваш диск показывает 5 секторов Offline_Uncorrectable, который происходит, когда автоматическое восстановление перестало работать. Существуют очевидные отказы чтения, показанные в выводе dmesg, УМНЫХ ошибках, и читают отказы из УМНЫХ тестов. Существуют способы восстановить эти секторы, как Вы упомянули в вопросе, но на основе моего опыта это - очень краткосрочная фиксация.

Замените диск.

2
13.12.2013, 12:00
2 ответа

Позвольте нам просто спросить исходный код. Если Вы не интересуетесь деталями, просто пропустите в конец для наблюдения результата:

Существует KCM для установки приложений по умолчанию. Давайте искать его имя:

$ kcmshell4 --list | ack -i default
componentchooser           - Choose the default components for various services

Примечание: Выполняющий 5 шагов является конкретным хинду, но мог быть применен к любому другому распределению или мог быть заменен путем просматривания исходных репозиториев KDE вручную!

Давайте искать файловую систему файлы, принадлежащие componentchooser:

$ find /usr -name "*componentchooser*"
/usr/lib64/kde4/kcm_componentchooser.so
/usr/share/doc/HTML/en/kcontrol/componentchooser
/usr/share/doc/HTML/de/kcontrol/componentchooser
/usr/share/kde4/services/componentchooser.desktop
/usr/share/apps/kcm_componentchooser
/usr/share/locale/de/LC_MESSAGES/kcmcomponentchooser.mo

Теперь мы запросим диспетчер пакетов (в нашей Перевозке хинду случая) и попросим пакет, который содержит любой из этих файлов:

$ find /usr -name "*componentchooser*" | xargs qfile
kde-base/kdelibs (/usr/share/apps/kcm_componentchooser)
kde-base/kcontrol (/usr/share/apps/kcm_componentchooser)
kde-base/kcontrol (/usr/share/kde4/services/componentchooser.desktop)
kde-base/kcontrol (/usr/share/doc/HTML/en/kcontrol/componentchooser)
kde-base/kcontrol (/usr/lib64/kde4/kcm_componentchooser.so)
kde-base/kde-l10n (/usr/share/locale/de/LC_MESSAGES/kcmcomponentchooser.mo)
kde-base/kde-l10n (/usr/share/doc/HTML/de/kcontrol/componentchooser)

Поскольку мы ищем исходный код, который на самом деле пишет значение для браузера по умолчанию, мы должны изучить .so файл, который содержит фактический код, в то время как другие файлы просто предоставляют документацию (/usr/share/doc/[…]), метаинформация ([…].desktop) и строки перевода (/usr/share/locale/[…]).

Это означает, мы должны будем смотреть на пакет, обеспечивающий общий объект (.so) файл, который является kde-base/kcontrol на хинду.

Во-первых, мы удостоверяемся, источник tarball присутствует в нашей файловой системе путем просьбы, чтобы Перевозка загрузила его для этого пакета (--nodeps удостоверяется, только источники для этого пакета загружаются, но не для любых зависимостей):

$ emerge --fetchonly --nodeps kde-base/kcontrol
>>> Fetching (1 of 1) kde-base/kcontrol-4.11.4
 * kde-runtime-4.11.4.tar.xz SHA256 SHA512 WHIRLPOOL size ;-) ...    [ ok ]

В этом случае файл уже присутствовал и был просто своими контрольными суммами, были проверены.

Теперь мы собираемся распаковать этот файл во временное местоположение для исследования его далее:

$ cd /tmp
$ tar xf /usr/portage/distfiles/kde-runtime-4.11.4.tar.xz

Результатом является каталог kde-runtime-4.11.4 в который мы собираемся измениться теперь:

$ cd kde-runtime-4.11.4

Этот каталог содержит теперь много компонентов, принадлежащих kde-runtime пакет SC KDE. Мы интересуемся kcontrol компонент:

$ cd kcontrol

Теперь мы должны определить файл, который содержит исходный код для записи браузера по умолчанию в kdeglobalsrc. Существуют различные способы сделать это:

  1. Просмотрите структуру каталогов и попытайтесь найти файл его именем.
  2. Ищите файл, имя которого содержит что-то как componentchooser и исследуйте его исходный код
  3. Просканируйте исходный код и найдите непосредственно файл, который пишет значение BrowserApplication.

Кратчайший путь к нашей цели является опцией '3', таким образом, это - то, что мы собираемся сделать:

$ ack BrowserApplication
componentchooser/componentchooserbrowser.cpp
50:    QString exec = config.readPathEntry( QLatin1String("BrowserApplication"), QString("") );
92:    config.writePathEntry( QLatin1String("BrowserApplication"), exec); // KConfig::Normal|KConfig::Global

Так, очевидно, в строке '92' из файла componentchooser/componentchooserbrowser.cpp, это, было это значение, пишется, поэтому давайте более внимательно рассмотрим в нем:

 80 void CfgBrowser::save(KConfig *)
 81 {
 82     KConfigGroup config(KSharedConfig::openConfig("kdeglobals"), QLatin1String("General") );
 83     QString exec;
 84     if (radioExec->isChecked())
 85     {
 86         exec = lineExec->text();
 87         if (m_browserService && (exec == m_browserExec))
 88             exec = m_browserService->storageId(); // Use service
 89         else if (!exec.isEmpty())
 90             exec = '!' + exec; // Literal command
 91     }
 92     config.writePathEntry( QLatin1String("BrowserApplication"), exec); // KConfig::Normal|KConfig::Global
 93     config.sync();
 94
 95     KGlobalSettings::self()->emitChange(KGlobalSettings::SettingsChanged);
 96
 97     emit changed(false);
 98 }

В строке '92', ключ BrowserApplication записан и это - значение, находится в переменной exec. Восклицательный знак добавляется к командной строке в строке '90', но нет никакого тщательно продуманного комментария в коде в этой строке, которая объяснила бы, почему это сделано, поэтому давайте взглянем вместо этого на логику кода, которая приводит к добавлению ! перед BrowserApplication значение:

  • Строка '86' наборы exec к строке, которая обеспечивается полем ввода
  • Строка '87' проверки, ли членская переменная m_browserService верно и ли содержание переменной exec совпадает с членской переменной m_browserExec.
    • m_browserService установлен (0 или 1) методом CfgBrowser:: selectBrowser, когда браузер по умолчанию выбран путем просмотра дерева приложения вместо того, чтобы ввести исполняемое имя непосредственно как строку. В случае, если браузер выбран путем просмотра дерева приложения, содержание поля ввода является названием приложений *.desktop файл.
    • m_browserExec название *.desktop файл при выборе браузера через дерево приложения.
    • В случае, если оба оператора оценивают к TRUE, exec установлен на результат storageId (название *.desktop запись).
    • Иначе имя исполняемого файла определяется, но это предварительно ожидается !.

Сделать это коротким:

Восклицательный знак для BrowserApplication запись в kdeglobalsrc используется для различения фактическое двоичное имя, которое будет выполняться для запуска браузера или названия браузера *.desktop файл.

5
27.01.2020, 22:00
  • 1
    Потрясающий, суперподробный полный ответ. Спасибо Elias. –  Vince 14.12.2013, 07:25

Это наиболее вероятно отзыв для длительности команды, выполняемой с тем же именем. Немного поиска привело меня к этому сценарию, который повысился подозрение, что восклицательный знак является чем-то вроде колдовства удара.

Эта дискуссия о восклицательном знаке звучит релевантной.

Это, скорее всего, означает, что удар ожидает полное название команды, которое запускается с sensible-browser.

-1
27.01.2020, 22:00
  • 1
    я вполне уверен, что восклицательный знак используется только в качестве символа расширения истории в командной строке. Это - конкретно функция оболочки, и конфигурационные файлы KDE действительно не включают оболочку. Если Вы пристально смотрите на сценарий, Вы связались, он в основном просто делает несколько поисков и задач замены на использовании файла конфигурации sed. Также поиск "РАСШИРЕНИЯ ИСТОРИИ" в man bash. –  Vince 13.12.2013, 08:40
  • 2
    не Является тем же самым, которое я говорю в своем ответе: "Это наиболее вероятно отзыв для длительности команды, выполняемой с тем же именем". –  mkc 13.12.2013, 21:33
  • 3
    Это не используется всегда в качестве расширения истории или чего-то подобного, поскольку приложения KDE не связываются ни с какой определенной оболочкой. Они, как предполагается, работают над любой платформой (даже Windows), таким образом полагаться на некоторое определенное для удара расширение истории не имеет никакого смысла в этой точке. См. мой ответ на этот вопрос вместо этого, почему существует восклицательный знак. –  Elias Probst 13.12.2013, 23:13

Теги

Похожие вопросы