chromium在fedora18_x64上启动报错 browser_main_loop.cc(143)] Running without the SUID sandbox!

本文介绍了解决Chromium在Fedora 18 x64环境下启动时报错的方法。通过在启动命令中添加特定参数,可以避免运行时出现的SUID沙箱警告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


chromium在fedora18_x64上启动报错 browser_main_loop.cc(143)] Running without the SUID sandbox! 


这种错误的解决办法:在启动命令添加参数,例如:

/opt/chrome-linux/chrome --disable-setuid-sandbox

<think>好的,我需要帮助用户在Chromium源码中添加一个自定义的--timezone参数,并在启动时解析该参数来设置时区。首先,我得回忆一下Chromium处理命令行参数的机制。根据引用[2]的内容,Chromium启动流程从main()进入,调用ChromeMain(),然后是ContentMain(),最后通过service_manager::Main启动服务。这说明命令行参数的解析可能发生在这些初始化阶段中的某个环节。 用户需要修改chrome_browser_main.cc文件。通常,Chromium的命令行参数处理分为几个步骤:首先定义参数,然后在代码中解析并使用它们。可能需要修改的地方包括定义参数的开关(switch)、解析命令行参数,并将参数值传递给时区设置函数。 首先,定义新的命令行参数。Chromium使用base::CommandLine来处理命令行参数,参数通常在switches.h中定义。用户需要在chrome/common/chrome_switches.cc或者content/public/common/content_switches.cc中添加一个新的switch,比如kTimezone。例如,在chrome_switches.cc中添加: const char kTimezone[] = "timezone"; 然后在switches.h中声明这个常量,以便其他文件可以引用。 接下来,在chrome_browser_main.cc中,当处理命令行参数时,需要获取这个参数的值。可能在ChromeBrowserMainParts的某个初始化阶段,比如PreEarlyInitialization或PreMainMessageLoopRun中,调用base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(switches::kTimezone)来获取时区值。 然后,需要将这个值传递给设置时区的函数。Chromium中时区设置可能涉及到ICU库的初始化,或者调用系统API来设置时区。比如,在base/i18n/timezone.cc中,可能有相关的函数可以设置时区。需要确认具体如何修改时区,可能需要调用如icu::TimeZone::adoptDefault(icu::TimeZone::createTimeZone(timezone_id))这样的代码。 需要注意的是,Chromium可能出于安全考虑限制了某些功能的修改,比如时区设置可能需要沙箱的权限。根据引用[3],如果遇到沙箱问题,可能需要添加--no-sandbox参数,但用户应该了解这样做的安全风险。 在代码修改后,需要重新编译Chromium,并运行out/Default/chrome.exe --timezone=Asia/Shanghai来测试参数是否生效。如果出现类似引用[1]中的文件缺失错误,可能需要检查编译步骤是否正确,或者是否存在文件路径错误。 最后,用户需要确保代码修改符合Chromium的编码规范,并且添加相应的单元测试来验证新功能。同时,要考虑到不同平台(Windows、Linux、macOS)处理时区的方式可能不同,可能需要平台特定的代码实现。</think>### 步骤说明 1. **添加命令行参数定义** 在`chrome/common/chrome_switches.cc`中注册`--timezone`参数: ```cpp const char kTimezone[] = "timezone"; ``` 并在`chrome/common/chrome_switches.h`中声明: ```cpp extern const char kTimezone[]; ``` 2. **解析命令行参数** 在`chrome/browser/chrome_browser_main.cc`的`ChromeBrowserMainParts::PreEarlyInitialization`阶段(或其他合适的位置)解析参数: ```cpp #include "base/command_line.h" #include "base/time/time.h" #include "chrome/common/chrome_switches.h" void ChromeBrowserMainParts::PreEarlyInitialization() { const base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); if (command_line->HasSwitch(switches::kTimezone)) { std::string timezone = command_line->GetSwitchValueASCII(switches::kTimezone); // 设置时区逻辑 } } ``` 3. **设置时区** 调用ICU库或系统API设置时区(需根据平台实现): ```cpp #include "third_party/icu/source/i18n/unicode/timezone.h" void SetApplicationTimezone(const std::string& timezone_id) { icu::TimeZone::adoptDefault(icu::TimeZone::createTimeZone(timezone_id.c_str())); } ``` 4. **编译与测试** 重新编译并运行: ```bash autoninja -C out/Default chrome out/Default/chrome.exe --timezone=Asia/Shanghai ``` ### 注意事项 - **沙箱限制**:若因沙箱权限导致失败,需添加`--no-sandbox`参数[^3],但需注意安全风险。 - **平台差异**:Windows和Linux/macOS的时区处理方式不同,需增加条件编译(如`#if defined(OS_WIN)`)。 - **ICU初始化时机**:确保在ICU库初始化完成后调用时区设置,否则可能无效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值