Jack Server Settings; text selection in dialogs.
This commit is contained in:
+5
-1
@@ -813,7 +813,11 @@ public:
|
||||
void
|
||||
do_read()
|
||||
{
|
||||
// Set the timer
|
||||
// make the request empty before reading
|
||||
// otherwise the operation behavour is undefined.
|
||||
req_ = {};
|
||||
|
||||
// Set the time
|
||||
timer_.expires_after(std::chrono::seconds(15));
|
||||
|
||||
// Read a request
|
||||
|
||||
+55
-1
@@ -193,6 +193,59 @@ static bool userExists(const char *userName)
|
||||
return true;
|
||||
}
|
||||
|
||||
void InstallPamEnv()
|
||||
{
|
||||
std::string newLine = "JACK_PROMISCOUS_SERVER DEFAULT=jack";
|
||||
std::vector<std::string> lines;
|
||||
std::filesystem::path path = "/etc/security/pam_env.conf";
|
||||
try
|
||||
{
|
||||
if (std::filesystem::exists(path))
|
||||
{
|
||||
{
|
||||
ifstream f(path);
|
||||
if (!f.is_open())
|
||||
{
|
||||
throw PiPedalException("Can't open pam_env.conf");
|
||||
}
|
||||
while (true)
|
||||
{
|
||||
std::string line;
|
||||
if (f.eof())
|
||||
break;
|
||||
std::getline(f, line);
|
||||
lines.push_back(line);
|
||||
}
|
||||
}
|
||||
|
||||
for (auto &line : lines)
|
||||
{
|
||||
if (line == newLine)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
lines.push_back(newLine);
|
||||
|
||||
{
|
||||
std::ofstream f(path);
|
||||
if (!f.is_open())
|
||||
{
|
||||
throw PiPedalException("Can't write to file.");
|
||||
}
|
||||
for (auto&line: lines)
|
||||
{
|
||||
f << line << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (const std::exception &e)
|
||||
{
|
||||
cout << "Failed to update " << path << ". " << e.what();
|
||||
}
|
||||
}
|
||||
|
||||
void InstallLimits()
|
||||
{
|
||||
if (SysExec(GROUPADD_BIN " -f " AUDIO_SERVICE_GROUP_NAME) != EXIT_SUCCESS)
|
||||
@@ -227,6 +280,7 @@ void MaybeStartJackService()
|
||||
void InstallJackService()
|
||||
{
|
||||
InstallLimits();
|
||||
InstallPamEnv();
|
||||
if (SysExec(GROUPADD_BIN " -f " JACK_SERVICE_GROUP_NAME) != EXIT_SUCCESS)
|
||||
{
|
||||
throw PiPedalException("Failed to create jack service group.");
|
||||
@@ -554,7 +608,7 @@ int main(int argc, char **argv)
|
||||
args.push_back((char *)(pkexec.c_str()));
|
||||
|
||||
std::string sPath = GetSelfExePath();
|
||||
args.push_back(const_cast<char*>(sPath.c_str()));
|
||||
args.push_back(const_cast<char *>(sPath.c_str()));
|
||||
for (int arg = 1; arg < argc; ++arg)
|
||||
{
|
||||
args.push_back(const_cast<char *>(argv[arg]));
|
||||
|
||||
+2
-2
@@ -1275,10 +1275,10 @@ private:
|
||||
void ThreadProc()
|
||||
{
|
||||
this_->restarting = true;
|
||||
this_->Close();
|
||||
// this_->Close(); (JackServerConfiguration now does a service restart.)
|
||||
try {
|
||||
ShutdownClient::SetJackServerConfiguration(jackServerSettings);
|
||||
this_->Open(this_->channelSelection);
|
||||
//this_->Open(this_->channelSelection);
|
||||
this_->restarting = false;
|
||||
onComplete(true, "");
|
||||
isComplete = true;
|
||||
|
||||
@@ -214,20 +214,17 @@ void JackServerSettings::Write()
|
||||
output << line << endl;
|
||||
}
|
||||
// the style used by qjackctl. :-/
|
||||
// Lower to -P70 in order to allow the USB soft-irq to run at higher priority than JACK (it runs at 80).
|
||||
output << "/usr/bin/jackd "
|
||||
<< "-R -P90"
|
||||
<< "-R -P70 --silent"
|
||||
<< " -dalsa -d" << this->alsaDevice_
|
||||
<< " -r" << this->sampleRate_
|
||||
<< " -p" << this->bufferSize_
|
||||
<< " -n" << this->numberOfBuffers_ << " -Xseq"
|
||||
<< endl;
|
||||
system("/usr/bin/chmod 755 " DRC_FILENAME);
|
||||
system("pulseaudio --kill");
|
||||
system("/usr/bin/systemctl unmask jack");
|
||||
system("/usr/bin/systemctl enable jack");
|
||||
if (system("/usr/bin/systemctl restart jack") != 0)
|
||||
{
|
||||
throw PiPedalException("Failed to start jack audio service.");
|
||||
}
|
||||
}
|
||||
catch (const std::exception &e)
|
||||
{
|
||||
|
||||
@@ -910,13 +910,17 @@ void PiPedalModel::SetJackServerSettings(const JackServerSettings &jackServerSet
|
||||
Lv2Log::error(s.str().c_str());
|
||||
}
|
||||
// Update jack server status.
|
||||
this->jackConfiguration.SetIsRestarting(false);
|
||||
if (!success)
|
||||
{
|
||||
this->jackConfiguration.SetIsRestarting(false);
|
||||
this->jackConfiguration.SetErrorStatus(errorMessage);
|
||||
fireJackConfigurationChanged(this->jackConfiguration);
|
||||
}
|
||||
else
|
||||
{
|
||||
// we now do a complete restart of the services,
|
||||
// so just sit tight and wait for the restart.
|
||||
#ifdef JUNK
|
||||
this->jackConfiguration.SetErrorStatus("");
|
||||
fireJackConfigurationChanged(this->jackConfiguration);
|
||||
|
||||
@@ -927,6 +931,7 @@ void PiPedalModel::SetJackServerSettings(const JackServerSettings &jackServerSet
|
||||
jackHost->SetPedalBoard(lv2PedalBoard);
|
||||
updateRealtimeVuSubscriptions();
|
||||
updateRealtimeMonitorPortSubscriptions();
|
||||
#endif
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -86,11 +86,16 @@ static void ReleaseAccessPoint(const std::string gatewayAddress)
|
||||
void delayedRestartProc()
|
||||
{
|
||||
sleep(1); // give a chance for websocket messages to propagate.
|
||||
std::string pipedalConfigPath = std::filesystem::path(GetSelfExePath()).parent_path() / "pipedalConfig";
|
||||
Lv2Log::error("Delayed Restart");
|
||||
std::string pipedalConfigPath = std::filesystem::path(GetSelfExePath()).parent_path() / "pipedalconfig";
|
||||
|
||||
std::stringstream s;
|
||||
s << pipedalConfigPath.c_str() << " --restart --excludeShutdownService";
|
||||
::system(s.str().c_str());
|
||||
if (::system(s.str().c_str())!= EXIT_SUCCESS)
|
||||
{
|
||||
Lv2Log::error("Delayed Restart failed.");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
bool setJackConfiguration(JackServerSettings serverSettings)
|
||||
@@ -247,8 +252,6 @@ private:
|
||||
{
|
||||
auto remainder = s.substr(strlen("setJackConfiguration "));
|
||||
|
||||
// xxx delete me
|
||||
Lv2Log::error("setJackConfiguration: " + remainder);
|
||||
|
||||
std::stringstream input(remainder);
|
||||
JackServerSettings serverSettings;
|
||||
|
||||
+1
-1
@@ -60,7 +60,7 @@ void json_writer::write(string_view v,bool enforceValidUtf8Encoding)
|
||||
{
|
||||
// convert to utf-32.
|
||||
// convert utf-32 to normalized utf-16.
|
||||
// write non-7-bit and unsafe characters as \uxxxx.
|
||||
// write non-7-bit and unsafe characters as \uHHHH.
|
||||
|
||||
auto p = v.begin();
|
||||
os << '"';
|
||||
|
||||
+3
-2
@@ -579,9 +579,10 @@ int main(int argc, char *argv[])
|
||||
PiPedalModel model;
|
||||
|
||||
// Pre-populate ALSA device info,wait for jackd service (daemon only)
|
||||
model.GetAlsaDevices(); // pre-cache ALSA devices.
|
||||
if (systemd)
|
||||
{
|
||||
auto devices = model.GetAlsaDevices();
|
||||
auto devices = model.GetAlsaDevices(); // pre-cache ALSA devices (most especially, the one which Jack will open, that we can no longer read)
|
||||
|
||||
auto serverSettings = model.GetJackServerSettings();
|
||||
if (serverSettings.IsValid())
|
||||
@@ -590,7 +591,7 @@ int main(int argc, char *argv[])
|
||||
if (!HasAlsaDevice(devices, serverSettings.GetAlsaDevice()))
|
||||
{
|
||||
Lv2Log::info("Waiting for ALSA device " + serverSettings.GetAlsaDevice());
|
||||
for (int i = 0; i < 15; ++i)
|
||||
for (int i = 0; i < 10; ++i)
|
||||
{
|
||||
sleep(1);
|
||||
devices = model.GetAlsaDevices();
|
||||
|
||||
Reference in New Issue
Block a user